Странное поведение с использованием Mage_Catalog_Model_Category - PullRequest
0 голосов
/ 13 февраля 2012

Я пытаюсь отобразить определенную категорию на одной из моих страниц, и у меня появляются странные результаты. Я использую следующий код для загрузки категории с идентификатором 5

$category = new Mage_Catalog_Model_Category();
$category->load(5);

Однако это НЕ дает результатов, даже если в этой категории есть продукты. Я изменил ID на 2 (это категория по умолчанию), и это возвращает 2 продукта, даже если в этой категории нет товаров!

Вот так я загружаю код, я создал статический блок с именем «Получить по категории», включил его и заполнил следующим кодом:

{{block type="catalog/navigation" template="catalog/product/by_category.phtml"}}

Затем я создал новую страницу и добавил к ней статический блок.

Кто-нибудь еще испытывал это раньше? Кто-нибудь может протянуть руку?

1 Ответ

1 голос
/ 13 февраля 2012

Программно, чтобы загрузить список продуктов категории, вы должны сделать это следующим образом:

$catalog = Mage::getModel('catalog/category')->load(/* your category ID*/);
$collection = $catalog->getProductCollection();
Zend_Debug::dump($collection->getItems());

Этот код не будет так работать в статическом блоке.Вам нужно будет создать класс типа Mage_Core_Block_Template (или аналогичный) и подготовить коллекцию с предварительно определенным идентификатором категории, а затем в своем статическом блоке вы можете использовать следующий код {{block type = "catalog / mynewblock" template = "catalog /product / mynewblock.phtml "category_id = 'my_category_ID_value'}}

Когда блок будет создан модулем CMS и благодаря фильтру Mage_Core_Model_Email_Template_Filter, блок будет иметь значение category_id.В блоке вам нужно будет сделать следующее:

protected function _beforeHtml(){ // or in the protected function _toHtml() depending of what you want to do and how you want to do it.
    $categoryId = $this->getCategoryId();
    $catalog = Mage::getModel('catalog/category')->load($categoryId);
    $collection = $catalog->getProductCollection();
    $products = $collection->getItems();
    $this->setProducts($products); // in your template file you can, then, do $this->getproducts(); etc...
    ...
}

Вы можете найти другую информацию в ответе, который я написал здесь Как отобразить несколько категорий с помощью блока Magento

...