2016-07-29 198 views
0

我有一個列出6個產品我想分裂成3個產品的2個列表中彼此相鄰。該列表在foreach循環內完成,第一個列表在count == 2之後停止,因此將顯示3個項目。第二個列表應該從第四個項目開始。我怎樣才能做到這一點?PHP foreach循環跳過前3項

這是笏使得3項第一個列表:

<?php 
    $_categoryId = explode(' ', $category['id']); 
    $count = 0; 
    $_productCollection = Mage::getModel('catalog/category')->load($_categoryId) 
     ->getProductCollection() 
     ->addAttributeToSelect('*') 
     ->setOrder('date_added', 'DESC'); 
?> 
<?php foreach ($_productCollection as $_product): ?> 
    <li class="category-row-list-item"> 
     <a class="product-name" href="<?php echo $_product->getProductUrl() ?>"> 
      <?php echo $this->htmlEscape($_product->getName()) ?> 
     </a> 
    </li> 
<?php 
    if($count == 2) break; // Stop after 3 items 
    $count++; 
?> 
<?php endforeach ?> 

最好的問候, 羅伯特

+4

郵編...... – Andrew

回答

0

爲了簡單起見,您可以重複foreach聲明,但在前三項中做相反處理並且continue

<?php foreach ($_productCollection as $_product): ?> 
<?php 
    $count++; // Note that first iteration is $count = 1 not 0 here. 
    if($count <= 3) continue; // Skip the iteration unless 4th or above. 
?> 
<li class="category-row-list-item"> 
    <a class="product-name" href="<?php echo $_product->getProductUrl() ?>"> 
     <?php echo $this->htmlEscape($_product->getName()) ?> 
    </a> 
</li> 
<?php endforeach ?> 

關鍵字continue在環路用於跳過當前迭代不退出循環,在這種情況下,它使得PHP直接回到foreach語句來的第一行,從而增加計數器至4(因爲在通過if聲明之前,第四,第五和第六是我們所追求的。

解說的方法

我一直是一致的與您現有的解決方案,但在這種情況下,一個更清潔的方式很可能是使用內置的集分頁。

如果您使用->setPageSize(3),則可以簡單地迭代該集合以獲取前三個產品,然後使用->setCurPage(2)獲取三個項目的第二頁。

我在此鏈接this blog post只是爲了給你一個如何使用它的例子,但由於我不知道你在處理集合中的舒適程度,所以我保留基於你現有代碼的第一個答案。

+1

謝謝!這是訣竅! :D – n00bly

+0

@ nOObly太棒了!順便說一句,在http://magento.stackexchange.com上有一個專門的Magento堆棧交換,可能會爲您將來的問題提供更好/更多的Magento特定解決方案! –

0

類似的東西與模功能有新的陣列中的每個3項:

$count = 1; 
$count_change = 1; 
$key = 0; 
$yourList = array(
    "1", 
    "2", 
    "3", 
    "4", 
    "5", 
    "6" 
); 
foreach($yourList as $item) 
{ 
if(!isset($$new_list)) 
{ 
    $new_list = "list".$count_change.""; 
    $$new_list = array(); 
} 
if($count % 3 == 0) 
{ 
    $key = 0; 
    $count_change++; 
    $new_list = "list".$count_change.""; 
    $$new_list = array(); 
} 
$$new_list[$key] = $item; 
$count++; 
$key++; 
} 

希望這有助於。

+0

你或許應該解釋一下它,使用特別是當可變的變量,因爲這是一個相當先進的理念(在這種情況下產生具有具有fallpits都在自己的數字名稱的變量) 。重新創建Magento原生功能被認爲是不好的做法,已經有方法將頁面分頁/拆分爲組大小。 –