/ / CakePHP Impaginazione: come ottenere l'impaginazione per i commenti quando sto usando l'impaginazione per i post - php, ajax, facebook, cakephp

CakePHP Paginaton: Come ottenere l'impaginazione per i commenti quando utilizzo la paginazione per i post: php, ajax, facebook, cakephp

Ho un modello di post e un modello di commento. L'associazione tra Post Model e Cake Model è la seguente

 Post has many comments
Comments belongs to Post

Sto usando l'impaginazione per implementare la cosa "scorrimento infinito" sulla mia pagina.

    public $paginate = array("limit" => 15,
"order" => array("Post.id" => "desc"),"conditions" => array("Post.hidden" => 0)
);

e

        $this->Paginator->settings = $this->paginate;
$post = $this->Paginator->paginate("Post");
$this->set("posts",$post);

ma questo recupera tutti i commenti associaticon un post. Voglio l'impaginazione anche per i commenti. Esiste un modo per implementarlo in cakephp? Voglio mostrare solo 3 commenti e il link "Visualizza altri commenti", proprio come su Facebook.

So che posso facilmente implementare quella funzioneinizialmente recuperando tutti i commenti dal database ma mostrando solo gli ultimi tre commenti e poi usando ajax per recuperare altri tre e così via. Ma sto cercando un modo migliore e più semplice.

risposte:

1 per risposta № 1

Consiglierei di dividere il recupero dipost e commenti associati anziché fare affidamento sul motore del modello di CakePHP in modo che la logica per la gestione dei commenti sia consolidata nel minor numero possibile di aree del codice (come suggerito per la prima volta da un segno nei commenti). In altre parole, rendere il post prima e quindi attiva una richiesta AJAX per la prima pagina di commenti.

Nella richiesta AJAX, è necessario comunicare sia l'ID post sia la pagina per cui si desidera recuperare i commenti. Ad esempio, supponendo che la tua richiesta sia nel formato di SomeController/comments/[postId]/[commentsPage]

Nel tuo controller avresti un'azione che era disposta come la seguente:

public function comments($postId, $page) {
...
}

Dovrai anche modificare il Paginator impostazioni in modo che possa includere commenti. Disporlo un po 'come questo (ovviamente aggiungi i tuoi dettagli per il Comment sezione):

public $paginate = array(
"Post" => array("limit" => 15, "order" => array("Post.id" => "desc"),"conditions" => array("Post.hidden" => 0)),
"Comment" => array(...)
);

All'interno dell'azione dei commenti, è necessario fornire condizioni e numero di pagina aggiuntivi a Paginator:

// tweak the paginator settings for the Comments model
$this->paginate["Comments"]["page"] = $page;
$this->paginate["Comments"]["conditions"] = array("Comments.postId", $postId);
// get some comments
$comments = $this->Paginator->paginate("Comments");
$this->set("comments", $comments);

Ovviamente dovrai scriverne un po 'JavaScript per effettuare le richieste AJAX e tenere traccia della pagina dei commenti su cui ti trovi. Questa è la responsabilità del cliente di gestire tutto ciò, non il server (la tua applicazione CakePHP). Non farlo fare troppo !