Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    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 - ORDINE

    Più 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.

  2. #2

  3. #3
    the last one up

  4. #4
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591
    ..non ho capito granchè..
    forse questo potrebbe fare al caso tuo..
    http://www.phpriot.com/articles/sort...h-php-and-ajax

  5. #5
    Sembra essere qualcosa che fa al mio caso....

    Grazie!!

  6. #6
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,591
    ..è una bomba..

  7. #7
    Il drag and drop linkato da telegio consente di variare manualmente l'ordine delle righe di una tabella ma non risolve il problema nel caso dell'inserimento di un nuovo record con campo ordine=1, in tal caso si creerebbe un duplicato.

    io mi sono creato una classe PHP (che sto ancora sistemando visto che non è così intuitiva da utilizzare) che mi permette di ordinare arbitrariamente i dati di qualunque tabella, mantenendo l'ordine corretto anche in casi di delete, update o insert.
    In pratica non solo permette di spostare la posizione dei record tra loro tramite comode freccette, ma riaggiorna anche correttamente l'ordine sequenziale quando un record viene cancellato o quando ne viene inserito uno nuovo.
    Posto il codice utilizzato, se qualcuno è interessato si potrebbe provare a migliorarlo.
    Codice PHP:
    class CustomOrder {

        public function 
    balancePosition($action$table$primarykey$whereclause='') {
        
            switch (
    $action) {
        
                  case 
    'add':        
                     
    $counter 2;
                     break;
         
                  case 
    'clean':
                     
    $counter 1;
                     break;
                    
            }        
            
            
    $sql             "SELECT ".$primarykey." FROM ".$table.$this->setWhereClause(1$whereclause)." ORDER BY position";    
            
    $result         mysql_query($sql);

            while(
    $row mysql_fetch_array($result)) {
                
    $usql             "UPDATE ".$table." SET position='".$counter."' WHERE ".$primarykey."='$row[$primarykey]'".$this->setWhereClause(2$whereclause)."";
                
    $uresult         mysql_query($usql);
                
    $counter++;
            }

        }    
        
        public function 
    movePosition($direction$position$table$whereclause='') {

            switch (
    $direction) {
        
                  case 
    'up':        
                     
    $swap = ($position 1) ? $position-- : 1;
                     break;
         
                  case 
    'down':
                     
    $sql     "SELECT count(*) FROM ".$table.$this->setWhereClause(1$whereclause);
                    
    $result mysql_query($sql);
                     
    $row    mysql_fetch_row($result);
                     
    $max     $row[0];
                     
    $swap     = ($position $max) ? $position++ : $max;
                     break;

                  default:
                     
    $swap $position;
               }
        
               
    $sql "UPDATE ".$table." SET position = CASE position WHEN ".$position." THEN ".$swap." WHEN ".$swap." THEN ".$position." END WHERE position IN (".$position.", ".$swap.")".$this->setWhereClause(2$whereclause);
            
    $result mysql_query($sql);
       
    }

        private function 
    setWhereClause($type$whereclause) {
            
            if (
    $whereclause!='') {
            
                switch (
    $type) {
        
                    case 
    1:
                        
    $whereclause    " WHERE ".$whereclause;
                        break;
                    
                    case 
    2:
                        
    $whereclause  " AND ".$whereclause;
                        break;
                        
                }
            }
            
            return 
    $whereclause;
        
        }


  8. #8
    Grazie buribus.

    Proverò appena possibile la tua classe!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.