Mostrar productos en la página de inicio magento 1.9

23

Acabo de instalar magento 1.9 y he caído en el primer obstáculo. He creado un producto y he usado sugerencias de versiones anteriores para mostrar el producto en la página de inicio, pero recibo el siguiente mensaje

Error grave: llamada a una función miembro getSortedChildren()en un no objeto en la app/design/frontend/rwd/default/template/catalog/product/list.phtmllínea 180

Cualquier ayuda recibida con gratitud.

En la sección de contenido de la página de inicio tengo ...

<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
fuente
¿Puede actualizar su respuesta con el código que ha utilizado para agregar los productos?
Sander Mangel
Hola, he usado lo mismo que para la versión 8. En la sección de contenido de la página de inicio tengo ... <div class = "page-title"> <h2> Nuestros últimos productos </h2> </div> < p> {{block type = "catalog / product_list" category_id = "3" template = "catalog / product / list.phtml"}} </p>
rufus

Respuestas:

24

El problema es que el nuevo diseño rwd tiene dos bloques secundarios para la lista de productos:

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

Y en la plantilla en sí no hay controles para ver si están presentes antes de intentar cargarlos y usarlos.

Una solución rápida sería usar una plantilla diferente que sea una copia de la plantilla principal pero con las siguientes ediciones:

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

El name.afteraparece dos veces en la plantilla pero afteraparece solo uno. Una última cosa a tener en cuenta es que el rwd css predeterminado oculta la sección de acciones de la lista de productos en las páginas de cms.

David modales
fuente
¿Puede indicar en qué archivo se debe agregar este código al tema rwd?
Bhargav Mehta
Agregar qué archivo ayudaría, así como líneas. Lo anterior no coincide con el código en la lista.phtml
Philip Deatherage
Hola, philip, podría ser que la versión más reciente de magento haya solucionado este problema.
David Manners
¿Qué plantilla principal necesita ser copiada? list.phtml?
Pixelomo