Cakephp Pagination与左右div组合

时间:2012-11-19 18:52:38

标签: pagination cakephp-2.0

我正在使用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

1 个答案:

答案 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>';
  }
?>