View Full Version : [PHP] Ordinamento dinamico degli elementi visualizzati
robertino_salemi
14-02-2014, 17:33
Sera!
Ho realizzato un semplicissima pagina PHP con la quale visualizzo i record presenti nel database, supponiamo:
mysql_query("SELECT * FROM tabella ORDER BY rand()");
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.
robertino_salemi
15-02-2014, 20:53
Uhm...grazie...vedrò di dargli un'occhiata! ;)
robertino_salemi
16-02-2014, 01:39
L'ho visto, ma sembra che sia più adatto alla visualizzazione di una griglia di lavoro tipo Excel o simili.
Io invece dovrò usarlo per una pagina che contiene informazioni riguardanti appartamenti, quindi con Immagini, Tiolo, etc...organizzati in blocco verticali...per capirci un pò la disposizione che hai Ebay annunci...
jeremy.83
16-02-2014, 08:37
Io caricherei l'intero div o pagina, non so cos'hai, in ajax
robertino_salemi
16-02-2014, 23:20
Io caricherei l'intero div o pagina, non so cos'hai, in ajax
Quindi con un refresh dell'intero DIV che contiene i miei elementi da visualizzare dici?
Uhm....non ho le idee molto chiare...tenterò con un'altra ricerca sul WEB.
jeremy.83
17-02-2014, 08:37
Quindi con un refresh dell'intero DIV che contiene i miei elementi da visualizzare dici?
Uhm....non ho le idee molto chiare...tenterò con un'altra ricerca sul WEB.
Sì, se usi framework javascript come JQuery o simili è molto semplice, lanci un ajax e fai ritornare un xml che contiene del codice html (io uso xml ma dovrebbe funzionare anche json). Infine prendi quel codice html e lo fai caricare nel div. Così è comodo, se hai necessità nel codice html puoi inserire anche del javascript che potrebbe lanciare altri ajax ecc.
Ciao
robertino_salemi
17-02-2014, 14:23
Sì, se usi framework javascript come JQuery o simili è molto semplice, lanci un ajax e fai ritornare un xml che contiene del codice html (io uso xml ma dovrebbe funzionare anche json). Infine prendi quel codice html e lo fai caricare nel div. Così è comodo, se hai necessità nel codice html puoi inserire anche del javascript che potrebbe lanciare altri ajax ecc.
Ciao
Grazie, il concetto è molto chiaro, il problema sta nella realizzazione del codice...
Potreste darmi un mano?
Grazie.
jeremy.83
18-02-2014, 11:18
Lato js, un ajax lanciato così dovrebbe funzionare
$.post("tuo_script.php",$("#id_tuaform").serialize(), function(xml){
var risultato=$(xml).find("risultato").text();
$("#id_tuo_div").html(risultato);
});
Lato php invece devi eseguire la query che fai e salvare il codice html in una variabile stringa. Infine devi generare un file xml che abbia un tag "risultato". Io per creare l'xml utilizzo la classe DomDocument.
Saluti
Daniels118
18-02-2014, 12:18
Secondo me è più corretto convertire i dati in formato json e costruire l'html direttamente sul client sfruttando jquery, in questo modo si riduce il traffico di rete e si sposta il peso dell'elaborazione sul client, rendendo il servizio più efficiente.
jeremy.83
18-02-2014, 14:59
Secondo me è più corretto convertire i dati in formato json e costruire l'html direttamente sul client sfruttando jquery, in questo modo si riduce il traffico di rete e si sposta il peso dell'elaborazione sul client, rendendo il servizio più efficiente.
Potrei anche essere d'accordo, ma dipende anche dalla potenza del client e del server.
Se si sa che il server ha poca banda e poca potenza allora la soluzione client è buona, ma se si ha a che fare con client della grande guerra il caricamento e la composizione della pagina potrebbe essere veramente irritante. Io mi trovo spesso a che fare con client pessimi pieni zeppi di spyware e company e ti assicuro che preferisco far viaggiare il server
Daniels118
18-02-2014, 15:38
Secondo me (ma è solo una supposizione), costruire gli elementi della pagina invocando i metodi del DOM (anche attraverso jQuery) è comunque più efficiente di eseguire il parsing dell'html inviato dal server per poi generare i medesimi elementi. Inoltre il carico per il client è piccolo e generalmente poco influente sulle prestazioni; il carico sul server è altrettanto piccolo, ma va moltiplicato per tutte le richieste da servire.
E poi c'è il discorso della banda: se è vero che generalmente un server ha una banda di upload mostruosa, non è detto che lo stesso valga per il client.
Ma il vero motivo per cui farei questa scelta è fondamentalmente la maggiore versatilità: sul client arrivano dati strutturati che possono essere formattati in modo dinamico dal browser. Pensa ad esempio di voler dare all'utente la possibilità di visualizzare i dati in diversi formati (ad esempio, elenco o tabellare): i dati sono già a disposizione, basta rigenerare gli elementi del DOM ed il gioco è fatto, nessuna connessione al server, nessun tempo di attesa.
jeremy.83
18-02-2014, 16:30
Secondo me (ma è solo una supposizione), costruire gli elementi della pagina invocando i metodi del DOM (anche attraverso jQuery) è comunque più efficiente di eseguire il parsing dell'html inviato dal server per poi generare i medesimi elementi. Inoltre il carico per il client è piccolo e generalmente poco influente sulle prestazioni; il carico sul server è altrettanto piccolo, ma va moltiplicato per tutte le richieste da servire.
E poi c'è il discorso della banda: se è vero che generalmente un server ha una banda di upload mostruosa, non è detto che lo stesso valga per il client.
E' vero, possiamo fare mille supposizioni, ma dovremmo vederci davanti all'ambito proposto, secondo me le alternative sono valide entrambe e questa è una scelta che deve fare l'utente valutando i pro e contro. Qua si hanno anche a che fare con delle immagini, io preferisco sempre la computazione lato server
Ma il vero motivo per cui farei questa scelta è fondamentalmente la maggiore versatilità: sul client arrivano dati strutturati che possono essere formattati in modo dinamico dal browser. Pensa ad esempio di voler dare all'utente la possibilità di visualizzare i dati in diversi formati (ad esempio, elenco o tabellare): i dati sono già a disposizione, basta rigenerare gli elementi del DOM ed il gioco è fatto, nessuna connessione al server, nessun tempo di attesa.
Eh, anche qui dipende dalle situazioni, in caso di query con miliardi di record non conviene secondo me recuperare tutto, ma fare query paginate che ritornano solo gli elementi richiesti, il più delle volte funziona sempre al primo colpo e non devo fare altre ricerche.
Se guardi ad esempio la flexigrid fa questo ragionamento, che d'accordo si occupa di tutto l'html, ma i dati li recupera ogni volta sul server con un ajax
Daniels118
18-02-2014, 16:56
Ma io mi riferivo alle mere operazioni di formattazione, non di ordinamento e ricerca, per quelle sono pienamente d'accordo con te, se i record sono tanti la paginazione deve essere eseguita sul server a livello DB.
Non ho mai usato flexgrid, però ho utilizzato datatables ed ho ovviamente implementato la parte php per farlo funzionare con ajax, è bastato personalizzare il template già fornito, i dati viaggiano in formato json, mentre il codice html viene generato direttamente da javascript sul browser.
Poi è ovvio che ognuno fa come vuole, ad essere sincero ho iniziato anch'io generando il codice sul server, poi per necessità ho cambiato approccio e mi sono trovato molto meglio.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.