是否有可能页面,并在CakePHP的同一视图排序两种不同的模式?
-
25-09-2019 - |
题
我想要做的事非常简单,简单。我想有在同一页上两组不同的分页数据。两组不同取决于不同的型号。为了便于讨论,我们会说他们是Image
和Item
。
我可以设置两个寻呼机的两款车型,并得到正确的一组对象。我能得到正确的寻呼机联系。但是,当涉及到实际遵循的链接参数,既寻呼机读取参数,并假定它们适用于他们。
有卷起这样寻找的东西:
$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'));
这是在控制器中。在我有那种认为看链接如下:
<div class="control"><?php echo $this->Paginator->sort('Newest', 'Image.created', array('model'=>'Image')); ?></div>
然而,产量的链接,看起来像这样:
http://localhost/profile/37/page:1/sort:Image.created/direction:asc
有什么在那里,告诉我打算整理哪个模型分页程序。所以,当我点击链接它会通过Image.created
于两种机型进行排序。其结果是一个错误,因为Item
不能Image.created
进行排序。是不是我做错了吗?或者是这个东西,不是由CakePHP的分页程序支持?
解决方案
的最简单的解决办法是实现两个网格作为取自己的数据和使用AJAX元素的元素加载到页。
在唯一的其他选择会如此你排序,或者通过网页步进时传递params用于在两个电网的每个网格修改PARAMS。利奥张贴上面的代码是一个良好的开端。您可以在前面加上从PAGINATE阵列模式键到每个命名PARAM并确保通过所有网址参数的PAGINATE功能,你应该在正确的方向前进。
其他提示
您需要重写该页面的控制器的型号的PAGINATE方法。
我没有类似的东西,也许这个片段将帮助:
function paginate($conditions, $fields, $order, $limit, $page = 1, $recursive = null, $extra = array())
{
$pageParams = compact('conditions', 'fields', 'order', 'limit', 'page', 'recursive', 'group');
$this->contain('ModuleType', 'NodeDescriptor');
$pageItems = $this->find('all',$pageParams);
$pagesOut = array();
foreach($pageItems as $pageItem)
{
$status = $pageItem['SiteAdmin']['status_id'];
$moduleInfo = null;
$nodeTitle = $pageItem['NodeDescriptor']['title'];
$published = $pageItem['NodeDescriptor']['published'];
$pageitemID = $pageItem['SiteAdmin']['id'];
$moduleId = $pageItem['SiteAdmin']['module_id'];
$contName = $pageItem['ModuleType']['controller'];
if($moduleId)
{
$thisModel = ClassRegistry::getObject($moduleType);
$thisModel->contain();
$moduleInfo = $thisModel->read(null,$moduleId);
$moduleInfo = $moduleInfo[$moduleType];
}
$pagesOut[] = array(
'status'=>$status,
'node'=>$nodeTitle,
'published'=>$published,
'info'=>$moduleInfo,
'module_id'=>$moduleId,
'contName'=>$contName,
'pageitem_id'=>$pageitemID);
}
return $pagesOut;
}
通过做这种方式,您将获得控制权传递给PAGINATE的参数,这样你就可以通过模型的具体数据,控制标志等。
不隶属于 StackOverflow