 | |
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 |
[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="attivo">';
}
// inserisce link e testo
echo '<a href="' . $link . '">' . $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. |
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 questoPHP:
index.php
florida/index.php
class="attivo">Home
index.php?id=servizi
florida/index.php
class="attivo">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="attivo">';
}
// inserisce link e testo
echo '<a href="' . $link . '">' . $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! |
|
|
|
|