Magento - Special Collection no mostrar la barra de herramientas y rompiendo la barra lateral a la vista solo producto

magento.stackexchange https://magento.stackexchange.com/questions/3096

  •  16-10-2019
  •  | 
  •  

Pregunta

Tengo una tienda de Magento que necesite disponer de dos páginas que muestran tanto los nuevos productos añadidos a la tienda y los que están en un descuento. Ambos muestran el mismo problema, pero te daré el código para el último porque creo que es el más problemático.

El problema es que puedo demostrar con éxito la lista de productos que muestran los criterios pero no puedo hacer que la barra de herramientas aparecen como lo haría en cualquier otra categoría. Además, cada vez que haga clic en un producto a partir de ahí que perdería la barra lateral de la página de detalles del producto, como si el XML gobierna he levantado no será de aplicación a la página porque estoy comming desde dicha página de promociones.

Esta es la clase que utilizo para obtener la colección de productos con una promoción activa:

class Mage_Catalog_Block_Product_Promo extends Mage_Catalog_Block_Product_List{
protected $_productsCount = null;

const DEFAULT_PRODUCTS_COUNT = 5;

protected function _beforeToHtml()
{
    $todayDate  = Mage::app()->getLocale()->date()->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);

    $collection = Mage::getResourceModel('catalog/product_collection');
    Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);
    Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection);

    $collection = $this->_addProductAttributesAndPrices($collection)
        ->addStoreFilter()
        ->addAttributeToFilter('special_from_date', array('date' => true, 'to' => $todayDate))
        ->addAttributeToFilter('special_to_date', array('or'=> array(
            0 => array('date' => true, 'from' => $todayDate),
            1 => array('is' => new Zend_Db_Expr('null')))
        ), 'left')
        ->addAttributeToSort('flash', 'desc')
        ->setPageSize($this->getProductsCount())
        ->setCurPage(1)
    ;
    $this->setProductCollection($collection);

    $toolbar = $this->getToolbarBlock();
    $toolbar->setCollection($collection);
    $this->setChild('toolbar', $toolbar); 

    return parent::_beforeToHtml();
}

 public function setCollection($collection)
{
    $this->_productCollection = $collection;
    return $this;
}

public function setProductsCount($count)
{
    $this->_productsCount = $count;
    return $this;
}

public function getProductsCount()
{
    if (null === $this->_productsCount) {
        $this->_productsCount = self::DEFAULT_PRODUCTS_COUNT;
    }
    return $this->_productsCount;
}
} 

Esta es mi phtml donde consigo todos mis productos:

<?php $current_cat= Mage::getSingleton('catalog/layer')->getCurrentCategory()->getId(); ?>

<?php 
$_productCollection = $this->getProductCollection();
$_helper = $this->helper('catalog/output');
$_collectionSize = $_productCollection->count() ?>
<div class="promos_new_list">
    <div class="countcat">
        <?php //$_productCollection = $this->getLoadedProductCollection(); 
        $count = $_productCollection->getSize(); 
        echo $count; ?> Produits 
    </div>
<?php echo $this->getToolbarHtml(); ?>
<?php $_columnCount = 4; ?>
<?php $i=0; 
foreach ($_productCollection as $_product): ?>
    <?php if ($i++%$_columnCount==0): ?>
    <ul class="products-grid">
    <?php endif ?>
        <li class="item<?php if(($i-1)%$_columnCount==0): ?> first<?php elseif($i%$_columnCount==0): ?> last<?php endif; ?>">
            <?php include('view/labels.phtml')  ?>                
            <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" class="product-image"><img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(178,108); ?>" width="178" height="108" alt="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" /></a>
            <div id="productimgover<?php echo $_product->getId()?>" style="display: none;"><img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(64); ?>" width="64" height="64" alt="<?php echo $this->stripTags($this->getImageLabel($_product, 'small_image'), null, true) ?>" /></div>
            <div class="moreinfo">
                <h2 class="product-name"><a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($_product->getName(), null, true) ?>"><?php echo $_helper->productAttribute($_product, $_product->getName(), 'name') ?></a></h2>
                <div id='productname<?php echo $_product->getId()?>' style='display:none'><?php echo $_helper->productAttribute($_product, $_product->getName(), 'name') ?></div>
                <p class="product-desc">
                    <?$desc=$this->htmlEscape($_product->getShortDescription());?>
                    <?php echo Mage::helper('function')->unalinea($desc,30);?>
                </p>
                <?php echo $this->getPriceHtml($_product, true) ?>

                <div class="nowmore orangegradient">
                    <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->stripTags($_product->getName(), null, true) ?>">En savoir plus </a><span></span>
                </div>

                <div class="clear"></div>

            </div>
        </li>
    <?php if ($i%$_columnCount==0 || $i==$_collectionSize): ?>
    </ul>
    <?php endif ?>
<?php endforeach ?>
</div>

No sé si se necesita ningún código más. Un compañero dice Magento no funciona correctamente cuando hago esto porque no tiene una categoría de activo, pero yo no entiendo muy bien por qué? ¿Me puede guiar aquí?

¿Fue útil?

Solución

Bien hasta ahora he esquivado el problema barra de herramientas utilizando la siguiente:

<?php
$toolbar = Mage::getBlockSingleton('catalog/product_list')->getToolbarBlock();
$toolbar->setCollection($_productCollection);
echo $toolbar->toHtml();
?>

No estoy seguro de si esa es la forma correcta de acercarse a la situación, pero a mí me funciona por ahora.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top