Foreach PHP

  • Creatore Discussione Creatore Discussione Fabio90
  • Data di inizio Data di inizio

Fabio90

Utente Attivo
29 Feb 2012
507
0
16
PHP:
<ul id="link">
       <?php foreach ($menu as $k => $v) { ?>
          <li><a href="<?php echo $k ?>"><?php echo $v ?> </a></li>
       <?php } ?>
</ul>

<?php
$menu = array("/BiesseCar/carrozzeria.php" => "Carrozzeria", "/BiesseCar/allestimento-veicoli.php" => "Allestimento Veicoli" , "/BiesseCar/veicoli-speciali.php" => "Veicoli Speciali" );
?>

Un saluto a tutti. Il foreach funziona correttamente. Volevo sapere come assegnare alle voci del menu "Allestimento Veicoli" e "Veicoli Speciali" rispettivamente le classi "allestimento" e "veicoli".
 
Ultima modifica di un moderatore:
ciao
scusa non capisco bene, ma vorresti una cosa del genere (i punti li ho messi solo per distanziale)?

carrozzeria
....Carrozzeria
allestimento
....Allestimento veicoli
veicoli
....Veicoli speciali

se è così potresti provare a fare array di array (lo scrivo esteso)
PHP:
<?php
$menu['carrozzeria']['/BiesseCar/carrozzeria.php']="Carrozzeria";
$menu['allestimento']['/BiesseCar/allestimento-veicoli.php']="Allestimento Veicoli";
$menu['veicoli']['/BiesseCar/veicoli-speciali.php']="Veicoli Speciali";
//.....
foreach($menu as $chiave => $valore){
	echo "<ul id="link">";
	echo "<li>$chiave</li>";
	echo "<ul id="link">";
	foreach($valore as $k => $v){
		echo "<li><a href=\"$k\">$v</a></li>";
	}
	echo "</ul>";
	echo "</ul>";
}
?>


p.s.
racchiudi sempre il codice tra gli appositi tag
 
grazie della risposta!
Cmq non è proprio quello che intendevo. Volevo assegnare delle classi al secondo e terzo elemento del menù in modo da dargli un margin left tot px e distanziarli quanto voglio. Ora il menù lo vedo in questo modo:

CARROZZERIA(px default) ALLETIMENTO (px default) VEICOLI SPECIALI

invece vorrei vederlo così

CARROZZERIA (200px margin left) ALLESTIMENTO (200px margin-left) VEICOLI SPECIALI

Per questo pensavo a mettere le classi ad allestimento e veicoli
 
ciao
intendi una cosa del genere
HTML:
<head>
<style>
.oriz{
display:inline;}
</style>
</head>

<body>
<ul>
  <li class="oriz"> uno </li>
  <li class="oriz"> due </li>
  <li class="oriz"> tre </li>
</ul>
</body>
questo da
 
si esatto è quello il risultato che voglio ottenere. Vorrei sapere come dare le classi css agli elementi del foreach
 
Struttura l'array così:
PHP:
<?php
$menu = array(
    array(
        'link'  => 'http://www.example.com',
        'name'  => 'Link 1',
        'class' => null,
    ),

    array(
        'link'  => 'http://www.example.net',
        'name'  => 'Link 2',
        'class' => 'class1',
    ),

    array(
        'link'  => 'http://www.example.org',
        'name'  => 'Link 3',
        'class' => 'class3',
    ),
);

echo <<<'EOD'
<ul>
EOD;

foreach ($menu as $item) {
    $class = '';
    if ($item['class'] != null) {
        $class = sprintf(' class="%s"', $item['class']);
    }

    echo <<<EOD
    <li>
        <a href="{$item['link']}"{$class}>{$item['name']}</a>
    </li>
EOD;
}

echo <<<'EOD'
</ul>
EOD;
?>
 
Come non detto funziona tutto!! E' dreamweaver che è stupido grazie mille!!
Un'altra domanda. Come faccio a far si che sia evidenziata una voce del menu? Tipo quando sono sulla pagina carrozzeria si colora la parola di rosso ecc..
 
Ultima modifica:
Prova a modificare il foreach così:
PHP:
foreach ($menu as $item) {
    $classes = array($item['class']);
    if ($_SERVER['REQUEST_URI'] == $item['link']) {
        $classes[] = 'active';
    }

    $classes = implode(' ', $classes);

    echo <<<EOD
    <li>
        <a href="{$item['link']}" class="{$classes}">{$item['name']}</a>
    </li>
EOD;
}
Sappi che questo funzionerà solamente se il valore link si trova esattamente dopo il dominio del sito. Ad esempio, se hai una voce che punta a /sezione/pagina1.php, la voce avrà la classe active se l'URL nella barra degli indirizzi è: http://www.example.com/sezione/pagina1.php.
 
grazie mille funziona!! E per far si che funziona anche a livelli che non sono subito dopo il dominio?
 
Prova così:
PHP:
<?php
$routerPath = '';
$menu = array(
    array(
        'link'  => 'http://www.example.com',
        'name'  => 'Link 1',
        'class' => null,
    ),

    array(
        'link'  => 'http://www.example.net',
        'name'  => 'Link 2',
        'class' => 'class1',
    ),

    array(
        'link'  => 'http://www.example.org',
        'name'  => 'Link 3',
        'class' => 'class3',
    ),
);

echo <<<'EOD'
<ul>
EOD;

foreach ($menu as $item) {
    $classes = array($item['class']);
    if ($_SERVER['REQUEST_URI'] == $routerPath . $item['link']) {
        $classes[] = 'active';
    }

    $classes = implode(' ', $classes);

    echo <<<EOD
    <li>
        <a href="{$item['link']}" class="{$classes}">{$item['name']}</a>
    </li>
EOD;
}

echo <<<'EOD'
</ul>
EOD;
?>
E imposta alla variabile $routerPath il valore prima del vero URL (comprensivo di slash finale, se c'è).
 

Discussioni simili

L
Risposte
0
Visite
958
PHP
leonte54
L