2016-07-29 16 views
0

Ich habe eine Liste von 6 Produkten, die ich in 2 Listen von 3 Produkten nebeneinander teilen möchte. Die Liste wird innerhalb einer foreach-Schleife erstellt, die erste Liste stoppt nach der Zählung == 2, so dass 3 Einträge angezeigt werden. Die zweite Liste sollte mit dem vierten Element beginnen. Wie kann ich das erreichen?PHP foreach Schleife überspringen zuerst 3 Artikel

Dies ist wat die erste Liste von 3 Artikel macht:

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

Mit freundlichen Grüßen, Robert

+4

Postleitzahl ...... – Andrew

Antwort

0

Zur Vereinfachung können Sie die foreach Anweisung wiederholen, aber das Gegenteil tun und continue auf die ersten drei Elemente.

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

Das Schlüsselwort continue wird in Schleifen verwendet, um die aktuelle Iteration zu überspringen, ohne Verlassen der Schleife, in diesem Fall ist es PHP direkt zurück in die erste Zeile des foreach -Anweisung, wodurch sich Gegen bis 4 gehen macht (seit 4., 5. und 6. ist was wir wollen) bevor Sie die if Erklärung übergeben.

Kommentar zum Ansatz

Ich hielt es im Einklang mit Ihrer bestehenden Lösung, sondern eine sauberen Art und Weise in diesem Fall wahrscheinlich in Sammlung Paginierung den eingebauten zu verwenden wäre.

Wenn Sie ->setPageSize(3) verwenden, können Sie einfach die Sammlung iterieren, um die ersten drei Produkte zu erhalten, und dann ->setCurPage(2) verwenden, um die zweite Seite mit drei Elementen zu erhalten.

Ich verbinde this blog post zum Thema hier, nur um Ihnen ein Beispiel zu geben, wie es verwendet wird, aber da ich nicht Ihr Komfortniveau in der Arbeit mit Sammlungen kenne, behalte ich meine erste Antwort basierend auf Ihrem vorhandenen Code.

+1

Danke! Das macht den Trick! : D – n00bly

+0

@ n00bly Großartig! Übrigens gibt es einen speziellen Magento Stack Exchange auf http://magento.stackexchange.com, der bessere/mehr Magento-spezifische Lösungen für Ihre zukünftigen Fragen geben könnte! –

0

So etwas Ähnliches mit Modulo-Funktion für haben neue Array jeweils 3 Artikel:

$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++; 
} 

Hoffe das hilft.

+0

Sie sollten wahrscheinlich erklären, was es tut, vor allem bei der Verwendung variabler Variablen, da dies ein ziemlich fortgeschrittenes Konzept ist (und in diesem Fall erzeugt Variablen mit numerischen Namen, die Fallpits allein haben) . Es wird als schlechte Methode angesehen, Funktionen neu zu erstellen, die in Magento ursprünglich sind. Es gibt bereits Möglichkeiten, um in Gruppengrößen zu paginieren/aufzuteilen. –