/ / CakePHP Paginaton: Ako získať stránkovanie pre komentáre, keď používam stránkovanie pre príspevky - php, ajax, facebook, cakephp

CakePHP Paginaton: Ako získať komentáre pri stránkovaní pre príspevky - php, ajax, facebook, cakephp

Mám Post Model a Model komentára. Vzťah medzi Post Model a Cake Model je nasledovný

 Post has many comments
Comments belongs to Post

Na implementáciu veci „nekonečného posúvania“ na mojej stránke používam stránkovanie.

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

a

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

ale tým sa načítajú všetky súvisiace komentáres príspevkom. Chcem aj stránkovanie pre komentáre. Existuje nejaký spôsob, ako to môžem implementovať do cakephp? Chcem zobraziť iba 3 komentáre a odkaz "zobraziť ďalšie komentáre", rovnako ako to máme na Facebooku.

Viem, že túto funkciu môžem ľahko implementovaťnajprv načítaním všetkých komentárov z databázy, ale zobrazí sa len posledné tri komentáre a potom pomocou ajaxu načítame ďalšie tri a tak ďalej. Ale hľadám lepší a jednoduchší spôsob.

odpovede:

1 pre odpoveď č. 1

Odporúčal by som rozdeliť vyhľadávaniepríspevky a súvisiace komentáre, namiesto toho, aby ste sa spoliehali na modelový engine CakePHP, takže logika správy komentárov je konsolidovaná do čo najmenšieho počtu oblastí vášho kódu (ako to najskôr navrhuje značka v komentároch). Inými slovami, najskôr vykreslite príspevok a potom spustite požiadavku AJAX na prvú stranu komentárov.

V požiadavke AJAX musíte oznámiť ID príspevku aj stránku, pre ktorú chcete načítať komentáre. Napríklad za predpokladu, že vaša žiadosť je vo formáte SomeController/comments/[postId]/[commentsPage]

Vo vašom ovládači by ste mali akciu, ktorá bola usporiadaná takto:

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

Budete tiež musieť vyladiť Paginator nastavenia, aby mohol obsahovať komentáre. Rozložte to trochu takto (samozrejme pridajte svoj vlastný detail pre Comment časť):

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

V rámci akcie s komentármi musíte zadať dodatočné podmienky a číslo strany 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);

Samozrejme, že budete musieť nejaké napísaťJavaScript na vytváranie požiadaviek AJAX a sledovanie stránky s komentármi, na ktorej sa nachádzate. Za správu tohto všetkého je zodpovedný klient, nie server (vaša aplikácia CakePHP). Nerobte to príliš veľa !