1

私はcakephp 2+プロジェクトで働いています。左右の 2 つの div の組み合わせで商品リストを並べ替えるためのページネーションを実装しています。左の 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
4

1 に答える 1

0

一度呼び出し$this->paginate()てすべてのアイテムをループし、ビュー自体で分割を実行してみませんか? 両方の呼び出しを実行すると、データベース リソースがかなり無駄になります。

その場合、コントローラーで $this->paginate を呼び出す必要があります。左の列に 5 つのアイテム、右の列に 5 つのアイテムが必要だとします。

$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>

別の方法は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>';
  }
?>
于 2012-11-20T09:26:53.947 に答える