Виджет 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 но даже если вы перезаписали этот последний, блок виджетов все еще расширяет исходный.

Другие вопросы по тегам