.dsy:it.
Show 150 posts per page

.dsy:it. (http://www.dsy.it/forum/)
- Tech (http://www.dsy.it/forum/forumdisplay.php?forumid=189)
-- [PHP] aiuto su uno script menu (http://www.dsy.it/forum/showthread.php?threadid=28922)


Posted by publi on 14-01-2007 00:46:

[PHP] aiuto su uno script menu

Ho un menu e mi serve che la voce del menu selezionata resti attiva.
Sto utilizzando PHP+CSS.
Il css è ok.
Per php sto usando questo script che funziona solo se nell'array come valore di $link metto nome.php, se invece ho un url del tipo nome.php?id=nomeid il link lo legge perchè mi apre la pagina, ma non mi attiva il css che resta su home (index.php), come mai?

PHP:

<?php 
// definisce l'array di pagine
$pagine = array ('Home' => 'index.php','Servizi' => 'index.php?id=servizi');
    
// per ogni elemento dell'array di pagine
foreach ($pagine as $text => $link) {

// se sono nella pagina linkata
echo '<font';
if  (
substr($_SERVER['SCRIPT_NAME'],strrpos($_SERVER['
SCRIPT_NAME'
],'/')+1) == $link) {
// aggiunge la classe css
echo ' class="attivo">';
}

 
// inserisce link e testo
echo '<a href="' $link '">' $text '</a></font>';
}
?>


Posted by yeah on 14-01-2007 10:13:


code:
if (substr($_SERVER['SCRIPT_NAME'],strrpos($_SERVER[' SCRIPT_NAME'],'/')+1) == $link)


Perché confronti il nome del file con l'url, che in $link contiene anche la stringa di query (quella dal "?" in poi).

Una soluzione potrebbe essere:
code:
if (basename($_SERVER['PHP_SELF'].$_SERVER['QUERY_STRING']) == $link)


Se ben ricordo QUERY_STRING comprende anche il "?", quindi dovrebbe funzionare :)

__________________
?


Posted by publi on 14-01-2007 13:05:

spe, nel tuo mancava una parentesi )

ma mi fa la stessa cosa della mia riga...:?


Posted by yeah on 14-01-2007 17:44:

Hai ragione, l'ho corretto, grazie.

Allora stampa

code:
basename($_SERVER['PHP_SELF'].$_SERVER['QUERY_STRING']) $link substr($_SERVER['SCRIPT_NAME'],strrpos($_SERVER[' SCRIPT_NAME'],'/')+1)

E vediamo i risultati :)

__________________
?


Posted by publi on 14-01-2007 18:31:

Me la riscrivi correttamente?
Non ci capisco nulla li e l'ho riscritta cosi, ma non va.

PHP:

if (basename($_SERVER['PHP_SELF'].$_SERVER['QUERY_STRING'])
 substr($_SERVER['SCRIPT_NAME'],strrpos($_SERVER['S
CRIPT_NAME'],'/')+1) == $link)


Posted by yeah on 14-01-2007 18:51:

Aehm... no :) io ti ho riscritto l'if.
Sostituisci il mio codice al tuo.

__________________
?


Posted by publi on 15-01-2007 09:33:

non funziona.


Posted by yeah on 15-01-2007 11:12:

Fai così:

code:
echo basename($_SERVER['PHP_SELF'].$_SERVER['QUERY_STRING']).'<br />'; echo $link.'<br />'; echo substr($_SERVER['SCRIPT_NAME'],strrpos($_SERVER['S CRIPT_NAME'],'/')+1).'<br />';

inseriscilo nel foreach e posta il risultato :)

Ma se la condizione non viene soddisfatta, non entrando quindi nell'if, "<font" non resta senza la ">"?

__________________
?


Posted by publi on 15-01-2007 13:56:

ora stampa questo

PHP:

index.php
florida/index.php
class="attivo">Home
index.php?id=servizi
florida/index.php
class="attivo">Servizi


Posted by yeah on 15-01-2007 14:06:

Potresti ripostare tutto il codice insieme agli echo che ti ho fatto aggiungere? Giusto per avere la visione d'insieme :)

Comunque quel "florida/index.php" da dove spunta?

__________________
?


Posted by publi on 15-01-2007 14:23:

Florida è la cartella dove sta index.php

PHP:


<?php 
// definisce l'array di pagine
$pagine = array ('Home' => 'index.php','Servizi' => 'index.php?id=servizi');
        
// per ogni elemento dell'array di pagine
foreach ($pagine as $text => $link) {

// se sono nella pagina linkata
echo '<font';
echo 
basename($_SERVER['PHP_SELF'].$_SERVER['QUERY_STRING']).'<br />';
echo 
$link.'<br />';
echo   
substr($_SERVER['SCRIPT_NAME'],strrpos($_SERVER['S

CRIPT_NAME'
],'/')+1).'<br />';

// if  (substr($_SERVER['SCRIPT_NAME'],strrpos($_SERVER['
SCRIPT_NAME'],'/')+1) == $link) 
{
        
// aggiunge la classe appropriata
echo ' 
class="attivo">';
}
   
// inserisce link e testo
echo '
<a href="' . $link . '">' . $text . '</a></font>';
}

?>


Posted by yeah on 15-01-2007 14:39:

Questa cosa ti stampa

code:
<?php $pagine = array ('Home' => 'index.php','Servizi' => 'index.php?id=servizi'); foreach ($pagine as $text => $link) { echo "basename(): "; echo basename($_SERVER['PHP_SELF'].$_SERVER['QUERY_STRING']).'<br />'; echo "link: "; echo $link.'<br />'; echo "substr(): "; echo substr($_SERVER['SCRIPT_NAME'],strrpos($_SERVER['S CRIPT_NAME'],'/')+1).'<br />'; }

?

__________________
?


Posted by publi on 15-01-2007 14:42:

basename(): index.php
link: index.php
_SERVER: florida/index.php
class="attivo">Homebasename(): index.php
link: index.php?id=servizi
_SERVER: florida/index.php
class="attivo">Servizi


Posted by yeah on 15-01-2007 14:48:

C'è qualcosa che non va perché "class="attivo">Home" non dovrebbe comparire :-/

Strano che QUERY_STRING non produca nulla... ma per passare da una pagina all'altra usi link, suppongo? e "id" l'hai messo nei link? O meglio, la navigazione da una pagina all'altra funziona correttamente?

Dovrebbe, visto che, come hai scritto nel primo post, la pagina te la apre...

__________________
?


Posted by yeah on 15-01-2007 15:00:

Ok, ora dovrebbe funzionare, l'ho provato in locale

code:
<?php // definisce l'array di pagine $pagine = array ('Home' => 'index.php','Servizi' => 'index.php?id=servizi'); // per ogni elemento dell'array di pagine foreach ($pagine as $text => $link) { $thispage = basename($_SERVER['PHP_SELF']); if(!empty($_SERVER['QUERY_STRING'])) $thispage .= '?'.$_SERVER['QUERY_STRING']; echo $thispage; // se sono nella pagina linkata echo '<font'; if ($thispage == $link) { // aggiunge la classe css echo ' class="attivo">'; echo "(y)"; } else echo '>'; // inserisce link e testo echo '<a href="' . $link . '">' . $text . '</a></font><br />'; } ?>

Ho lasciato le righe di verifica ;)

__________________
?


Posted by publi on 15-01-2007 15:25:

Sei un mito! Ora sembra funzionare!
:D
Ti ringrazio molto!


Posted by yeah on 15-01-2007 15:27:

Di niente :)

__________________
?


All times are GMT. The time now is 05:15.
Show all 17 posts from this thread on one page

Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.