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.