2016-07-29 199 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原生功能被认为是不好的做法,已经有方法将页面分页/拆分为组大小。 –