Menu a tendina con PHP

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
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.
samiel
Staff
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 a tendina con PHP

Messaggio da samiel »

Codice di Ashkenaz, più avanzato:

Codice: Seleziona tutto

<?php
isset($_GET["pagina"]) ? $pag=$_GET["pagina"] : $pag="home";
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="it">
<head>
<title><?php echo $titles["$pagina"] ?></title>
<meta name="generator" content="Quanta Plus" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="description" content="<?php echo $descriptions["$pagina"] ?>" />
<meta name="keywords" content="<?php echo $keywords["$pagina"] ?>" />
<meta name="robots" content="index,follow" />
<link rel="stylesheet" type="text/css" href="stylesheets/layout.css" />
<script src="stylesheets/blank.js" type="text/javascript"></script>
<script type="text/javascript" src="stylesheets/addCSS.js"></script>
<script type="text/javascript">AddCSS('stylesheets/border.css')</script>
</head>

<body>
<div id="container">
<div id="wrapper">
<div id="header">
<h1>Circolo Culturale</h1>

<div id="hormenu_wrapper">
<div id="hormenu">
<ul id="hormenu">
<?php
$pagine=array(
"home"=>array(),
"chi"=>array("chisiamo","dovesiamo"=>"Dove siamo"),
"cosa"=>array("attivita"=>"Attività")
);
foreach($pagine as $pagina=>$sezioni) {
echo "
<li id=\"$pagina\"><a
href=\"index.php?pagina=$pagina\"><span>&nbsp;</span>$pagina</a>
  <ul>";
foreach($sezioni as $chiavesezione=>$nomesezione) {
  echo "
   <li><p><a
href=\"index.php?pagina=$pagina&sezione=$chiavesezione\">$nomesezione</a></p></li>";
  }
  echo "
  </ul>
</li>\n";
}
?>
</ul>
</div><!--navlist-->
</div><!--navlist_wrapper-->
</div><!--header-->

<!--includo le pagine-->
<div id="content">
<?php
$includepath="$pagina/$sezione.php";
if(file_exists($includepath)) include($includepath);
else @include("moduli/nondisp.php");
?>
</div><!--content-->

<div id="footer">
</div><!--footer-->
</div><!--wrapper--></div><!--container-->
</body>
</html>
comunque ci sono errori... :-(
M.

Avatar utente
aschenaz
Staff
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 a tendina con PHP

Messaggio da aschenaz »

Che tipo di errori?

Se non ti trova le pagine (o sezioni), è probabilmente perché tu indichi il percorso
con la variabile $pagina (hai creato delle sottodirectory con i nome delle pagine?):
in questo codice, la variabile $pagina è l'ultima assegnazione del ciclo foreach, mentre,
per indicare la sottodirectory, dovresti usare la variabile $pag, in cui viene memorizzata
la globale $_GET["pagina"] (o "home" di default)...

Quindi, se usi il sistema delle sottodirectory, probabilmente dovrest:
- inserire anche l'assegnazione della sezione in testa alla pagina, invece che
all'interno della pagina (come ti avevo suggerito prima io)...

Codice: Seleziona tutto

if(isset($_GET["sezione"])) $sez=$_GET["sezione"];
- richiamarle così...

Codice: Seleziona tutto

$includepath="$pag/$sez.php";

samiel
Staff
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 a tendina con PHP

Messaggio da samiel »

Ho aggiunto l'assegnazione per le sezioni in testa
(quella per le pagine c'era già), Il codice risulta

Codice: Seleziona tutto

<?php
isset($_GET["pagina"]) ? $pag=$_GET["pagina"] : $pag="home";
if(isset($_GET["sezione"])) $sez=$_GET["sezione"];
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="it">
<head>
<title><?php echo $titles["$pagina"] ?></title>
<meta name="generator" content="Quanta Plus" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="description" content="<?php echo $descriptions["$pagina"] ?>" />
<meta name="keywords" content="<?php echo $keywords["$pagina"] ?>" />
<meta name="robots" content="index,follow" />
<link rel="stylesheet" type="text/css" href="stylesheets/layout.css" />
<script src="stylesheets/blank.js" type="text/javascript"></script>
<script type="text/javascript" src="stylesheets/addCSS.js"></script>
<script type="text/javascript">AddCSS('stylesheets/border.css')</script>
</head>

<body>
<div id="container">
<div id="wrapper">
<div id="header">
<h1>Circolo Culturale</h1>

<div id="hormenu_wrapper">
<div id="hormenu">
<ul id="hormenu">
<?php
$pagine=array(
"home"=>array(),
"chi"=>array("chisiamo","dovesiamo"),
"cosa"=>array("attivita")
);
foreach($pagine as $pagina=>$sezioni) {
echo "
<li id=\"$pagina\"><a
href=\"index.php?pagina=$pagina\"><span>&nbsp;</span>$pagina</a>
  <ul>";
foreach($sezioni as $chiavesezione=>$nomesezione) {
  echo "
   <li><p><a
href=\"index.php?pagina=$pagina&sezione=$chiavesezione\">$nomesezione</a></p></li>";
  }
  echo "
  </ul>
</li>\n";
}
?>
</ul>
</div><!--navlist-->
</div><!--navlist_wrapper-->
</div><!--header-->

<!--includo le pagine-->
<div id="content">
<?php
$includepath="$pagina/$sezione.php";
if(file_exists($includepath)) include($includepath);
else @include("moduli/nondisp.php");
?>
</div><!--content-->
</div><!--wrapper--></div><!--container-->
</body>
</html>
Però in inghippo continua a esserci
QUando vado sulla home sembra correttamente individuata,
infatti mi dà come indirizzo quello in cui la pagina dovrebbe aprirsi
(anche se di fatto non si apre), e cioè
http://localhost/~samiel/tobagi4/index.php?pagina=home
Se invece cerco di aprire una sottosezione l'indirizzo risulta scorretto:
http://localhost/~samiel/tobagi4/index. ... &sezione=0

M.

Avatar utente
aschenaz
Staff
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 a tendina con PHP

Messaggio da aschenaz »

Sostituisci
$includepath="$pagina/$sezione.php";
con..
$includepath="$pag/$sez.php";

samiel
Staff
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 a tendina con PHP

Messaggio da samiel »

Avevo già sostuituito...
Dev'essere un dettaglio che mi sfugge...

E a proposito di
</li>

Codice: Seleziona tutto

<li id="home"><a href="index.php"></li>
,
mettere tutto nell'array ma così, per non avere il (sotto)menu vuoto:

Codice: Seleziona tutto

"home"=>array(),
è un assurdo?

M.

samiel
Staff
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 a tendina con PHP

Messaggio da samiel »

Posto per comodità il codice intero con la correzione

Codice: Seleziona tutto

<?php
isset($_GET["pagina"]) ? $pag=$_GET["pagina"] : $pag="home";
if(isset($_GET["sezione"])) $sez=$_GET["sezione"];
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="it">
<head>
<title><?php echo $titles["$pagina"] ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="description" content="<?php echo $descriptions["$pagina"] ?>" />
<meta name="keywords" content="<?php echo $keywords["$pagina"] ?>" />
<meta name="robots" content="index,follow" />
<link rel="stylesheet" type="text/css" href="stylesheets/layout.css" />
<script src="stylesheets/blank.js" type="text/javascript"></script>
<script type="text/javascript" src="stylesheets/addCSS.js"></script>
<script type="text/javascript">AddCSS('stylesheets/border.css')</script>
</head>

<body>
<div id="container">
<div id="wrapper">
<div id="header">
<h1>Circolo Culturale/h1>

<div id="hormenu_wrapper">
<div id="hormenu">
<ul id="hormenu">
<?php
$pagine=array(
"home"=>array(),
"chi"=>array("chisiamo","dovesiamo"),
"cosa"=>array("attivita")
);
foreach($pagine as $pagina=>$sezioni) {
echo "
<li id=\"$pagina\"><a
href=\"index.php?pagina=$pagina\"><span>&nbsp;</span>$pagina</a>
  <ul>";
foreach($sezioni as $chiavesezione=>$nomesezione) {
  echo "
   <li><p><a
href=\"index.php?pagina=$pagina&sezione=$chiavesezione\">$nomesezione</a></p></li>";
  }
  echo "
  </ul>
</li>\n";
}
?>
</ul>
</div><!--navlist-->
</div><!--navlist_wrapper-->
</div><!--header-->

<!--includo le pagine-->
<div id="content">
<?php
$includepath="$pag/$sez.php";
if(file_exists($includepath)) include($includepath);
else @include("moduli/nondisp.php");
?>
</div><!--content-->

<div id="footer">
. . . 
</div><!--footer-->

</div><!--wrapper--></div><!--container-->
</body>
</html>

Avatar utente
ccts2002
Linux 1.x
Linux 1.x
Messaggi: 155
Iscritto il: gio 9 nov 2006, 23:20
Località: milano - trieste - catania
Contatta:

Re: Menu a tendina con PHP

Messaggio da ccts2002 »

io aggiungerei un if (count( $sezioni") ) per evitare che crei una <ul></ul> vuota.

Codice: Seleziona tutto

if( count($sezioni) ) {
echo "<ul>\n";
foreach($sezioni as $chiavesezione=>$nomesezione) {
  echo "
   <li><p><a
href=\"index.php?pagina=$pagina&sezione=$chiavesezione\">$nomesezione</a></p></li>";
  }
  echo "
  </ul>";
}

Avatar utente
aschenaz
Staff
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 a tendina con PHP

Messaggio da aschenaz »

Secondo me, devi decidere innanzitutto cosa fare quando la sezione non è settata:
dovresti impostare una sezione di default per ogni pagina...
In ogni caso, per evitare la visualizzazione di errori, ti conviene mettere anche
l'else nella verifica della sezione, così:

Codice: Seleziona tutto

<?php
    isset($_GET["pagina"]) ? $pag=$_GET["pagina"] : $pag="home";
    isset($_GET["sezione"]) ? $sez=$_GET["sezione"] : $sez="";
    ?>
Inoltre, se tu nel foreach richiami le coppie chiave=>valore, gli array delle
sezioni devono sempre avere quel formato, così:

Codice: Seleziona tutto

$pagine=array(
    "home"=>array(),
    "chi"=>array("chisiamo"=>"chi siamo","dovesiamo"=>"dove siamo"),
    "cosa"=>array("attivita"=>"attivit&agrave;")
    );
Che è anche comodo per visualizzare voci di menu più normali... Altrimenti, se metti
solo il nome del file, foreach ti restituisce l'indice numerico della chiave (0, 1...).

Con queste semplici correzioni funziona...

Correttissimo il suggerimento di ccts...

samiel
Staff
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 a tendina con PHP

Messaggio da samiel »

Applicate le correzioni, ma col suggerimento di ccts
mi parte li menu. Posto il codice, o c'è una svista
nel suggerimento o l'ho applicato male io:

Codice: Seleziona tutto

<?php
isset($_GET["pagina"]) ? $pag=$_GET["pagina"] : $pag="home";
isset($_GET["sezione"]) ? $sez=$_GET["sezione"] : $sez="";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="it">
<head>
<title><?php echo $titles["$pagina"] ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="description" content="<?php echo $descriptions["$pagina"] ?>" />
<meta name="keywords" content="<?php echo $keywords["$pagina"] ?>" />
<meta name="robots" content="index,follow" />
<link rel="stylesheet" type="text/css" href="stylesheets/layout.css" />
<script src="stylesheets/blank.js" type="text/javascript"></script>
<script type="text/javascript" src="stylesheets/addCSS.js"></script>
<script type="text/javascript">AddCSS('stylesheets/border.css')</script>
</head>

<body>
<div id="container">
<div id="wrapper">
<div id="header">
<h1>Circolo Culturale</h1>

<div id="hormenu_wrapper">
<div id="hormenu">
<ul id="hormenu">
<?php
$pagine=array(
    "home"=>array(),
    "chi"=>array("chisiamo"=>"Chi siamo","dovesiamo"=>"Dove siamo"),
    "cosa"=>array("Attivita"=>"attivit&agrave;")
    );
foreach($pagine as $pagina=>$sezioni) {
echo "
<li id=\"$pagina\"><a
href=\"index.php?pagina=$pagina\"><span>&nbsp;</span>$pagina</a>
  <ul>";
if( count($sezioni) ) {
echo "<ul>\n";
foreach($sezioni as $chiavesezione=>$nomesezione) {
  echo "
   <li><p><a
href=\"index.php?pagina=$pagina&sezione=$chiavesezione\">$nomesezione</a></p></li>";
  }
  echo "
  </ul>";
}}
?>
</ul>
</div><!--navlist-->
</div><!--navlist_wrapper-->
</div><!--header-->

<!--includo le pagine-->
<div id="content">
<?php
$includepath="$pag/$sez.php";
if(file_exists($includepath)) include($includepath);
else @include("moduli/nondisp.php");
?>
</div><!--content-->


<div id="footer">
<?php...
?>
</div><!--footer-->

</div><!--wrapper--></div><!--container-->
</body>
</html>
PS
Voi che siete i guru di queste cose,
avete qualche notizia di Quant Plus?
Ancora nelle nebbie il porting per KDE4?

Avatar utente
aschenaz
Staff
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 a tendina con PHP

Messaggio da aschenaz »

C'e un UL in più:

foreach($pagine as $pagina=>$sezioni) {
echo "
<li id=\"$pagina\"><a
href=\"index.php?pagina=$pagina\"><span>&nbsp;</span>$pagina</a>
<ul>";
if( count($sezioni) ) {
echo "<ul>\n";
foreach($sezioni as $chiavesezione=>$nomesezione) {
echo "
<li><p><a
href=\"index.php?pagina=$pagina&sezione=$chiavesezione\">$nomesezione</a></p></li>";
}
echo "
</ul>";
}}


Tolto quello, funziona. :)

Per quanta+ non saprei... Non sto seguendo molto gli sviluppi. Mi sono abituato ad
usare kate...

samiel
Staff
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 a tendina con PHP

Messaggio da samiel »

Quasi perfetto!
Solo che... (che stress per me ma soprattutto per voi!)
non mi apre le pagine principali. Ad es nella home ricevo
"pagina non trovata". Invece le sezioni si aprono regolarmente

M.

Avatar utente
aschenaz
Staff
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 a tendina con PHP

Messaggio da aschenaz »

Certo! È quello di cui ti parlavo prima: devi decidere cosa fare quando la sezione
non è settata. Visto che usi le sottodirectory, io farei così: metterei la pagina
principale all'interno della sottodirectory (chiamandola con lo stesso nome della
pagina home.php etc...); poi modificherei l'assegnazione in testa così...

Codice: Seleziona tutto

isset($_GET["sezione"]) ? $sez=$_GET["sezione"] : $sez=$pag;
In questo modo, cliccando ad esempio su home, andrebbe a cercare la pagina
in home/home.php...

samiel
Staff
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 a tendina con PHP

Messaggio da samiel »

Sì sì perfetto così, grazieeeeeeee. Anche se le pagine non sono molte,
meglio collocarle per sezioni in sottodirectory diverse. Un'ultima cosa:

Codice: Seleziona tutto

<div id="footer">
<?php
print ($pagina == "home") ?
"<p>&copy; Circolo Culturale - 2011a</p>" : "<p>&copy; Circolo Culturale  - 2011b</p>";
?>
</div><!--footer-->
SI tratta naturalmente di una prova, ma anche sulla home vedo 2011b,
segno che non prende il foooter giusto... DIpende dal codice sopra?

M.

ilmich
Master
Master
Messaggi: 1645
Iscritto il: lun 16 lug 2007, 17:39
Slackware: 15.0 64bit
Kernel: 5.15.27
Desktop: kde
Località: Roma

Re: Menu a tendina con PHP

Messaggio da ilmich »

in php il confronto fra stringhe è più sicuro con 3 uguali(che è l'operatore che confronta sia il tipo che il contenuto di una variabile, in altre parole ti dice se due variabili sono identiche).
prova a correggere il controllo in questo modo

Codice: Seleziona tutto

$pagina === "home"
anche se è più probabile che tu debba sostituire il controllo usando la variabile $pag anziche' $pagina (non mi sono letto i vari post quindi non so bene come si è evoluta la situazione :D )
#LiveSimple and #ProgramThings
https://github.com/ilmich
http://ilmich6502.it/

Avatar utente
aschenaz
Staff
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 a tendina con PHP

Messaggio da aschenaz »

Sì, come anticipato da miklos, devi fare il controllo su $pag non su $pagina...

Rispondi