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>

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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.