• Super User

    Ordinamento dinamico degli elementi visualizzati

    Sera!

    Ho realizzato un semplicissima pagina PHP con la quale visualizzo i record presenti nel database, supponiamo:
    [PHP]
    mysql_query("SELECT * FROM tabella ORDER BY rand()");
    [/PHP]

    All'utente, vorrei dare la possibilità di cambiare il tipo di ordinamento es.

    • ORDER BY id DESC
    • ORDER BY price
    • ORDER BY name
      etc...

    Come faccio a realizzarlo senza che la pagina venga ricarica e quindi con un refresh della visualizzazione degli elementi secondo l'ordinamento scelto?

    Grazie.


  • User Attivo

    Ciao, Felino.

    Permettimi di notare come questo thread sia estremamente collegato con il tuo precedente.

    Ridescrivendo il problema, tu vorresti caricare in una sola chiamata tutte le voci che ti interessa visualizzare, poi lasciare al client la possibilità di effettuare il riordino e il paging? Sarebbe estremamente efficace l'utilizzo, ma se hai una lista lunga qualche migliaio di righe il problema sarebbe che poi si allunga il tempo di caricamento. Posto in questi termini non è comunque un problema PHP.

    Diverso è il discorso se lo vuoi fare in Ajax: immagina di aggiornare per ogni comando non tutta la pagina ma i soli dati da visualizzare in un determinato momento.

    A te la scelta.


  • Super User

    Si diciamo di si...io voglio dare la possibilità di avere:

    • una paginazione degli elementi che devo visualizzare con l'opzione di default, cioè ORDER BY ID DESC;
    • la possibilità di effettuare un ordinamento degli elementi per prezzo, nome, etc...mantenendo sempre la paginazione presente.

  • Super User

    Qualche suggerimento in merito alla realizzazione?
    Anche un bozza di codice o un esempio sarebbe molto utile.

    Grazie.


  • User Attivo

    Purtroppo non ho niente di pronto.

    Se vuoi fare l'ordinamento da mysql allora la soluzione è Ajax.

    Devi organizzare la tua pagina in due parti: nella principale metti le chiamate ai css e javascript, i comandi e tutto quanto deve rimanere comunque visualizzato, la secondaria genererà il markup della lista visualizzata di volta in volta.

    Quindi in javascript provvedi a ricaricare di volta in volta la parte variabile. Per questo puoi utilizzare le funzioni previste in librerie come jQuery o Prototype.

    So che non ti ho detto molto, ma spero che ti sia utile.


  • User Attivo

    Se tu non vuoi perdere la paginazione (ma ti va bene ricaricare la pagina) basta che metti il numero della pagina in cui ti trovi nel link che ricarica la pagina con un nuovo criterio di ordinamento e ricarichi la pagina.

    Insomma una roba del genere:
    [HTML]<a href="pagina.php?order=nome&start=1">ordina per nome</a> | <a href="pagina.php?order=rand&start=1">ordina a caso</a>[/HTML]
    e poi nel tuo script "pagina.php" avrai una roba tipo
    [PHP]if ($_GET['order'] == 'nome')
    {
    $orderby = 'nome';
    }
    // ... le altre possibilità di ordinamento ...
    else
    {
    $orderby = 'RAND()';
    }
    // ipotizzando che vuoi mostrare 20 record per "pagina"
    mysql_query('SELECT * FROM tabella ORDER BY ' . $orderby . ' LIMIT ' . intval($_GET['start'] * 20) . ', 20');[/PHP]

    HTH, ciao! 🙂