2012-11-19 64 views
1

我正在cakephp 2+項目中工作。我正在實施用於分類左右兩個div組合中的產品列表的分頁。我能夠使左div,但不能正確的一個,因爲抵消不能在分頁設置。我需要在左邊div中的半項和右邊div中的半項,所以我可以設置限制但不能抵消。我怎樣才能做到這一點?CakePHP分頁與左右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

爲什麼不叫$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> 

另一種方式是在控制器使用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>'; 
    } 
?> 
+0

感謝mensch您的確切答覆。我幾乎完成了......將代碼提供給將來的參考近.........再次感謝抱歉不能投票給你,因爲我的repu卻不允許這樣做;) –