Back to top

Autore Topic: ordinare elementi da tabella.  (Letto 4598 volte)

Offline salsero72

  • Nuovo arrivato
  • *
  • Post: 42
    • Mostra profilo
ordinare elementi da tabella.
« il: 07 Gen 2010, 15:58:05 »
Ordinare liste.

Ciao,
in Admin, ho una serie di liste (da tabelle) da ordinare (campo order)

C'è qualche classe che ha già i metodi per cambiare l'ordine degli elementi listati?

(no parlo solo di crescente/decrescente) mi riferisco alle posizioni occupate in un elenco.  (first,1,2,3,4,5,n,last)

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:ordinare elementi da tabella.
« Risposta #1 il: 07 Gen 2010, 21:15:07 »
http://docs.joomla.org/JTable/reorder
ps il campo è ordering, non order

ciao,
marco
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline salsero72

  • Nuovo arrivato
  • *
  • Post: 42
    • Mostra profilo
Re:ordinare elementi da tabella.
« Risposta #2 il: 09 Gen 2010, 16:28:37 »
> http://docs.joomla.org/JTable/reorder

ciao! Cacchio ma le sai tutte!
Propongo l'apertura della sezione "Chiedi a Marco, lui lo sa!"


Comunque ho provato ma sbaglio qualcosa:
Ho un elenco con le caselline di testo "ordering".
Se ho 7 elementi con il metodo "reorder" dovrebbe disporli 1-7,

Se invece lo user mi inserisce un ordine = 8 o 25 o 90 o qualsiasi > 7 (in qs. esempio)  il risultato è
1,2,3,4,5,6,8
e poi non si sistema più. Nemmeno se trasformo l'8 in 1 e salvo.


Codice: [Seleziona]

/*
 supponiamo $oids = array(id_record=>ordine)
*/
$oids = array(
1=>5,
2=>2,
3=>4,
4=>3,
5=>6,
6=>1,
7=>90
);





Ho provato così:
Codice: [Seleziona]
    while (list($k,$v)=each($oid)) {
      $table->load($k);
      if($v>count($oid)){ $v = count($oid)-1; }
      $data['step_id'] = $k;  // table key
      $data['ordering'] = $v;  // ridondante ma mi serve       
                               // come contenuto minimo
                               // per triggare il "save"
      $table->save($data, $v); // uso l'argomento ordering del metodo save
      $table->reorder();
    }

Ho provato così:
Codice: [Seleziona]
    while (list($k,$v)=each($oid)) {
      $table->load($k);
      if($v>count($oid)){ $v = count($oid)-1; }
      $data['step_id'] = $k;  // table key
      $data['ordering'] = $v;
      $table->save($data);
      $table->reorder(); // nel loop
    }

Ho provato così:
Codice: [Seleziona]
    while (list($k,$v)=each($oid)) {
      $table->load($k);
      if($v>count($oid)){ $v = count($oid)-1; }
      $data['step_id'] = $k;  // table key
      $data['ordering'] = $v;
      $table->save($data);
     
    }
$table->reorder(); // fuori dal loop


Ma l'unico modo è

Codice: [Seleziona]
    while (list($k,$v)=each($oid)) {
      $table->load($k);
      // se la posizione è maggiore del numero elementi, la riduco al numero elementi - 1 (non chiedetemi il perchè)
      if($v>count($oid)){ $v = count($oid)-1; }
      $data['step_id'] = $k;  // table key
      $data['ordering'] = $v;
      $table->save($data);
    }
    $table->reorder();

Ma non mi piace..
Cosa sbaglio?

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:ordinare elementi da tabella.
« Risposta #3 il: 09 Gen 2010, 17:01:39 »
Codice: [Seleziona]
  while (list($k,$v)=each($oid))
questa non la vedevo dai tempi di php3 ;)

sinceramente non ho capito che cosa stai tentando di fare... soprattutto quando metti reorder() in un loop. ;)

vuoi aggiornare le tabelle con i dati di posizione inviati dall'utente? non ti serve reorder(), vuoi ri-ordinare la tabella  non ti serve aggiornarla.

vuoi fare le due cose assieme (rileggi il codice che hai scritto  >:( ), o mi stai dicendo che manca il 7? (in quest'ultimo caso dovrei andarmi a leggere i sorgenti :( )

ciao, marco
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline salsero72

  • Nuovo arrivato
  • *
  • Post: 42
    • Mostra profilo
Re:ordinare elementi da tabella.
« Risposta #4 il: 11 Gen 2010, 18:53:46 »
Codice: [Seleziona]
  while (list($k,$v)=each($oid))

:-(  sono vecchio!

Cosa si usa nel 2000? Foreach?  :-)

Comunque sì, manca il 7,

se non metto reorder e l'utente inserisce 1,2,10,40,76,90,2000
la tabella è ordinata sì, ma con non tante posizioni vuote..

(il reorder nel loop era uno dei vari tentativi)


Secondo me il codice giusto doveva erssere:
Codice: [Seleziona]
    while (list($k,$v)=each($oid)) {
      $table->load($k);  // carico il record
      $data['step_id'] = $k;  // table key
      $data['ordering'] = $v; 
      $table->save($data); // salvo i dati
     
    }
$table->reorder(); // riordino 1,2,3,4,x senza posizioni vuote


No?

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:ordinare elementi da tabella.
« Risposta #5 il: 11 Gen 2010, 20:52:51 »
se riconosco il coding style di php3 neanche io sono proprio giovane giovane ;)

comunque in un linguaggio ad oggetti, per quanto sui generis come php, è concettualmente più corretto usare un iteratore: quindi foreach, come hai giustamente detto.

reorder, se leggi la descrizione, in effetti si limita a riorganizzare gli indici, i valori comunque li devi salvare manualmente, avevo letto male il tuo post :(

quindi l'ultimo codice è giusto: perché manchi il 7 invece proprio non lo so :(

Codice: [Seleziona]
$data['step_id'] = $k;  // table key
questa non la ho capita invece, perché hai il campo step_id che contiene lo stesso valore di id? (o hai riscritto Jtable, ed in questo caso perché lo cambi?)

ciao,
marco
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline salsero72

  • Nuovo arrivato
  • *
  • Post: 42
    • Mostra profilo
Re:ordinare elementi da tabella.
« Risposta #6 il: 12 Gen 2010, 09:33:02 »
> questa non la ho capita invece, perché hai il campo step_id che contiene lo stesso valore di id? (o hai riscritto Jtable, ed in questo caso perché lo cambi?)

Hai ragione. Lì mi sono imbambolato io.
Lo inserivo nell'array per dirgli quale id cambiare. In realtà lo sa già dal ->load(). Quindi lo toglierò. vediamo se si sistema.

Offline salsero72

  • Nuovo arrivato
  • *
  • Post: 42
    • Mostra profilo
[RISOLTO] Re:ordinare elementi da tabella.
« Risposta #7 il: 12 Gen 2010, 09:57:43 »
Avevo dimenticato il WHERE!  :-[
La condizione da passare  a "reorder()";
Sicchè mi prendeva tutti i record della tabella steps (che guarda caso erano 8  :D )

Codice: [Seleziona]
function reorder( $where='' )
{

Ora è a posto.
Grazie a tutti.

PS: a titolo informativo: ho buttato una mattina per creare una mia funzione di ordinamento record prima di scopire che ce n'era una già bell'e pronta.

 



Web Design Bolzano Kreatif