2010-11-02 9 views
0

J'ai une vue avec deux actions différentes du même modèle (Une liste d'articles triée par la plus récente, et la même liste triée par le plus populaire) . Une liste que je veux paginer avec 8 articles à la fois et une avec 12 articles à la fois. J'utilise AJAX pour faire la page dans les articles. Comment puis-je configurer le contrôleur pour gérer cette tâche? Le problème semble être que je ne peux pas créer deux instances de pagination différentes, donc je peux seulement paginer dans le même nombre d'éléments indépendamment de l'action.Comment créer plusieurs instances de pagination pour un seul modèle/contrôleur dans CakePHP

Merci d'avance pour votre aide.

Ce que j'ai essayé jusqu'à présent

Fondamentalement essayant de fixer des limites spécifiques à chaque action, plutôt que l'assistant de mise en page initiale:

var $paginate = array('order'=>array('Category.name'), 'limit'=>'8');

C'est ce que l'aide ressemble, et il se nourrit de n'importe quelle limite. Même si je supprime cette limite et essayer de l'appliquer comme ceci:

var $paginate = array('order'=>array('Item.name')); 

function discover_list(){  
    $this->set('d_ajax_items', $this->paginate('Item', array('Item.discover_order' => null, 'Item.moderated' => 1), null, 'Item.id DESC', null, 8)); 
} 

function trend_paging(){ 
    $this->set('trend_items', $this->paginate('Item', array('Item.moderated' => 1),NULL, 'rank DESC', NULL, 12)); 
} 

La limite à la fin de l'action est ignorée, et il se nourrit dans certains défaut 20 éléments à la fois

Répondre

3

J'ai mal compris votre question initiale.Si vous souhaitez définir des limites différentes à chaque action, vous pouvez le faire

function discover_list() {  
    $this->paginate['limit'] = 8; 
    $this->paginate['conditions'] = array('Item.discover_order' => null, 'Item.moderated' => 1); 
    $this->set('d_ajax_items', $this->paginate('Item')); 
} 

Modifier

Un peu agréable

$this->paginate = array(
    'limit' => 8, 
    'conditions' => array('Item.discover_order' => null, 'Item.moderated' => 1), 
); 
$this->set('d_ajax_items', $this->paginate('Item')); 
+0

Cela semble bon. Je vais devoir l'essayer un peu plus tard, mais merci beaucoup! Juste par curiosité, comment aurais-je pu le rendre un peu plus clair? – dclowd9901

+0

A travaillé avec brio, mec. Merci beaucoup! – dclowd9901

1

J'ai fait cela avant et j'aurais aimé ne pas l'avoir fait. Garder les deux en synchronisation est déroutant pour l'utilisateur final et un cauchemar pour le développeur.

Qu'avez-vous déjà essayé? Je suis sûr que vous pouvez avoir deux instances, mais vous devrez passer les paramètres directement dans la fonction paginate() plutôt que de les définir sur la variable de classe paginate.

Modifier

Pour éviter toute confusion, je presque toujours les définir des options de pagination dans l'appel lui-même.

Dans votre deuxième exemple, vous passez six paramètres pagine(), mais il ne prend trois:

function paginate($object = null, $scope = array(), $whitelist = array()) 

Si vous omettez $ objet et passez un tableau comme le premier arg, les deux derniers args passer à la gauche.

Avez-vous essayé d'entrer la commande et de limiter les valeurs sous forme de tableau à la troisième position (liste blanche $)?

http://api13.cakephp.org/class/controller#method-Controllerpaginate

http://api13.cakephp.org/view_source/controller/#line-1056

+0

ENTENDU sur votre premier point. Ceci est une demande du client :) Consultez ma question mise à jour pour plus d'informations. – dclowd9901

+0

C'est toujours le cas. Je vais vérifier quand je rentre à la maison. – Leo

0

Vous pouvez commencer votre page avec 2 divs vides et appelez via ajax 2 différents urls mis en correspondance avec contrôleur/action. Ensuite, vous n'avez plus qu'à vous soucier de la pagination ajax, mais vous n'aurez pas de problème de gateau parce que chaque pagination fonctionne dans sa propre action.

Ce n'est pas une très bonne approche si vous voulez unbostrusive javascript, mais si votre application entière nécessite javascript, cela fonctionnera.

+0

Le problème n'est pas tant dans le javascript que dans Cake. J'ai besoin du backend pour alimenter les bonnes données. La pagination AJAX fonctionne magnifiquement en utilisant la méthode que vous décrivez. Ce sont simplement les jeux de données que le framework rend qui est bancal. – dclowd9901

Questions connexes