Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Caratterizzare la voce di menu della pagina corrente

    Un saluto a tutti...

    ho bisogno di un consulto con qualcuno più esperto di me (non ci vuole tanto ) in php...

    Avevo bisogno di caratterizzare la voce di menu della pagina corrente, in modo da richiamare via include un solo menu e poter fare le modifiche in un solo file...

    Cercando in vecchie discussioni qui sul forum ho trovato due esempi, ma le discussioni riguardavano altri dettagli o non erano portate a termine, per cui ho dovuto finire lo scriptino da me... VVoVe:

    Risultato... mi ritrovo con due versioni che fanno la stessa cosa... anche a modo mi sembra...

    Mi dite qual è la migliore? Magari con due righe di spiegazione sul perché, in modo che possa imparare qualcosina in più...

    Grazie in anticipo a chiunque mi concede un po' della sua attenzione e buon lavoro a tutti


    PRIMA VERSIONE:

    Codice PHP:
    <?php
    # pagine menu con relativi link
    $pagine = array ('prima' => 'prima.php','seconda' => 'seconda.php','terza' => 'terza.php''quarta' => 'quarta.php');
        echo
    '<ul id="nav">
        '
    ;

    #crea menu
    foreach ($pagine as $text => $link){
        
    #verifica se la pagina un cui siamo è quella del menu e associa $class="link_attivo" (selezionato) $class="link_neutro"; (non selezionato)
        
    if (basename($_SERVER['PHP_SELF'])==$link$class="link_attivo"; else $class="";
        echo
    '<li class="'.$class.'">[url="'.$link.'"]'.$text.'[/url]
        '
    ;
    }
        echo
    '
        [/list]
    '
    ;

    ?>
    SECONDA VERSIONE:

    Codice PHP:
    <?php
    // definisce l'array di pagine
    $pagine = array ('prima' => 'prima.php','seconda' => 'seconda.php','terza' => 'terza.php','quarta' => 'quarta.php');

    // inizia l'elenco
    echo '<ul>';

    // per ogni elemento dell'array di pagine
    foreach ($pagine as $text => $link)
    {
        
    // inizia la voce di elenco
       
    echo '<li';
       
       
    // se sono nella pagina linkata
       
    if (substr($_SERVER['SCRIPT_NAME'],strrpos($_SERVER['SCRIPT_NAME'],'/')+1) == $link)
       {
          
    // aggiunge la classe appropriata
           
    echo ' class="link_attivo"';
       }
       
       
    // inserisce link e testo
       
    echo '>[url="' $link '"]' $text '[/url]';
    }

    // chiude l'elenco
    echo '[/list]';
    ?>
    Per qualche princiapiante come me, che volesse utilizzare una delle due soluzioni...
    oltre a salvare uno dei due codici precedenti come menu.php, poi basta includerlo nel proprio html, ad esempio così:

    codice:
    <html>
    <head>
    <style type="text/css" media="all">
    .link_attivo{background:#FF0000;}
    
    </style>
    </head>
    
    <body>
    <? include("menu.php"); ?>
    </body>
    </html>
    O saisons, ô châteaux,
    Quelle âme est sans défauts?

    Rimbaud - L'Éternité (1872)

    EsseZeta - VisualWriting | www.essezeta.org

  2. #2
    Moderatore di Off Topic, Kickstarter e XML L'avatar di Sky
    Registrato dal
    Jul 2000
    residenza
    Roma
    Messaggi
    1,053
    Io userei una terza versione, a metà strada fra quelle che hai inserito :P

    Nel secondo caso l'HTML è troppo mischiato al codice php, è preferibile che siano più slegati possibile. Come efficienza e leggibilità penso che la prima sia migliore (quella che usa solo la funzione basename nel controllo if).
    Però eviterei di mettere sempre una classe a tutti i tag[*], anche se vuota, appesantisce inutilmente il codice html.

    <?php
    # pagine menu con relativi link
    $pagine = array ('prima' => 'prima.php','seconda' => 'seconda.php','terza' => 'terza.php', 'quarta' => 'quarta.php');

    # Inizializziamo la variabile contenente i tag[*]
    $menu = NULL;

    #crea menu
    foreach ($pagine as $text => $link){
    #verifica se la pagina in cui siamo è quella del menu e associa $class="link_attivo" (selezionato) $class="link_neutro"; (non selezionato)
    $class = (basename($_SERVER['PHP_SELF'])==$link) ? ' class="link_attivo"' : NULL;
    $menu .= " <li{$class}>'.$text."\n";
    }
    echo'[/list]
    ';

    echo <<<EOF
    <ul id="nav">
    $menu[/list]
    EOF;

    ?>

    Inoltre userei i rimandi a capo inseriti tramite la sequenza di escape \n, personalmente non mi piacciono le stringhe che si espandono su più righe solo per un a capo :D

    Ciao ciao :)
    Lo Stato deve dare ai cittadini, come diritto, ciò che la mafia dà come favore.
    Carlo Alberto dalla Chiesa

    Facebook | Twitter | Last.fm | LinkedIn | Quora

  3. #3
    Grazie Sky...
    molto interessante il tuo modo... (daccordissimo su escape \n)


    Correggo questa riga:

    Codice PHP:
     $menu .= " <li{$class}>[url="'.$link.'"]'.$text."[/url]\n"; 
    in questo modo (senza apici e punto prima e dopo le varie $ ):

    Codice PHP:
     $menu .= " <li{$class}>[url="$link"]$text[/url]\n"
    perché mi restituisce:
    Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in C:\xampp\htdocs\MENU_CORRENTE\tre\menu.php on line 12
    (che è proprio quella riga)

    Ma non mi è affatto chiaro il perché... né perché mi dà errore né perché ce le hai messe...

    A te (e ad altri) magari è invece chiaro... se ti/vi avanzano 5 min. mi spieghi in due parole?

    Inoltre: ma perché c'é il puntino qui? $menu .= "

    Poi: ganzo l'EOF !!! mai visto prima...

    Infine, sempre a vantaggio di chi vorrà utilizzarlo,
    posto il tuo codice corretto qui di seguito, ma se ci fossero altre correzioni (o controcorrezioni rispetto alle mie) ti prego di segnalarle...

    Codice PHP:
    <?php
    # pagine menu con relativi link
    $pagine = array ('prima' => 'prima.php','seconda' => 'seconda.php','terza' => 'terza.php''quarta' => 'quarta.php');

    # Inizializziamo la variabile contenente i tag[*]
    $menu NULL;

    #crea menu
    foreach ($pagine as $text => $link){
    #verifica se la pagina in cui siamo è quella del menu e associa $class="link_attivo" (selezionato) $class="link_neutro"; (non selezionato)
    $class = (basename($_SERVER['PHP_SELF'])==$link) ? ' class="link_attivo"' NULL;
    $menu .= " <li{$class}>[url="$link"]$text[/url]\n";
    }
    echo
    '[/list]
    '
    ;

    echo <<<EOF
    <ul id="nav">
    $menu[/list]
    EOF;

    ?>
    Ancora grazie...
    buonanotte a tutti
    O saisons, ô châteaux,
    Quelle âme est sans défauts?

    Rimbaud - L'Éternité (1872)

    EsseZeta - VisualWriting | www.essezeta.org

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.