Je veux faire quelque chose de très simple et direct. Je veux avoir deux ensembles différents de données paginées sur la même page. Les deux ensembles différents dépendent de différents modèles. Pour des raisons de discussion, nous dirons qu'ils sont Image
et Item
.Est-il possible de faire des pages et de trier deux modèles différents dans la même vue dans CakePHP?
Je peux configurer deux téléavertisseurs pour deux modèles, et obtenir le bon ensemble d'objets. Je peux obtenir les liens de téléavertisseur corrects. Mais quand il s'agit de suivre réellement les liens vers les paramètres, les deux pagers lisent les paramètres et supposent qu'ils s'appliquent à eux.
Il serpente à la recherche quelque chose comme ceci:
$this->paginate = array (
'Item'=>array(
'conditions'=>array('user_id'=>$id),
'limit' => 6,
'order' => array(
'Item.votes'=>'desc',
'Item.created'=>'desc'
),
'contain'=>array(
'User',
'ItemImage' => array (
'order'=>'ItemImage__imageVotes desc'
)
)
),
'Image'=>array(
'limit'=>6,
'contain'=>array(
'User',
'ItemImage'=>array('Item'),
),
'order'=>array(
'Image.votes'=>'desc',
'Image.views'=>'desc'
),
'conditions'=>array(
'Image.isItemImage'=>1,
'Image.user_id'=>$id
)
)
);
$this->set('items', $this->paginate('Item'));
$this->set('images', $this->paginate('Image'));
C'est dans le contrôleur. De l'avis que j'ai des liens de tri qui ressemblent à ceci:
<div class="control"><?php echo $this->Paginator->sort('Newest', 'Image.created', array('model'=>'Image')); ?></div>
Cependant, qui donne un lien qui ressemble à ceci:
http://localhost/profile/37/page:1/sort:Image.created/direction:asc
Il n'y a rien là pour dire paginator quel modèle je compte Trier. Donc, quand je clique sur le lien, il tente de trier les deux modèles par Image.created
. Le résultat est une erreur car Item
ne peut pas être trié par Image.created
. Y a-t-il quelque chose que je fais de mal? Ou est-ce quelque chose qui n'est pas supporté par le paginateur de CakePHP?
C'est à peu près comme cela que je l'ai résolu. –