Personalmente, non avrei aggiunto tutto quel codice non visibile alla pagina, solo per gestire due pulsanti. Io avrei fatto una questione più gestita da JS:
In PHP avrei generato la pagina senza i dati e fatto caricare gli script corretti:
Poi al caricamento della pagina, avrei lanciato un richiesta AJAX ad una pagina PHP per ottenere i dati nella giusta quantità in formato JSON (la stessa pagina l'avrei riutilizzata per ottenere i dati filtrati, con più o meno elementi).codice:<div id = "Articoli" class="Loading"> In Caricamento </div>
Una volta ottenuti i dati in un formato usabile:
Quando ottieni una risposta JSON con una richiesta AJAX in jQuery, se gli passi il parametro dataType: 'json' nel costruttore, ottieni come argomento passato alla funzione di CallBack l'oggetto JS corrispondente ai dati passati.codice:[ { "id" : 1, "title" : "Articolo 1", "description" : "Questa è la descrizione dell'articolo", "favourite" : true, "score" : 4.5 } { "id" : 2, "title" : "Articolo 2", "description" : "Bla bla bla", "favourite" : false, "score": 2 } ..... ]
Quindi otterresti l'array di dati da manipolare per creare la lista degli articoli, devi solo creare un format per gli articoli, in HTML fisso che andrai a popolare con i dati che ti servono.
Per esempio:
Esegui questo su ogni articolo ritornato dalla richiesta AJAX e la lista è completata con i dati che ti servono. Infine, crei una funzione da applicare sugli elementi a.FavouriteToogler che blocchi l'evento onclick ed invii la richiesta ajax all'HREF dell'elemento chiamante. A seconda della risposta poi cambi il contenuto ed l'HREF del link in modo che sia sempre attivo e non necessiti di hide, show e cambiamenti eccessivi.Codice PHP:var obj; //Metti di avere il singolo oggetto articolo qui
var articolo = "<div class = \"Article\">";
articolo += "<div class = \"Title\">";
articolo += obj.title
articolo += "<a href=\"favourite.php?id="+obj.id+"&action="+(obj.favourite ? "add" : "remove")+"\" class = \"FavouriteToogler\">";
articolo += (obj.favourite ? "Aggiungi ai Favoriti" : "Rimuovi dai Favoriti") + "</a>";
articolo += "</div>";
articolo += "<div class=\"Description\">"+obj.description+"</div>";
articolo += "</div>";
$(articolo).appendTo('#Articoli');

Rispondi quotando