我正在使用cakephp 2+项目。我在两个左右div组合中实现分类产品列表的分页。我能够制作左div而不能正确,因为偏移不能在分页中设置。我需要左div中的一半项和右div中的一半项,所以我可以设置限制但不能抵消。我怎么能这样做?
Controller code
public function index()
{
$rows=$this->Product->find('count', array('conditions'=>array('Product.allow'=>1)));
if($rows%2==0)
{
$this->paginate = array('conditions' => array('Product.allow'=>1,'limit'=>($rows/2));
$list_l = $this->paginate('Product');
$this->set('left_list',$list_l);
$this->paginate = array('conditions' => array('Product.allow'=>1,'limit'=>($rows/2), 'offset'=>$rows/2));
$list_r = $this->paginate('Product');
$this->set('right_list',$list_r);
}
else
{
$right_list=$this->Paginate('Product', array('Product.allow'=>1),array('limit'=>($rows-round($rows/2)), 'offset'=>round($rows/2)));
}
}
View Code
Foreach loop with array returned from controller
答案 0 :(得分:0)
为什么不调用$this->paginate()
一次并遍历所有项目并在视图本身中执行拆分?执行这两个调用相当浪费数据库资源。
在这种情况下,您可以在Controller中调用$ this-> paginate。假设您想要左栏中的五个项目和右侧五个项目:
$products = $this->paginate = array('conditions' => array('Product.allow'=>1, 'limit' => 10));
$this->set('products', $products);
在视图中:
<div class="left-column">
<?php
foreach ($products as $product) {
debug($product);
if ($count === 5) {
echo "</div>\n<div class=\"right-column\">";
$count = 1;
}
$count++;
}
?>
</div>
另一种方法是在Controller中使用array_chunk
。使用这个核心PHP函数,你将得到多维数字索引数组,你可以循环并将子数组包装在它们相关的div中。
<?php
$limit = round(count($products)/2);
$products = array_chunk($products, $limit);
foreach ($products as $index=>$groupedProducts) {
echo ($index === 0) ? '<div class="left-column">': '<div class="right-column">';
foreach ($groupedProducts as $product) {
debug($product);
}
echo '</div>';
}
?>