menù a comparsa che prende i dati dal DB
menù a comparsa che prende i dati dal DB postato il 08/02/2014 11:28:12 nel forum programmazione, open source e hosting e modificato da de1980 il 08/02/2014 12:09:31
Buongiorno, dovrei creare un menù a comparsa che prende i dati da un database.
Mi spiego meglio, devo fare uno script che tramite un bottone apre altri bottoni, in questi ci saranno per ogni bottone un dato del database, e sotto ogni bottone con il dato del database ci dovrano essere altri bottoni che servono alla scelta finale che punteranno a una pagina.
Spero di essermi spiegata bene è un po' contorta la cosa ho provato a mettere assieme un paio di script ma non funziona come dovrebbe.
copio qui lo script:
<script language="JavaScript" type="text/JavaScript">
function mostraMenu(menuCorrente) {
if (document.getElementById) {
questoMenu = document.getElementById(menuCorrente).style
if (questoMenu.display == "block") {
questoMenu.display = "none"
}
else {
questoMenu.display = "block"
}
return false
}
else {
return true
}
}
</script>
<style type="text/css">
.menu {display:none; margin-left:20px}
li {list-style: none;}
ul {list-style-type:none;}
</style>
<ul class="nav site-nav">
<li class=flyout>
<li><a href=# onclick="return mostraMenu('menu1')"><button id='deposita'>Deposita</button></a></li>
<ul class="flyout-content nav stacked">
<?php
foreach( $arr_sel_tab_tranne as $chiave => $valore)
if( substr($chiave,0,2) != "Us" && $chiave != "id")
{
if($valore > 0)
{
?>
<li class=flyout>
<ul class='menu' id='menu1' > //Appunto sotto
<li><a href=# onclick="return mostraMenu('menu2')"><button id='deposita'> <?php echo $valore . " ". $chiave; ?> </button></a>
<ul class='menu' id='menu2' >
<a href="azione.php?azione=dep_1<?php echo $chiave; ?>"> <button style="width:30px" id="deposita">1</button></a>
<a href='azione.php?azione=dep_2<?php echo $chiave; ?>'> <button style='width:30px' id='deposita'>2</button></a>
<a href='azione.php?azione=dep_5<?php echo $chiave; ?>'> <button style='width:30px' id='deposita'>5</button></a>
<a href='azione.php?azione=dep_10<?php echo $chiave; ?>'> <button style='width:30px' id='deposita'>10</button></a>
<a href='azione.php?azione=dep_20<?php echo $chiave; ?>'> <button style='width:30px' id='deposita'>20</button></a>
<a href='azione.php?azione=dep_50<?php echo $chiave; ?>'> <button style='width:30px' id='deposita'>50</button></a><br />
<li class="flyout-alt">
</ul>
<?php
}
}
}
Lo script è un assemblato di pezzi vari fatto da me.
Pagine → 1
08/02/2014 14:56:40
Non ho dato una occhiata profonda, al momento non posso testarlo, ma ad occhio e croce sembra tutto corretto, tranne forse:
de1980 ha scritto:
<a href=# onclick="return mostraMenu('menu1')">
<a href=# onclick="return mostraMenu('menu2')">
Togli "return"
<a href=# onclick="mostraMenu('menu1')">
<a href=# onclick="mostraMenu('menu2')">
Stando a quello che ho capito (ci sta che ho guardato troppo alla luna e non al dito) la funzione ti fa qualcosa solo restituendo false, e quindi quando va ad eseguire il controllo sul return da false, non eseguendo nulla... ho detto malo?
08/02/2014 15:02:05 e modificato da leoblacksoul il 08/02/2014 15:05:06
Il javascript è giusto. è tutto il resto che è sbagliato.
Quel codice contiene errori di sintassi PHP, c'è una parentesi graffa chiusa alla fine che non corrisponde a nessuna graffa aperta (probabilmente la parentesi dopo il foreach che non è mai stata aperta).
Inoltre stai violando la logica degli id in una pagina web. Per ogni elemento nel tuo array, tu stai generando un elemento con id="menu1". In questo modo la pagina web finale conterrà tanti elementi con id="menu1" cosa che non è assolutamente corretta. Deve esserci uno e un solo elemento con un particolare id in una pagina web. Idem per i mille button con id="deposita"
Il comportamento di javascript in presenza di id multipli è indeterminato.
Poi, non so cosa vorresti ottenere graficamente, ma non credo che tu possa aprire degli elementi <ul> direttamente dentro a un altro <ul>. Puoi però aprire elementi <ul> dentro a elementi <li>, a patto che gli <li> abbiano il css display pari a "block" o "inline-block". E infine, gli elementi <li> vanno chiusi (</li>) nel tuo codice hai lasciato dei <li> aperti a caso prima della chiusura del rispettivo <ul>
08/02/2014 15:10:26
leoblacksoul ha scritto: è tutto il resto che è sbagliato.
... appunto il dito.
Ma magari mancano parti di codice?
08/02/2014 15:52:16
john galt ha scritto:
Ma magari mancano parti di codice?
No, semplicemente la parte successiva al javascript non può funzionare per i motivi che ho scritto sopra.
08/02/2014 16:32:33
leoblacksoul ha scritto:
No, semplicemente la parte successiva al javascript non può funzionare per i motivi che ho scritto sopra.
Ma si ovvio che l'errore sia sulla gestione degli ID non discuto. Avevo dato solo una letta veloce al JS e come veniva richiamato, non avevo neanche calcolato il foreach... per dire.
Mi riferivo alla creazione degli elenchi, magari fanno parte di una dichiarazione JQ per un menù automatico che usa dei metodi un po' esotici (ne ho visti di tutti i colori anche con doppio <li>), cioè se magari mancano parti (o magari non sono state copiate) di codice per implementare correttamente gli elenchi.
Per la questione ID, si l'errore è quello di assegnare stesso ID a ogni elemento, non discuto affatto, concordo in pieno.
Soluzione potrebbe essere quella di sfruttare indici di tabella per indicizzare i menù e sotto-menù e richiamarli con lo stesso id generato automaticamente.
Rimane "l'apertura del super-menù" da gestire con un div o un altra struttura indicizzata "menu1".
O forse la stessa doveva essere dentro al foreach, anche se in questo caso sarebbe un doppio click senza utilizzo.
08/02/2014 16:49:20
intanto grazie per le risposte, lo script lo so che fa acqua da tutte le parti, infatti all'inizio non lo avevo nemmeno inserito, poi mi è stato suggerito di metterlo per dare un'idea di quello che voglio fare.
la cosa del menu1 l'ho notata anch'io ma non sapevo come far mettere in automatico un nuovo menu con un numero progressivo per ogni elemento, per questo ho chiesto a qualcuno che forse mi poteva aiutare. Per la parentesi del foreach mi sembrava che qualcuno avesse scritto che mancava, infatti nel codice che ho copiato non c'è ma nel mio script l'ho messa. Per tutto il resto non so come procedere
18/02/2014 00:48:13
"ops"... Mi ero dimenticato di rispondere.
Prova questo:
<script language="JavaScript" type="text/JavaScript">
function mostraMenu(menuCorrente) {
if (document.getElementById) {
questoMenu = document.getElementById(menuCorrente).style
if (questoMenu.display == "block") {
questoMenu.display = "none"
} else {
questoMenu.display = "block"
}
}
}
</script>
<style type="text/css">
.menu {display:none; margin-left:20px}
.whareouse {display:none; margin-left:20px}
li {list-style: none;}
ul {list-style-type:none;}
</style>
<a href=# onclick="mostraMenu('whareouse'); return false;"><button id='openwharehouse'>Deposita</button></a>
<ul class="whareouse" id="whareouse"> <!-- "wharehouse" è l'elemento che "apre" tutti i sotto menù -->
<?php
$tip=0; // siccome non conosco se ci sono ID in quella tabella, carico una variabile arbitraria
foreach( $arr_sel_tab_tranne as $chiave => $valore){
$tip++; // ad ogni elemento della tabella, associo lavariabile, aumentando di 1
if( substr($chiave,0,2) != "Us" && $chiave != "id"){
if($valore > 0){
?>
<li><a href=# onclick="mostraMenu('menu2<?php echo $tip;?>'); return false;"><button id='openedrepository<?php echo $tip;?>'> <?php echo $valore . " ". $chiave; ?> </button> </a>
<ul class='menu' id='menu2<?php echo $tip;?>' > <!-- ogni elemento sarà di tipo "menu21", "menu22", "menu23"... e così via -->
<li>
<a href='azione.php?azione=dep_1<?php echo $chiave;?>'> <button style='width:30px' id='deposita<?php echo $valore."_".$chiave."_".$tip;?>'>1</button></a>
<a href='azione.php?azione=dep_2<?php echo $chiave;?>'> <button style='width:30px' id='deposita<?php echo $valore."_".$chiave."_".$tip;?>'>2</button></a>
<a href='azione.php?azione=dep_5<?php echo $chiave;?>'> <button style='width:30px' id='deposita<?php echo $valore."_".$chiave."_".$tip;?>'>5</button></a>
<a href='azione.php?azione=dep_10<?php echo $chiave;?>'> <button style='width:30px' id='deposita<?php echo $valore."_".$chiave."_".$tip;?>'>10</button></a>
<a href='azione.php?azione=dep_20<?php echo $chiave;?>'> <button style='width:30px' id='deposita<?php echo $valore."_".$chiave."_".$tip;?>'>20</button></a>
<a href='azione.php?azione=dep_50<?php echo $chiave;?>'> <button style='width:30px' id='deposita<?php echo $valore."_".$chiave."_".$tip;?>'>50</button></a>
</li>
</ul>
</li>
<?php
}
}
}
?>
</ul>
Come al solito, controllare sempre le ' (apici) e le variabili.
Ho messo dei commenti dove meglio serve per spiegare i passaggi.
Se non si capisce bene contattami in Mp.
Ovviamente non so che roba ti serve per le liste, quelle devi guardarle da sola.
Discussione seguita da
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Tibia ↗
World of Warship ↗
Seconda Era ↗
Fallen Gods ↗
Crossout ↗
Neverness to Everness ↗
Wuthering Waves ↗
Tiles Survive ↗