- Home
- Categorie
- Coding e Sistemistica
- PHP
- Ordinamento manuale voci menu
-
Ordinamento manuale voci menu
Ciao a tutti,
ho un menu (con relativi sottomenu e sotto-sotto menu) in cui dovrei integrare uno script per ordinare i menu, i sottomenu oppure i sotto-sotto menu secondo l'ordine prestabilito manualmente dall'utente, un pò come avviene con Joomla.
La mia tabella del DB si compone dei seguenti campi:
ID - NOME - MACROCATEGORIA - CATEGORIA - LINK - ORDINEPiù di tutto mi interessa capire come fare quando dal pannello d'amministrazione l'utente inserisce una voce con Ordine = 1 (ed è presupponibile che ci sia già un'altra voce precedentemente inserita con valore 1) e lo script deve essere in grado di scalare automaticamente le voci precedentemente inserite e "ricalcolare" il numero dell'ordine, in modo da non avere una numerazione con doppioni.
Per quanto riguarda la SELECT che andrà ad estrarre i record dal database secondo l'ordinamento, non ho problemi.
Grazie a tutti.
-
Carino come problema...
Ideuzza: Prendere l'ordine delle categorie sul $_POST, ordinarli per ordine dato dall'utente (i due elementi con numero uguale verranno messi vicini). A questo punto fai un foreach e inserisci gli id delle categorie ordinate in un nuovo array in modo tale da avere gli indici univoci.
Provo a spiegarmi in codice
[php]
/* supponiamo che i dati in post arrivino nell'array $_POST['cat_1'] = 1;
con come chiave la categoria con l'id e come valore la posizione specificata.
*/
asort($_POST, SORT_NUMERIC);
foreach ($_POST as $cat => $ord) {
$Order[] = $cat;
}
//a questo punto hai la variabile $Order con gli indici numerici univoci crescenti e come valore l'id della categoria passato nel form.
[/php]Spero di averne pensata una giusta... e non sono sicuro funzioni
-
In questi casi puoi usare un altro approccio, quello di togliere all'utente la possibilità di inserire un numero e farlo muovere solo con le classiche freccie (sposta su, sposta giu).
Vantaggio = cosi ti togli di mezzo la gestione di numeri uguali.
Svantaggio = se hai tanti record e l'utente vuole spostare il 90esimo in prima posizione, deve eseguire 90 operazioni..
Variante: puoi usare librerie javascript come script.aculo.us che gestiscono a meraviglia il drag/drop per cui l'utente sposta una cella quante posizioni vuole, in un colpo solo. Se poi ci combini un po di Ajax, lo show è servito (quando ho usato questa soluzione i clienti non vedevano l'ora di giocare con il pannello :D)Secondo approccio: l'utente anzichè scrivere valori progressivi (1,2,3,ecc) inserisce range.
Per cui il primo valore sarà 1, il secondo 10, il terzo 20 e via dicendo.. cosi se dovra spostare il quinto record in seconda posizione, gli basterà dargli valore 9 e nel db dovrai limitarti ad aggiornare 1 solo dato.
Soluzione "spiccia", con ovvi limiti (se all'area accede un admin va bene, ma se è un'area riservata agli utenti del sito hai voglia a spiegare la cosa.. e poi se sposta 1 record al giorno, a fine mese rischi di trovarti i range completi)
-
Innanzitutto vi ringrazio per le pronte risposte.
Per quanto riguarda la soluzione proposta da Takeno devo ancora testarla, per quanto propone infocurci la cosa è interessante, soprattutto per quanto riguarda il discorso del drag'n'drop di scriptacolous che ho già testato.
Effettivamente è graficamente accattivante e molto usabile, tuttavia il mio problema che non sono riuscito ancora a superare è "dire" la differenza di ordinamento tra le Macrocategorie, le Categorie e le relative Sottocategorie.
Perchè per quanto ho provato io (e la cosa è sicuramente migliorabile), il drag'n'drop non mi impedisce di spostare una Categoria prima di una Macrocategoria.Insomma, la cosa creerebbe un pò di possibile confusione.