Repository 32bit  Forum
Repository 64bit  Wiki

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.

Re: Menu a tendina con PHP

Messaggioda samiel » gio set 01, 2011 12:33

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&amp;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.
samiel
Staff
Staff
 
Messaggi: 5500
Iscritto il: ven gen 16, 2004 0:00
Località: Venezia
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian

Re: Menu a tendina con PHP

Messaggioda aschenaz » gio set 01, 2011 13:19

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";
pensieriemotivi.aschenaz.eu - music-blog
Avatar utente
aschenaz
Staff
Staff
 
Messaggi: 4413
Iscritto il: mar lug 27, 2004 23:00
Località: Reggio Calabria
Nome Cognome: Nino
Slackware: current 64bit
Kernel: 3.14.5
Desktop: KDE 4.10.5

Re: Menu a tendina con PHP

Messaggioda samiel » gio set 01, 2011 18:49

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&amp;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.
samiel
Staff
Staff
 
Messaggi: 5500
Iscritto il: ven gen 16, 2004 0:00
Località: Venezia
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian

Re: Menu a tendina con PHP

Messaggioda aschenaz » gio set 01, 2011 18:57

Sostituisci
$includepath="$pagina/$sezione.php";
con..
$includepath="$pag/$sez.php";
pensieriemotivi.aschenaz.eu - music-blog
Avatar utente
aschenaz
Staff
Staff
 
Messaggi: 4413
Iscritto il: mar lug 27, 2004 23:00
Località: Reggio Calabria
Nome Cognome: Nino
Slackware: current 64bit
Kernel: 3.14.5
Desktop: KDE 4.10.5

Re: Menu a tendina con PHP

Messaggioda samiel » gio set 01, 2011 19:36

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: 5500
Iscritto il: ven gen 16, 2004 0:00
Località: Venezia
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian

Re: Menu a tendina con PHP

Messaggioda samiel » ven set 02, 2011 11:43

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&amp;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>
samiel
Staff
Staff
 
Messaggi: 5500
Iscritto il: ven gen 16, 2004 0:00
Località: Venezia
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian

Re: Menu a tendina con PHP

Messaggioda ccts2002 » ven set 02, 2011 12:29

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&amp;sezione=$chiavesezione\">$nomesezione</a></p></li>";
  }
  echo "
  </ul>";
}
Avatar utente
ccts2002
Linux 2.0
Linux 2.0
 
Messaggi: 155
Iscritto il: gio nov 09, 2006 23:20
Località: milano - trieste - catania

Re: Menu a tendina con PHP

Messaggioda aschenaz » ven set 02, 2011 13:05

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...
pensieriemotivi.aschenaz.eu - music-blog
Avatar utente
aschenaz
Staff
Staff
 
Messaggi: 4413
Iscritto il: mar lug 27, 2004 23:00
Località: Reggio Calabria
Nome Cognome: Nino
Slackware: current 64bit
Kernel: 3.14.5
Desktop: KDE 4.10.5

Re: Menu a tendina con PHP

Messaggioda samiel » ven set 02, 2011 14:46

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&amp;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?
samiel
Staff
Staff
 
Messaggi: 5500
Iscritto il: ven gen 16, 2004 0:00
Località: Venezia
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian

Re: Menu a tendina con PHP

Messaggioda aschenaz » ven set 02, 2011 18:58

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&amp;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...
pensieriemotivi.aschenaz.eu - music-blog
Avatar utente
aschenaz
Staff
Staff
 
Messaggi: 4413
Iscritto il: mar lug 27, 2004 23:00
Località: Reggio Calabria
Nome Cognome: Nino
Slackware: current 64bit
Kernel: 3.14.5
Desktop: KDE 4.10.5

Re: Menu a tendina con PHP

Messaggioda samiel » ven set 02, 2011 19:37

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.
samiel
Staff
Staff
 
Messaggi: 5500
Iscritto il: ven gen 16, 2004 0:00
Località: Venezia
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian

Re: Menu a tendina con PHP

Messaggioda aschenaz » ven set 02, 2011 20:22

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...
pensieriemotivi.aschenaz.eu - music-blog
Avatar utente
aschenaz
Staff
Staff
 
Messaggi: 4413
Iscritto il: mar lug 27, 2004 23:00
Località: Reggio Calabria
Nome Cognome: Nino
Slackware: current 64bit
Kernel: 3.14.5
Desktop: KDE 4.10.5

Re: Menu a tendina con PHP

Messaggioda samiel » ven set 02, 2011 21:00

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.
samiel
Staff
Staff
 
Messaggi: 5500
Iscritto il: ven gen 16, 2004 0:00
Località: Venezia
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian

Re: Menu a tendina con PHP

Messaggioda miklos » ven set 02, 2011 23:26

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 )
ho visto cose che voi astemi non potete immaginare
miklos
Linux 3.x
Linux 3.x
 
Messaggi: 1191
Iscritto il: lun lug 16, 2007 16:39
Località: Roma
Slackware: 14.1 64bit
Kernel: 3.12.6
Desktop: openbox 3.5.2

Re: Menu a tendina con PHP

Messaggioda aschenaz » sab set 03, 2011 13:01

Sì, come anticipato da miklos, devi fare il controllo su $pag non su $pagina...
pensieriemotivi.aschenaz.eu - music-blog
Avatar utente
aschenaz
Staff
Staff
 
Messaggi: 4413
Iscritto il: mar lug 27, 2004 23:00
Località: Reggio Calabria
Nome Cognome: Nino
Slackware: current 64bit
Kernel: 3.14.5
Desktop: KDE 4.10.5

PrecedenteProssimo

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti