Exibir produtos na página inicial magento 1.9

23

Acabei de instalar o magento 1.9 e caímos no primeiro obstáculo. Criei um produto e usei sugestões de versões anteriores para exibir o produto na página inicial, mas estou recebendo a seguinte mensagem

Erro fatal: chamar uma função de membro getSortedChildren()em um não-objeto na app/design/frontend/rwd/default/template/catalog/product/list.phtmllinha 180

Qualquer ajuda recebida com gratidão.

Na seção de conteúdo da página inicial, eu tenho ...

<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>
rufus
fonte
Você pode atualizar sua resposta com o código usado para adicionar os produtos?
Sander Mangel
Olá, usei o mesmo que para a versão 8. Na seção de conteúdo da página inicial, tenho ... <div class = "page-title"> <h2> Nossos produtos mais recentes </h2> </div> < p> {{type type = "catalog / product_list" category_id = "3" template = "catalog / product / list.phtml"}} </p>
rufus

Respostas:

24

O problema é que o novo design rwd possui dois blocos filhos para a lista de produtos:

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

E no próprio modelo, não há verificações para verificar se elas estão presentes antes de serem carregadas e usadas.

Uma solução rápida seria usar um modelo diferente que seja uma cópia do modelo principal, mas com as seguintes edições:

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

Isso name.afterocorre duas vezes no modelo, mas afteraparece apenas um. Uma última coisa a observar é que o rwd css padrão oculta a seção de ações da lista de produtos nas páginas do cms.

David Manners
fonte
Você pode indicar em qual arquivo esse código deve ser adicionado no tema rwd?
Bhargav Mehta
Adicionar qual arquivo ajudaria, além de linhas. O acima não corresponde ao código no list.phtml
Philip Deatherage
Oi philip, pode ser que a versão mais recente do magento tenha corrigido esse problema.
David Manners
qual modelo principal precisa ser copiado? list.phtml?
Pixelomo 12/01