Показать товары на домашней странице magento 1.9

23

Только что установили magento 1.9 и упали на первое препятствие. Я создал продукт и использовал предложения из предыдущих версий для отображения продукта на домашней странице, но получаю следующее сообщение

Неустранимая ошибка: вызов функции-члена getSortedChildren()для необъекта в app/design/frontend/rwd/default/template/catalog/product/list.phtmlстроке 180

Любая помощь с благодарностью получена.

В разделе контента домашней страницы у меня есть ...

<div class="page-title"> 
    <h2>Our Latest Products</h2> 
</div> 
<p>{{block type="catalog/product_list" category_id="3" template="catalog/product/list.phtml"}}</p>
Руфус
источник
Не могли бы вы обновить свой ответ кодом, который вы использовали для добавления продуктов?
Сандер Мангель
Привет, я использовал то же самое, что и для версии 8. В разделе контента домашней страницы у меня есть ... <div class = "page-title"> <h2> Наши последние продукты </ h2> </ div> < p> {{block type = "catalog / product_list" category_id = "3" template = "catalog / product / list.phtml"}} </ p>
rufus

Ответы:

24

Проблема в том, что новый дизайн rwd имеет два дочерних блока для списка продуктов:

<block type="core/text_list" name="product_list.name.after" as="name.after" />
<block type="core/text_list" name="product_list.after" as="after" />

И в самом шаблоне нет проверок, чтобы увидеть, присутствуют ли они до того, как их пытаются загрузить и использовать.

Быстрое решение проблемы - использовать другой шаблон, который является копией основного шаблона, но со следующими правками:

<?php
$_nameAfter = $this->getChild('name.after');
// New if here
if($_nameAfter):
    $_nameAfterChildren = $_nameAfter->getSortedChildren();
    foreach($_nameAfterChildren as $_nameAfterChildName):
        $_nameAfterChild = $this->getChild('name.after')->getChild($_nameAfterChildName);
        $_nameAfterChild->setProduct($_product);
        ?>
        <?php echo $_nameAfterChild->toHtml(); ?>
    <?php endforeach; ?>
<?php endif; ?>

<?php
//set product collection on after blocks
$_afterChildren = $this->getChild('after');
if ($_afterChildren):
    $_afterChildren = $this->getChild('after')->getSortedChildren();
    foreach($_afterChildren as $_afterChildName):
        $_afterChild = $this->getChild('after')->getChild($_afterChildName);
        $_afterChild->setProductCollection($_productCollection);
    ?>
    <?php echo $_afterChild->toHtml(); ?>
<?php endforeach; ?>
<?php endif; ?>

В name.afterшаблоне встречается дважды, но afterпоявляется только один. И последнее, на что следует обратить внимание, - это то, что по умолчанию rwd css скрывает раздел действий в списке продуктов на страницах cms.

Дэвид Мэннерс
источник
Не могли бы вы указать, в каком файле этот код должен быть добавлен в тему RWD?
Бхаргав Мехта
Добавление файла поможет, а также строк. Выше не соответствует коду в list.phtml
Филипп Deatherage
Привет, Филипп, возможно, последняя версия magento исправила эту проблему.
Дэвид Мэннерс
какой основной шаблон нужно скопировать? list.phtml?
Pixelomo