Menu "a richiesta" 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.
Rispondi
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

Menu "a richiesta" con PHP

Messaggio da samiel »

Dovrei rivedere il codice di un sito, o meglio vorrei modificare
il sistema di generazione dei menu, in modo che il sottomenu
appaia solo se è settato. Posto il codice (tagliato) e poi mi spiego meglio:

Codice: Seleziona tutto

<?php
isset($_GET["pagina"]) ? $pagina=$_GET["pagina"] : $pagina="home";
$rightmenu=array(
  "modulistica"=>array("modulistica"=>"Modulistica",
  "utenti"=>"Utenza",
  "personale"=>"Personale"),
  "biblioteca"=>array("biblioteca"=>"La biblioteca",
	"regolamento_biblioteca"=>"Regolamento della Biblioteca")
);

$activemenu=0;
$folder="home";
foreach($rightmenu as $kmenu=>$vmenu) {
if(array_key_exists($pagina,$vmenu) | $pagina==$kmenu) {
$activemenu=$rightmenu[$kmenu];
$folder=$kmenu;
}
}
$vocimenu=array(
"home"=>"<span class=\"evid\">H</span>ome",
"chisiamo"=>"Ch<span class=\"evid\">i</span> siamo",
"contatti"=>"Conta<span class=\"evid\">t</span>ti"
);

$akmenu=array(
  "home"=>"H",
  "chisiamo"=>"I",
  "contatti"=>"T",
  "news"=>"N"
);

foreach($vocimenu as $voce=>$vocevisualizzata) {
echo "
<li>";

if($pagina!=$voce) echo "<a href=\"index.php?pagina=$voce\"
  accesskey=\"{$akmenu["$voce"]}\">";
  echo $vocevisualizzata;
if($pagina!=$voce) echo "</a>";
echo "</li>";
}
echo "\n";
?>

</ul>
</div><!--navbar--> </div><!--navbarwrapper--> </div><!--header-->

<div id="container"> <div id="wrapper"> <div id="leftmenu">
<ul>
<?php
$vocimenu2=array(
  "modulistica"=>"<span class=\"evid\">M</span>odulistica",
  "materiali"=> "Materiali",
  "biblioteca"=>"<span
class=\"evid\">B</span>iblioteca"
);

$akmenu2=array(
  "home"=>"H",
  "modulistica"=>"M",
  "biblioteca"=>"B"
);

foreach($vocimenu2 as $voce=>$vocevisualizzata) {
  echo "
  <li>";

if($pagina!=$voce) echo "<a href=\"index.php?pagina=$voce\"
  accesskey=\"{$akmenu2["$voce"]}\">";
  echo $vocevisualizzata;
if($pagina!=$voce) echo "</a>";
echo "</li>";
}
echo "\n";
?>

</ul>
</div><!--leftmenu--><div id="rightmenu">

<?php
if($activemenu) {
  echo "
  <ul>";
foreach($activemenu as $voce3 => $label) {
  echo "
  <li>";
if($pagina!=$voce3) echo '<a href="index.php?pagina='.$voce3.'">';
  echo $label;
if($pagina!=$voce3) echo "</a>";
echo "</li>";
}
echo "
</ul>\n";
} else echo "&nbsp;";
?>
Con questo impianto ogni voce principale genera sempre un menu sinistro
e ogni menu sinistro, se selezionato, genera sempre il corrispondente menu destro.
Se il menu a livello di CSS è costituito da solo testo, allora in apparenza
non succede niente: ma solo perché non si vede! Se però io volessi ad es
racchiuderlo in una cornice, allora il problema si evidenzia. Alcune voci di menu
determinanno l'apparizione di un menu vuoto, cioè di una cornice vuota.
Ecco, bisognerebbe che ogni voce di menu accertasse se c'è un sottomenu
e solo in questo caso generasse il sottomenu, altrimenti niente.
Solo che non capisco se si possa fare aggiungendo una condizione, un if ... then
o se è necessario reimpostare anche la struttura di partenza dei menu stessi...

Grazie
M.

Rispondi