Magento - Специальная коллекция, не показывающая панель инструментов и разрыв боковой панели на одноместном просмотре продукта
-
16-10-2019 - |
Вопрос
У меня есть магазин Magento, в котором нужно иметь две страницы, которые показывают как новые продукты, добавленные в магазин, так и те, которые находятся со скидкой. Оба показывают одну и ту же проблему, но я дам вам код для последнего, потому что я думаю, что это самое проблематичное.
Проблема в том, что я могу успешно показать список продуктов, показывающих критерии, но я не могу сделать панель инструментов появиться, как это было бы в любой другой категории. Кроме того, всякий раз, когда я нажимаю на продукт оттуда, я терял боковую панель на странице подробной информации продукта, как если бы правила XML, которые я настраивал, не применяется на странице, потому что я выхожу со страницы «Промо -акции».
Это тот класс, который я использую для получения коллекции продуктов с активным продвижением:
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;
}
}
Это мой phtml, где я получаю все свои продукты:
<?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>
Я не знаю, нужно ли еще код. Коллега говорит, что Magento не работает должным образом, когда я делаю это, потому что у него нет активной категории, но я не совсем понимаю, почему? Вы можете направить меня здесь?
Решение
Что ж, до сих пор я увернулся от проблемы панели инструментов, используя это:
<?php
$toolbar = Mage::getBlockSingleton('catalog/product_list')->getToolbarBlock();
$toolbar->setCollection($_productCollection);
echo $toolbar->toHtml();
?>
Я не уверен, что это правильный способ приблизиться к ситуации, но сейчас это работает для меня.