Homepage  Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum


.dsy:it. .dsy:it. Archive > Community > Tech
 
[PHP] aiuto su uno script menu
Clicca QUI per vedere il messaggio nel forum
publi
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=&quot;attivo&quot;>';
}

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


yeah

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 :)

publi
spe, nel tuo mancava una parentesi )

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

yeah
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 :)

publi
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)


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

publi
non funziona.

yeah
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 ">"?

publi
ora stampa questo
PHP:

index.php
florida/index.php
class=&quot;attivo&quot;>Home
index.php?id=servizi
florida/index.php
class=&quot;attivo&quot;>Servizi


yeah
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?

publi
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=&quot;attivo&quot;>';
}
   
// inserisce link e testo
echo '
<a href=&quot;' . $link . '&quot;>' . $text . '</a></font>';
}

?>


yeah
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 />'; }

?

publi
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

yeah
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...

yeah
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 ;)

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

yeah
Di niente :)

Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate