Menu in html ed effetto con php
Moderatore: Staff
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
-
- Staff
- Messaggi: 5511
- Iscritto il: ven 16 gen 2004, 0:00
- Nome Cognome: Mauro Sacchetto
- Slackware: 13.0
- Kernel: 2.26
- Desktop: KDE
- Distribuzione: anche Debian
- Località: Venezia
Menu in html ed effetto con php
In attesa che Netsons chiarisca alcuni inghippi delle sue caselle,
ho un quesito a cui la compulsione dei sacri testi non ha dato risposta.
Mettiamo che devo comporre una pagina con degli elementi fissi.
Uso la funzione di inclusione e ho risolto.
Mettiamo però che un certo menu è uguale dappertutto,
tranne per il fatto che la pagina corrente è evidenziata
(ad es., in un CSS ho messo
#navbar a#activelink{background:white; color:black; font-weight:bold;}
mentre le altre voci sono in grigio chiaro.
Come posso dire a php di produrmi quella evidenziazione?
Grazie
M.
- conraid
- Staff
- Messaggi: 13630
- Iscritto il: gio 14 lug 2005, 0:00
- Nome Cognome: Corrado Franco
- Slackware: current64
- Desktop: kde
- Località: Livorno
- Contatta:
Re: Menu in html ed effetto con php
tu avrai nel menù qualcosa come, per esempiosamiel ha scritto: Mettiamo però che un certo menu è uguale dappertutto,
tranne per il fatto che la pagina corrente è evidenziata
(ad es., in un CSS ho messo
#navbar a#activelink{background:white; color:black; font-weight:bold;}
mentre le altre voci sono in grigio chiaro.
Come posso dire a php di produrmi quella evidenziazione?
Codice: Seleziona tutto
<a href="prima.php">prima</a>
<a href="seconda.php">seconda</a>
<a href="terza.php">terza</a>
<a href="quarta.php">quarta</a>
Codice: Seleziona tutto
<a href="seconda.php" <?php if (ereg ("seconda.php", $_SERVER['PHP_SELF'])) echo 'id="activelink"';?>>seconda</a>
Esistono metodi migliori, questo è quello che mi è venuto in mente prima e controlla se non ho fatto errori di sintassi
-
- Staff
- Messaggi: 5511
- Iscritto il: ven 16 gen 2004, 0:00
- Nome Cognome: Mauro Sacchetto
- Slackware: 13.0
- Kernel: 2.26
- Desktop: KDE
- Distribuzione: anche Debian
- Località: Venezia
Re: Menu in html ed effetto con php
M.
- giberg
- Linux 4.x
- Messaggi: 1282
- Iscritto il: mer 21 set 2005, 17:28
- Nome Cognome: Gianni
- Slackware: current64
- Kernel: 3.7.1
- Desktop: 4.8.5
- Località: S. Biagio di Callalta (TV)
Re: Menu in html ed effetto con php
In sostanza c'erano i link con descrizione contenuti in un array. Poi veniva "passata al setaccio" un elemento alla volta dell'array e se il link corrispondeva alla pagina corrente veniva stampato in una maniera, se non corrispondeva veniva stampato in un altra. Per aggiungere nuovi link bastava modificare soltanto l'array aggiungendo la pagina più la descrizione (cioè il testo che poi veniva stampato).
Ora non ho in mano il codice. Appena riesco provo a pulirlo dalle mie modifiche (magari trovo anche quello originale).
-
- Staff
- Messaggi: 5511
- Iscritto il: ven 16 gen 2004, 0:00
- Nome Cognome: Mauro Sacchetto
- Slackware: 13.0
- Kernel: 2.26
- Desktop: KDE
- Distribuzione: anche Debian
- Località: Venezia
Re: Menu in html ed effetto con php
Se invece giberg trova il codice... Data la mia inesperienza di php (sto leggendo
e facendo prove, ma a un livello ancora del tutto elementare), non sono
in grado di arrivare dalla tua descrizione a un codice...
Grazie
M.
- giberg
- Linux 4.x
- Messaggi: 1282
- Iscritto il: mer 21 set 2005, 17:28
- Nome Cognome: Gianni
- Slackware: current64
- Kernel: 3.7.1
- Desktop: 4.8.5
- Località: S. Biagio di Callalta (TV)
Re: Menu in html ed effetto con php
Io invece ho fatto in modo che visualizzasse una immagine che avevo creato (una piccola freccia) accanto al link attivo. Ecco il codice:
Codice: Seleziona tutto
<?php
$links = array( "/url/della/tua/pagina1.php" => "Pagina1",
"/url/della/tua/pagina2.php" => "Pagina2",
"/url/della/tua/pagina3.php" => "Pagine3"
);
$pagina_corrente = basename($_SERVER["PHP_SELF"]);
// Visualizzazione elementi menu
while (list($url,$desc)=each($links)) {
if (basename($url)==$pagina_corrente) {
echo "<img src=\"/url/di/una/immagine.png\" alt=\"\"> $desc<br>";
} else {
echo "<a href=\"$url\" title=\"$desc\">$desc</a><br>";
}
}
?>
Ovviamente chi sa programmare php saprà consigliarti anche soluzioni più complesse.
EDIT: ovviamente qui ho messo un'immagine al link attivo ma puoi benissimo metterci quello che vuoi. Come ti dicevo, nel codice originale che avevo trovato il menù appariva in questo modo (immaginando di essere alla Pagina2):
Pagina1 [ Pagina2 ] Pagina3
Nel mio invece appare (metto una emoticon tanto per rendere l'idea dell'immagine):
Pagina1
Pagina2
Pagina3
Poi aiutandoti con un foglio di stile puoi gestire tante altre cose.
-
- Staff
- Messaggi: 5511
- Iscritto il: ven 16 gen 2004, 0:00
- Nome Cognome: Mauro Sacchetto
- Slackware: 13.0
- Kernel: 2.26
- Desktop: KDE
- Distribuzione: anche Debian
- Località: Venezia
Re: Menu in html ed effetto con php
Allora: ho visto bene, ma non è proprio quello che cercavo.
Io ho creato un file functions.php dove ho messo tra l'altro:
Codice: Seleziona tutto
<?php
function headers () {
echo
<<<EOD
<div id="header">
<h1>TEATRO IN F<span class="emph">O</span>LLE</h1>
<div id="navbar_wrapper">
<div id="navbar">
<ul>
<li><a id="activelink_nb" href="index.html">Home</a></li>
<li><a href="./comenato.html">Com'è nato</a></li>
<li><a href="./chisiamo.html">Chi siamo</a></li>
<li><a href="./copioni.html">Copioni</a></li>
<li><a href="./immagini.html">Immagini</a></li>
<li><a href="./spettacoli.html">Spettacoli</a></li>
<li><a href="./contattaci.php">Contattaci</a></li>
</ul>
</div><!--navbar-->
</div><!--navbar_wrapper-->
</div><!--header-->
EOD;
};
?>
Codice: Seleziona tutto
<?php
headers ();
?>
Non so se mi sono spiegato con chiarezza...
M.
-
- Staff
- Messaggi: 5511
- Iscritto il: ven 16 gen 2004, 0:00
- Nome Cognome: Mauro Sacchetto
- Slackware: 13.0
- Kernel: 2.26
- Desktop: KDE
- Distribuzione: anche Debian
- Località: Venezia
Re: Menu in html ed effetto con php
C'era un errore di sintassi credo, perché mi dava:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /var/www/netsons.org/teatroinfolle/functions.php on line 10
ma ho fatto una correzione:
{$_SERVER['PHP_SELF']}
Adesso ho messo così:
Codice: Seleziona tutto
<?php
function headers () {
echo
<<<EOD
<div id="header">
<h1>TEATRO IN F<span class="emph">O</span>LLE</h1>
<div id="navbar_wrapper">
<div id="navbar">
<ul>
<li><a href="index.php" <?php if (ereg ("index.php",{$_SERVER['PHP_SELF']}))
echo 'id="activelink_nb"';?>Home</a></li>
<li><a href="chisiamo.php" <?php if (ereg ("chisiamo.php",
{$_SERVER['PHP_SELF']})) echo 'id="activelink_nb"';?>Chi siamo</a></li>
<li><a href="comenato.php" <?php if (ereg ("comenato.php",
{$_SERVER['PHP_SELF']})) echo 'id="activelink_nb"';?>Com'è nato</a></li>
<li><a href="copioni.php" <?php if (ereg ("copioni.php",
{$_SERVER['PHP_SELF']})) echo 'id="activelink_nb"';?>Copioni</a></li>
<li><a href="immagini.php" <?php if (ereg ("immagini.php",
{$_SERVER['PHP_SELF']})) echo 'id="activelink_nb"';?>Immagini</a></li>
<li><a href="spettacoli.php" <?php if (ereg ("spettacoli.php",
{$_SERVER['PHP_SELF']})) echo 'id="activelink_nb"';?>Spettacoli</a></li>
<li><a href="contattaci.php" <?php if (ereg ("contattaci.php",
{$_SERVER['PHP_SELF']})) echo 'id="activelink_nb"';?>Contattaci</a></li>
</ul>
</div>
</div>
</div>
EOD;
};
?>
Sento che simo vicini alla soluzione ma...
M.
-
- Staff
- Messaggi: 5511
- Iscritto il: ven 16 gen 2004, 0:00
- Nome Cognome: Mauro Sacchetto
- Slackware: 13.0
- Kernel: 2.26
- Desktop: KDE
- Distribuzione: anche Debian
- Località: Venezia
Re: Menu in html ed effetto con php
leggermente diversa dal punto di vista tecnico:
http://www.alistapart.com/articles/keepingcurrent/
Il mio codice risulterebbe allora così:
Codice: Seleziona tutto
<ul>
<li <?php if ($thisPage=="index") echo " id=\"activelink_nb\""; ?>
<a href="index.php">Home</a></li>
<li <?php if ($thisPage=="chisiamo")echo " id=\"activelink_nb\""; ?>
<a href="chisiamo.php">Com'è nato</a></li>
<li <?php if ($thisPage=="comenato") echo " id=\"activelink_nb\""; ?>
<a href="comenato.php">Com'è nato</a></li>
<li <?php if ($thisPage=="copioni") echo " id=\"activelink_nb\""; ?>
<a href="copioni.php">Copioni</a></li>
</ul>
siccome il mio CSS è così:
Codice: Seleziona tutto
/*stili per la navigazione menu header*/
div#navbar_wrapper {width:100%; height:60px; margin:auto; background-color:black; border-top:double #CECECE; border-bottom:double #CECECE;}
div#navbar ul{list-style:none; margin-top:20px; text-align:center;}
div#navbar ul{list-style:none; margin:0; padding:20px; text-align:center;}
div#navbar li{display:inline; margin:3px;}
div#navbar a{background:#A4A4A4; color:white; margin:0; padding:4px; text-decoration:none;}
div#navbar a:hover{background:#A4A4A4; color:black; text-decoration:underline;}
div#navbar a#activelink_nb{background:white; color:black; font-weight:bold;}
invece che su a? Questo spiegherebbe perché manca l'effetto.
e Firebug mi dà i vari a in effetti senza l'id "activelink"...
M.
- nuitari
- Linux 3.x
- Messaggi: 777
- Iscritto il: dom 14 ott 2007, 12:51
- Slackware: 12.0
- Località: San Colombano al Lambro
- Contatta:
Re: Menu in html ed effetto con php
Guardate quel codice e ditemi se è anche solo lontanamente ordinato, organizzato o leggibile. Non parliamo proprio del mantenibile poi...
-
- Staff
- Messaggi: 5511
- Iscritto il: ven 16 gen 2004, 0:00
- Nome Cognome: Mauro Sacchetto
- Slackware: 13.0
- Kernel: 2.26
- Desktop: KDE
- Distribuzione: anche Debian
- Località: Venezia
Re: Menu in html ed effetto con php
Guardate quel codice e ditemi se è anche solo lontanamente ordinato, organizzato o leggibile. Non parliamo proprio del mantenibile poi...[quote]
Oltre all'ironia sai produrre un consiglio utile?
M.
- aschenaz
- Staff
- Messaggi: 4623
- Iscritto il: mer 28 lug 2004, 0:00
- Nome Cognome: Nino
- Slackware: current
- Kernel: 5.4.x
- Desktop: KDE
- Località: Reggio Calabria
- Contatta:
Re: Menu in html ed effetto con php
Codice: Seleziona tutto
isset($_REQUEST["page"]) ? $page=$_REQUEST["page"] : $page="home";
// menu
$pgs=array("home","news","chi-siamo","gallery","documenti","storia","link","contatti");
$accs=array("h","n","w","g","p","d","s","c");
foreach($pgs as $kp=>$pg) {
echo "
<p class=\"menu\"> · ";
if($page!=$pg) echo "<a href=\"index.php?page=$pg\" accesskey=\"{$accs[$kp]}\" title=\"accesskey {$accs[$kp]}\">";
echo $pg;
if($page!=$pg) echo "</a>";
echo "</p>\n";
}
// al momento giusto, poi...
include_once("$page.php");
Io non uso le liste per i menu e separo con un carattere non linkato (nel caso il ·) per ragioni di accessibilità.
La differenza di visualizzazione tra il link attivo e gli altri la ottengo con i css per la classe .menu e per il tag a (magari specificato per la classe .menu).
Poi, se permetti un consiglio, con la tua tecnica di css (abuso IMHO di id) rischi di fare fogli enormi. Meglio usare l'accorpamento delle classi...
- conraid
- Staff
- Messaggi: 13630
- Iscritto il: gio 14 lug 2005, 0:00
- Nome Cognome: Corrado Franco
- Slackware: current64
- Desktop: kde
- Località: Livorno
- Contatta:
Re: Menu in html ed effetto con php
alcune cosesamiel ha scritto:Ho trovato questo articolo che suggerisce una soluzione
leggermente diversa dal punto di vista tecnico:
http://www.alistapart.com/articles/keepingcurrent/
Il mio codice risulterebbe allora così:Codice: Seleziona tutto
<ul> <li <?php if ($thisPage=="index") echo " id=\"activelink_nb\""; ?> <a href="index.php">Home</a></li> <li <?php if ($thisPage=="chisiamo")echo " id=\"activelink_nb\""; ?> <a href="chisiamo.php">Com'è nato</a></li> <li <?php if ($thisPage=="comenato") echo " id=\"activelink_nb\""; ?> <a href="comenato.php">Com'è nato</a></li> <li <?php if ($thisPage=="copioni") echo " id=\"activelink_nb\""; ?> <a href="copioni.php">Copioni</a></li> </ul>
1) Intanto come ti ha detto ninobi usa le classi per queste cose.
2) Questo esempio comporta che in ogni pagina, prima dell'inserimento del menù dai un valore alla variabile $thisPage
Quindi avrai qualcosa come
Codice: Seleziona tutto
<?php
$thisPage = 'copioni';
include 'menu.php'; //o come si chiama il file
?>
se non hai variabili da "valorizzare" (scusate non mi veniva il termine esatto) quando fai echo usa l'apice e non le virgolette. Più chiaro e consuma meno risorse. Nel tuo caso non lo noti, ma quando hai migliaia di righe di codice...
quindi
Codice: Seleziona tutto
echo ' id="activelink" '
Per fare contento nuitari devi trattare la porzione di codice tra
Codice: Seleziona tutto
echo <<<EOD
Codice: Seleziona tutto
EOD;
Il mio esempio era messo in una porzione di codice html con un richiamo al php
Come ti ho detto le soluzioni sono molte, ed anche la scrittura della stessa soluzione ha molti modi di essere fatta
5) anche il codice di A list Apart è fatto in modo da essere messo in una porzione di codice html e non direttamente in un porzione di codice PHP, stai attento
- puzuma
- Linux 2.x
- Messaggi: 482
- Iscritto il: mar 4 lug 2006, 17:14
- Nome Cognome: Stefano Salvador
- Slackware: current
- Kernel: 2.6.32.2
- Desktop: KDE 4.4.0
- Località: Udine
- Contatta:
Re: Menu in html ed effetto con php
Codice: Seleziona tutto
<?php
/* array che elenca le pagine possibili */
$pages = array('home', 'page1', 'page2');
/* setta la pagina di default */
$page = 'home';
/* se la pagina richiesta è valida settala */
if(in_array($_GET['page'], $pages)){
$page = $_GET['page'];
}
include 'html_index.php';
/ *funzione che produce il menu */
function menu()
{
global $pages, $page;
$html_menu = '';
$html_menu +='<ul>';
foreach($pages as $p){
if ($page == $p){
$html_menu += '<li class="activelink">';
} else {
$html_menu += '<li class="link">';
}
$html_menu += "<a href="index.php?page=$p">$p</a></li>";
}
$html_menu +='</ul>';
return $html_menu;
}
/* qui aggiungi altre funzioni di utilita', o meglio le metti tutte in un file che includi */
?>
il file html_index.php che includi sara' quasi tutto html:
Codice: Seleziona tutto
<html>
<head>
<title><?php echo $page %></title>
</head>
<body>
<div id="menu">
<?php echo menu(); ?>
</div>
<div id="content">
<?php include "html_$page.php" ?>
</div>
</body>
</html>
i link alle varie pagine risulteranno index.php?page=home, index.php?page=page1, ...
vantaggi:
- pulizia del codice
- coerenza stilistica delle varie pagine
- sicurezza: nessuno esegue script php che non siano quelli che hai deciso tu
svantaggi:
- per fare la stessa cosa hai tre file invece di uno
spero di essere stato abbastanza chiaro (e soprattutto bug free )
- conraid
- Staff
- Messaggi: 13630
- Iscritto il: gio 14 lug 2005, 0:00
- Nome Cognome: Corrado Franco
- Slackware: current64
- Desktop: kde
- Località: Livorno
- Contatta:
Re: Menu in html ed effetto con php
IMHO mai includere un file con un nome preso da una variabile non controllata.puzuma ha scritto: spero di essere stato abbastanza chiaro (e soprattutto bug free )
Codice: Seleziona tutto
<html>
<head>
<title><?php echo $page %></title>
</head>
<body>
<div id="menu">
<?php echo menu(); ?>
</div>
<div id="content">
<?php include "html_$page.php" ?>
</div>
</body>
</html>
Io metterei almeno di non poter essere eseguita questa pagina se non tramite include o require