У меня есть список из 6 продуктов, которые я хочу разделить на 2 списка из 3 продуктов рядом друг с другом. Список составляется в цикле foreach, первый список останавливается после счетчика == 2, поэтому будут отображаться 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 ?>
С наилучшими пожеланиями,
Роберт
Для простоты вы можете повторить 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 (с 4-го, 5-го и 6-го — то, что мы ищем) перед передачей if
заявление.
Комментарий к подходу
Я сохранил его в соответствии с вашим существующим решением, но в этом случае более понятным вариантом, вероятно, было бы использование встроенной коллекции нумерации страниц.
Если вы используете ->setPageSize(3)
Вы можете просто повторить коллекцию, чтобы получить первые три продукта, а затем использовать ->setCurPage(2)
чтобы получить вторую страницу из трех предметов.
Я связываю этот блог на тему здесь, просто чтобы дать вам пример того, как он используется, но так как я не знаю ваш уровень комфорта при работе с коллекциями, я сохраняю свой первый ответ на основе вашего существующего кода.
Примерно так с функцией по модулю для нового массива каждые 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++;
}
Надеюсь это поможет.