PDA

View Full Version : [PHP\CSS]


skyfies
09-01-2014, 00:37
ciao ragazzi. sto strutturando un sito composto da una pagina menu.php (che contiene il menu principale del sito) da includere in tutte le pagine, con la riga di codice

<? include "menu.php"; ?>

dalla pagina menu.php richiamo delle classi di stile situate in un foglio css esterno che danno quest aspetto al menu

https://lh3.googleusercontent.com/-AysiFsQqIpI/Us3qR_zSLJI/AAAAAAAADZc/q125xCzEH8E/s800/Schermata%25202014-01-09%2520alle%252001.13.43.jpg

questo è il codice della pagina menu.php

<div class="invertedshiftdown">
<ul>
<li class="current"><a href="index.php" title="Home">Home</a></li>
<li><a href="youtube.php" title="New">youtube</a></li>
<li><a href="gallery.php" title="gallery">gallery</a></li>
</ul>
</div>


in rosso ho segnato il mio problema

class="current" richiama lo stile che fa diventare nera la voce del menu corrispondente alla pagina che si sta visitando

nella foto ad esempio ero su ""home""

il problema è che il menu ,essendo sempre lo stesso per tutte le pagine perchè viene richiamato con "include", apparira anche nelle altre pagine (youtube e galery) con la voce "home" in nero.

ovviamente lo stile css del menu funziona su altri lavori che ho fatto perchè le pagine avevano il loro menu che si ripeteva ogni volta e io a mano assegnavo class="include" al link che mi interessava.
adesso ho provato questa nuova soluzione con il menu richiamato, ma ho questo problema e nnon so risolverlo.

avete consigli per me? grazie in anticipo

Tuvok-LuR-
09-01-2014, 10:26
molto semplicemente puoi settare a mano una variabile $current all'inizio di ognuna delle pagine, ed essa sarà accessibile al file incluso.

altrimenti puoi usare la struttura dell'url per ricavare la sezione in cui ti trovi ed assegnarla a tale variabile.

un esempio al volo, se ho degli url del tipo
http://www.sito.com/
http://www.sito.com/?page=blog
http://www.sito.com/?page=articoli

caricherò quel parametro in una variabile da cui dipenderà l'assegnazione della classe dinamica<?php $current = filter_input(INPUT_GET, 'page'); ?>
una volta ottenuta, o settata a mano, la userò in menu.php
<ul>
<li <?= !$current ? 'class="current"' : '' ?>>Home</li>
<li <?= $current=='articoli' ? 'class="current"' : '' ?>>Articoli</li>
<li <?= $current=='blog' ? 'class="current"' : '' ?>>Blog</li>
</ul>

se i tuoi tag hanno altre classi ovviamente avrà un aspetto tipo:
<li class="link submenu <?= $current=='articoli' ? 'current' : '' ?>">Articoli</li>

nota che ho usato gli short tag di stampa (<?=) con l'operatore ternario (condizione ? true : false) che è molto utile per abbreviare nei casi in cui stai facendo templating.
Puoi anche scriverlo così <li <?php if ($current=='articoli') echo 'class="current"' ?>>Articoli</li>

in scenari reali in siti progettati decentemente avrai degli url del genere con url rewrite:
http://www.sito.com/
http://www.sito.com/articoli/
http://www.sito.com/articoli/14/il-mio-articolo
http://www.sito.com/blog/
http://www.sito.com/blog/56/oggi-ho-mangiato-un-gelato

ed userai qualcosa come:
explode('/', $_SERVER["REQUEST_URI"]);

skyfies
09-01-2014, 12:53
intanto grazie

ho provato con il codice da te postato e ho fatto un mix che mi fa funzionare il tutto.

in menu.php ho inserito

<li <?php if ($current=='index') echo 'class="current"' ?>><a href="index.php" title="home">home</a></li>
<li <?php if ($current=='youtube') echo 'class="current"' ?>><a href="youtube.php" title="youtube">youtube</a></li>
<li <?php if ($current=='gallery') echo 'class="current"' ?>><a href="gallery.php" title="gallery">gallery</a></li>

mentre per ogni pagina che lo richiamava ho inserito

<?php $current = 'nome pagina'; ?>

:mano: grazie