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

    snellire codice di un menu con array ripetuti

    sicuramente quello che sto chiedendo è una bazzecola per chi conosce bene la sintassi php... ma io sono in difficoltà

    ho un menu che consiste in una lista di definizione <dl>.
    ogni <dd> contiene un link, ed ogni link è costruito su un meccanismo che rende non cliccabile il link corrente. i vari blocchi di <dd> sono racchiusi in array.
    il problema è che ognuno di questi array è separato dal <dt> della sezione successiva, e questo implica che debba ripetere tutto lo script per ogni array di <dd>...

    come posso snellire il codice di questo menu, togliendo un po' di ripetizioni?


    Codice PHP:
    <dl id="menu">
    <?
    // ***************************
    echo '<dt>'.$trad['titolo_1'].'</dt>';
    // ***************************
    $voci_menu = array (
    'link1' => 'link1.php',
    'link2' => 'link2.php',
    'link3' => 'link3.php',
    );
    foreach (
    $voci_menu as $text => $link) {
    $pag_attuale basename($_SERVER['SCRIPT_NAME']);
        if  (
    $pag_attuale == $link) {
        echo 
    '<dd><div class="nolink">'.$trad[$text].'</div></dd>
    '
    ;}
        else
        echo 
    '<dd>[url="'.$link.'"]'.$trad[$text].' [/url]</dd>
    '
    ;}
    // ***************************
    echo '<dt>'.$trad['titolo_2'].'</dt>';
    // ***************************
    $voci_menu = array (
    'link4' => 'link4.php',
    'link5' => 'link5.php',
    'link6' => 'link6.php',
    );
    foreach (
    $voci_menu as $text => $link) {
    $pag_attuale basename($_SERVER['SCRIPT_NAME']);
        if  (
    $pag_attuale == $link) {
        echo 
    '<dd><div class="nolink">'.$trad[$text].'</div></dd>
    '
    ;}
        else
        echo 
    '<dd>[url="'.$link.'"]'.$trad[$text].' [/url]</dd>
    '
    ;}
    // ***************************
    echo '<dt>'.$trad['titolo_3'].'</dt>';
    // ***************************
    $voci_menu = array (
    'link7' => 'link7.php',
    'link8' => 'link8.php',
    'mail' => 'mailto:xxx@xxx.it',
    );
    foreach (
    $voci_menu as $text => $link) {
    $pag_attuale basename($_SERVER['SCRIPT_NAME']);
        if  (
    $pag_attuale == $link) {
        echo 
    '<dd><div class="nolink">'.$trad[$text].'</div></dd>
    '
    ;}
        else
        echo 
    '<dd>[url="'.$link.'"]'.$trad[$text].' [/url]</dd>
    '
    ;}
    ?>
    </dl>
    «Prendo rifugio nel grande BOH»

  2. #2
    Non puoi fare un array di array

    e mettere un foreach dentro l'altro?

  3. #3
    Originariamente inviato da raven74
    Non puoi fare un array di array

    e mettere un foreach dentro l'altro?
    in che modo?
    «Prendo rifugio nel grande BOH»

  4. #4
    giusto uno spunto per farti capire, ci saranno degli errori di sicuro.

    crei un array $menu

    Codice PHP:

    $menu 
    = array();
    $menu[] = array (
    'link1' => 'link1.php',
    'link2' => 'link2.php',
    'link3' => 'link3.php',
    ); 

    $menu[] =  array (
    'link4' => 'link4.php',
    'link5' => 'link5.php',
    'link6' => 'link6.php',
    ); 
    //etc...
    $counter 0;
    foreach (
    $menu as $voci_menu) {
        
    $counter++:
        echo 
    '<dt>'.$trad['titolo_'.$counter].'</dt>'
        foreach (
    $voci_menu as $text => $link) {
            
    $pag_attuale basename($_SERVER['SCRIPT_NAME']);
            if  (
    $pag_attuale == $link) {
                echo 
    '<dd><div class="nolink">'.$trad[$text].'</div></dd>';
            }
            else
                echo 
    '<dd>[url="'.$link.'"]'.$trad[$text].' [/url]</dd>';
        } 


  5. #5
    Codice PHP:
    <dl id="menu">
    <?php
    $menu 
    = array(array('titolo' => 'titolo1',
                        
    'link1' => 'link1.php',
                        
    'link2' => 'link2.php',
                        
    'link3' => 'link3.php'),
                  array(
    'titolo' => 'titolo2',
                        
    'link4' => 'link4.php',
                        
    'link5' => 'link5.php',
                        
    'link6' => 'link6.php',),
                );
                
    for(
    $i 0$i count($menu); $i++)
    {
        foreach(
    $menu[$i] as $text => $link)
        {
            if(
    $text == 'titolo') echo "<dt>".$trad[$link]."</dt>\n";
            else
            {
            
                
    $pag_attuale basename($_SERVER['SCRIPT_NAME']);
                if (
    $pag_attuale == $link
                    echo 
    "<dd><div class='nolink'>".$trad[$text]."</div></dd>\n";
                else 
                    echo 
    "<dd>[url='".$link."']".$trad[$text]." [/url]</dd>\n";
            }
        }
    }
    ?>
    </dl>

  6. #6
    grazie!! gentilissimi

    ho capito il concetto.
    stasera faccio un po' di prove, e in caso di problemi posterò qui...
    «Prendo rifugio nel grande BOH»

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.