2010-10-24 9 views
7

Estoy tratando de mostrar la popular lista de productos usando ajax en magento en la página de inicio usando ajax, podría hacerlo para 5 o "N" no. De productos, pero lo que quiero es la barra de herramientas de paginación para ser agregado con el conjunto de resultados.Bloques personalizados de Magento

Esto es lo que he añadido para mostrar los productos populares,

// Magento layout 
$magento_block = Mage::getSingleton('core/layout'); 
$productsHtml = $magento_block->createBlock('catalog/product'); 
$productsHtml->setTemplate('catalog/product/popular.phtml'); 
echo $productsHtml ->toHTML(); 

Y bajo popular.phtml

<?php 

    $_productCollection = Mage::getModel('catalog/product')->getCollection() 
    ->addPriceData() 
    ->addAttributeToSort('ordered_qty', 'DESC') 
    ->addAttributeToSort('name', 'ASC') 
    ->setPageSize($limit) 
    ->setPage($p, $limit)  
    ->addAttributeToSelect(array('entity_id', 'entity_type_id', 'attribute_set_id', 'type_id', 'sku', 'category_ids', 'created_at', 'updated_at','has_options', 'sync', 'name', 'stock_status', 'wc_review_iwc_rating', 'wc_review_wa_rating', 'wc_review_bh_rating', 'small_image', 'status', 'pre_arrival', 'description', 'short_description', 'price', 'is_salable', 'stock_item', 'gift_message_available', 'featured')); 

?> 

Así que esto me da los productos populares de la página especificada y el límite, pero pude no cargar la barra de herramientas de paginación (al agregar directamente la barra de herramientas al popular.phtml oa través de la función crear diseño de bloques), ¿Dónde estoy equivocado? ¿Alguien podría decirme por favor?

Gracias

Respuesta

10

Intente crear un bloque Mage_Catalog_Block_Product_List y configure la colección de los productos populares usted mismo.

$collection = Mage::getModel('catalog/product')->addAttributeToFilter('your popular products'); 
// do not load the collection yet, otherwise the toolbar will not work 

$listBlock = Mage::getSingleton('core/layout')->createBlock('catalog/product_list'); 
$listBlock->setCollection($collection)->setTemplate('your/alternative/catalog/product/list.phtml'); 

El bloque de lista de productos siempre inicializa un bloque de barras de herramientas. ? Puede mostrar la barra de herramientas en la plantilla mediante el uso de < php echo $ this-> getToolbarHtml()>

EDIT:? Aquí está un ejemplo de trabajo de una acción de muestra en frontend Magento 1.4.1.1:

public function productListAction() 
{ 

    $collection = Mage::getModel('catalog/product')->getCollection() 
      ->addAttributeToSelect('*'); 

    Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection); 

    $this->loadLayout(); 

    $listBlock = $this->getLayout()->createBlock('catalog/product_list') 
      ->setTemplate('catalog/product/list.phtml') 
      ->setCollection($collection); 

    $this->getLayout()->getBlock('content')->append($listBlock); 

    $this->renderLayout(); 
} 

Espero que lo aclare.

+0

Ese está funcionando, con la pantalla del producto normal. Pero quiero mostrarlo desde un archivo PHP personalizado. Incluso intenté cargar la barra de herramientas.phtml de esta manera. $ layout = Mage :: getSingleton ('core/layout'); $ toolbar = $ layout-> createBlock ('catalog/product_list_toolbar'); // Renderizar la barra de herramientas html echo $ barra de herramientas-> toHtml(); Esto no funciona en 1.4.1 pero funcionó en 1.3.Tengo que usar la barra de herramientas de paginación. Pero no funciona. – Elamurugan

+0

hola vinai, hice su sugerencia pero desafortunadamente no funciona. El pensamiento principal, estoy trabajando en EE 1.9, Y HICE ESTO. \t $ collection = Mage :: getModel ('catalog/product') -> loadByAttribute ('sku', $ sku); \t $ listBlock = Mage :: getSingleton ('core/layout') -> createBlock ('catalog/product_list'); \t $ listBlock-> setCollection ($ collection) -> setTemplate ('catalog/product/list/list.phtml'); \t var_dump ($ listBlock-> getCollection()); (DEVOLUCIONES NULO) \t // echo $ listBlock -> toHTML(); (A TRAVÉS DEL ERROR FATAL). – Elamurugan

+0

Mage :: getModel ('catalog/product') -> loadByAttribute() no devuelve una colección, sino un Mage_Catalog_Model_Product. He editado la publicación anterior y he añadido una acción de controlador para aclarar las cosas. – Vinai

2

Debe inicializar la barra de herramientas de su colección, supongo. ¿Has visto this page?

+0

no, mi problema es diferente, quiero mostrarlo desde un archivo php personalizado. así que cuando intenté cargar toolbar.phtml de esta manera, no funciona. $ magento_block = Mage :: getSingleton ('core/layout'); \t $ productsHtml2 = $ magento_block-> createBlock ('catalog/product_list_toolbar'); \t $ productsHtml2 -> setTemplate ('catalog/product/list/toolbar.phtml'); \t echo $ productsHtml2 -> toHTML(); devuelve un error fatal. Error fatal: llamada a una función miembro getSize() en un objeto no en D: \ wamp \ www \ wc2 \ app \ design \ frontend \ enterprise \ espresso \ template \ catalog \ product \ list \ toolbar.phtml en la línea 34 – Elamurugan

+0

bien, ahora mire en toolbar.phtml. ¿Ves qué variable es un "no objeto"? Es el valor de retorno de $ this-> getCollection(). Debes encontrar una manera de establecer esta colección. Mira el código de Vinai, escribe una llamada a setCollection(), ¡intenta hacer algo similar! – greg0ire

4

Para otros referencia esto es lo que agregué según el código de Vinai.

$collection = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('*'); 
    Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection);  
    $magento_block = Mage::getSingleton('core/layout'); 
    $productsHtml = $magento_block->createBlock('catalog/product_list'); 
    $productsHtml ->setTemplate('catalog/product/list.phtml')->setCollection($collection); 
    echo $productsHtml ->toHTML(); 

Representa perfectamente la barra de herramientas de paginación.

Cuestiones relacionadas