Виджет Magento (product_new) Переопределить
Я хотел добавить фильтр категорий в виджет product_new в Magento 1.7. Я попробовал следующее.
1. Модульная декларация.
<config>
<modules>
<module_name>
<active>true</active>
<codePool>local</codePool>
</module_name>
</modules> </config>
2. Добавлено следующее в config.xml
<config>
<modules>
<module_name>
<version>0.1.0</version>
</module_name>
</modules>
<global>
<blocks>
<catalog>
<rewrite>
<product_new>Module_Name_Block_Product_New</product_new>
</rewrite>
</catalog>
</blocks>
</global>
</config>
3. Переопределить товар новым классом
class Module_Name_Block_Product_New extends Mage_Catalog_Block_Product_New
{
/**
* Prepare collection with new products and applied page limits.
*
* return Mage_Catalog_Block_Product_New
*/
protected function _beforeToHtml()
{
$todayStartOfDayDate = Mage::app()->getLocale()->date()
->setTime('00:00:00')
->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);
$todayEndOfDayDate = Mage::app()->getLocale()->date()
->setTime('23:59:59')
->toString(Varien_Date::DATETIME_INTERNAL_FORMAT);
$collection = Mage::getResourceModel('catalog/product_collection');
$collection->setVisibility(Mage::getSingleton('catalog/product_visibility')->getVisibleInCatalogIds());
$collection = $this->_addProductAttributesAndPrices($collection)
->addStoreFilter()
->addAttributeToFilter('news_from_date', array('or'=> array(
0 => array('date' => true, 'to' => $todayEndOfDayDate),
1 => array('is' => new Zend_Db_Expr('null')))
), 'left')
->addAttributeToFilter('news_to_date', array('or'=> array(
0 => array('date' => true, 'from' => $todayStartOfDayDate),
1 => array('is' => new Zend_Db_Expr('null')))
), 'left')
->addAttributeToFilter(
array(
array('attribute' => 'news_from_date', 'is'=>new Zend_Db_Expr('not null')),
array('attribute' => 'news_to_date', 'is'=>new Zend_Db_Expr('not null'))
)
)
//->addAttributeToSort('news_from_date', 'desc')
->setPageSize($this->getProductsCount())
->setCurPage(1);
if($categoryId=$this->getData('category_id')){
$category = Mage::getModel('catalog/category')->load($categoryId);
$collection->addCategoryFilter($category)->addAttributeToSort('position','asc');
}
$collection->addAttributeToSort('news_from_date', 'desc');
$this->setProductCollection($collection);
return parent::_beforeToHtml();
}
}
4. После этого, когда я вызываю виджет нового продукта на странице HOME CMS, он дает мне весь новый продукт из всех категорий, короче говоря, мой новый класс не действует, и все же называются основные классы. Ниже приведен блок виджетов.
{{widget type="catalog/product_widget_new" products_count="9" category_id="124" template="catalog/product/widget/new/content/new_grid.phtml"}}
Может кто-нибудь, пожалуйста, подскажите мне, какие изменения я должен сделать, чтобы сделать мой класс эффективным
1 ответ
Я думаю, что теперь это правильно
<blocks>
<catalog>
<rewrite>
<product_new>Module_Name_Block_Product_New</product_new>
</rewrite>
</catalog>
</blocks>
Так должно быть
<blocks>
<catalog>
<rewrite>
<product_widget_new>Module_Name_Block_Product_New</product_widget_new>
</rewrite>
</catalog>
</blocks>
А у вас объявление класса должно быть:
class Module_Name_Block_Product_New extends Mage_Catalog_Block_Product_Widget_New
Что вы сделали в своем коде, чтобы переписать Mage_Catalog_Block_Product_New
заблокировать, но вы используете на главной странице этот Mage_Catalog_Block_Product_Widget_New
,
Я знаю, что вы скажете, что Mage_Catalog_Block_Product_Widget_New
уже расширяется Mage_Catalog_Block_Product_New
но даже если вы перезаписали этот последний, блок виджетов все еще расширяет исходный.