Afficher les produits sur la page d'accueil magento 1.9

23

Je viens d'installer magento 1.9 et nous sommes tombés sur le premier obstacle. J'ai créé un produit et j'ai utilisé les suggestions des versions précédentes pour afficher le produit sur la page d'accueil, mais je reçois le message suivant

Erreur fatale: appel à une fonction membre getSortedChildren()sur un non-objet app/design/frontend/rwd/default/template/catalog/product/list.phtmlsur la ligne 180

Toute aide reçue avec reconnaissance.

Dans la section contenu de la page d'accueil, j'ai ...

<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
la source
Pouvez-vous mettre à jour votre réponse avec le code que vous avez utilisé pour ajouter les produits?
Sander Mangel
Salut, j'ai utilisé la même chose que pour la version 8. Dans la section de contenu de la page d'accueil, j'ai ... <div class = "page-title"> <h2> Nos derniers produits </h2> </div> < p> {{block type = "catalog / product_list" category_id = "3" template = "catalog / product / list.phtml"}} </p>
rufus

Réponses:

24

Le problème est que la nouvelle conception rwd a deux blocs enfants pour la liste de produits:

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

Et dans le modèle lui-même, il n'y a pas de vérification pour voir s'ils sont présents avant de tenter de les charger et de les utiliser.

Une solution rapide consisterait à utiliser un modèle différent qui est une copie du modèle principal mais avec les modifications suivantes:

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

L' name.afteroccurrence se produit deux fois dans le modèle mais aftern'apparaît qu'une seule. Une dernière chose à noter est que le rwd css par défaut masque la section actions de la liste des produits sur les pages cms.

David Manners
la source
Pouvez-vous indiquer dans quel fichier ce code doit être ajouté dans le thème rwd?
Bhargav Mehta
L'ajout de ce fichier aiderait, ainsi que des lignes. Ce qui précède ne correspond pas au code dans la liste.phtml
Philip Deatherage
Salut philip, il se pourrait que la version la plus récente de magento ait résolu ce problème.
David Manners
quel modèle principal doit être copié? list.phtml?
Pixelomo