1

我想在 Magento 1.7 中将类别过滤器添加到 product_new 小部件。我尝试了以下方法。

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"}}

任何人都可以指导我应该做哪些改变以使我的课程有效。

4

1 回答 1

0

我认为现在是正确的:

   <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,但是即使你已经覆盖了最后一个,小部件块仍然扩展了原来的那个。

于 2013-11-11T08:27:18.477 回答