Новые товары по категориям в Magento - PullRequest
4 голосов
/ 15 июля 2010

Это должно быть глупо, но это сводит меня с ума!

Все, что я хочу, это показать новые продукты для указанной категории, но я получаю только новые продукты из любой категории.

Предположим, я хочу показать категорию 74, я попробовал практически любую комбинацию этого кода

{{block type="catalog/product_new" name="home.catalog.product.new" alias="product_homepage" category_id="74" template="catalog/product/new.phtml"}}

С присвоенным category_id напрямую

{{block type="catalog/product_new" category_id="74" template="catalog/product/new.phtml"}} 

С неявной категорией в зависимости от того, к какой категории я обращаюсь

{{block type="catalog/product_new" template="catalog/product/new.phtml"}}

Этот код был протестирован, жестко закодирован в коде домашней страницы, создал с ним статический блок и включил его через панель категорий (статический блок и продукты)… но ничего не стоит. Я протестировал практически любой код, который нашел на этом и других форумах, но безрезультатно.

Независимо от какого-либо кода (с присвоенным category_id = "74" и нет), я все время получаю один и тот же результат. Фильтр категорий не работает и показывает мне новые товары из любой категории, не новые товары текущей категории, ни товары ручной категории (например, category_id = "74")

С другой стороны, если я использую список товаров вместо новых товаров, он работает нормально на домашней странице и как статический блок, поэтому категории кажутся хорошо созданными

{{block type="catalog/product_list" category_id="74" template="catalog/product/list.phtml"}}

Это показывает мне продукты, которые относятся к категории 74

Я использую magento Magento ver. 1.3.2.4, и показывает мне тот же результат, даже используя разные шаблоны.

Любой совет будет приветствоваться

Хорошего дня, J.

PS Я пробовал и с другими категориями, не только с 74. С родительскими категориями, дочерними категориями ... но без результата вообще

Ответы [ 4 ]

3 голосов
/ 28 января 2011

Наконец очень просто ...

Используйте блок определения ниже:

{{block type="catalog/product_new" name="home.catalog.product.new" alias="allCatalogNewProducts" category_id="5" template="catalog/product/new.phtml"}}

Чтобы извлечь category_id, вы должны изменить функцию _beforeToHtml нового класса следующим образом:

Файл в \ app \ code \ core \ Mage \ Catalogue \ Block \ Product \ New.php Предпочитаю доплатить этот файл по локальному пути

   protected function _beforeToHtml()
    {
        $todayDate  = Mage::app()->getLocale()->date()->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('date' => true, 'to' => $todayDate))
            ->addAttributeToFilter('news_to_date', array('or'=> array(
                0 => array('date' => true, 'from' => $todayDate),
                1 => array('is' => new Zend_Db_Expr('null')))
            ), 'left')
            ->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);
      }


        $this->setProductCollection($collection);

        return parent::_beforeToHtml();

Вы можете видеть, что оператор if был добавлен:

  if($categoryId=$this->getData('category_id')){
    $category = Mage::getModel('catalog/category')->load($categoryId);
    $collection->addCategoryFilter($category);
  }

Вы извлекаете category_id с помощью функции $ this-> getData ('category_id')

Наслаждайтесь ...

1 голос
/ 15 июля 2010

Блок catalog/product_new не принимает category_id в качестве параметра.Если вы хотите сделать это для отдельной категории, вам нужно создать свой собственный пользовательский блок, который начинается с catalog/product_new, и переопределить метод _beforeToHtml, чтобы использовать category_id.

Надеюсь, это поможет!

Спасибо, Джо

0 голосов
/ 07 января 2011

Я думаю, что вы хотите изменить New.php следующим образом:

$collection = Mage::getResourceModel('catalog/product_collection');

становится таким (необязательный getStoreId) ...

$featCat = Mage::getModel('catalog/category')->load($this->getCategory()); $collection = Mage::getResourceModel('catalog/product_collection')->setStoreId($this->getStoreId())->addCategoryFilter($featCat);

... очевидно, вам придется создавать методы получения и установки, такие как 'setCategory', 'getCategory'

0 голосов
/ 08 ноября 2010

Это работает для меня.

    protected function _beforeToHtml()
    {
        $todayDate  = Mage::app()->getLocale()->date()->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('date' => true, 'to' => $todayDate))
            ->addAttributeToFilter('news_to_date', array('or'=> array(
                0 => array('date' => true, 'from' => $todayDate),
                1 => array('is' => new Zend_Db_Expr('null')))
            ), 'left')
            ->addAttributeToSort('news_from_date', 'desc')
            ->setPageSize($this->getProductsCount())
            ->setCurPage(1)
        ;


        if($categoryId=$this->getCategoryId()){
        $category = Mage::getModel('catalog/category')->load($categoryId);
        $collection->addCategoryFilter($category);
}

        $this->setProductCollection($collection);

        return parent::_beforeToHtml();
    }
...