Как мне получить текущий идентификатор категории?


У меня есть страница CMS, на которой я собираюсь отображать продукты со следующим обновленным XML-кодом:

<reference name="content">
    <block type="catalog/product_list"  name="product_list" template="catalog/product/wholesale-list.phtml">
        <action method="setCategoryId"><category_id>191</category_id></action>
        <action method="setToolbarBlockName"><name>product_list_toolbar</name></action>
    </block>
</reference> 

Я пытался получить идентификатор, который я установил в макете, но мне не повезло. Я пробовал:

$_category = Mage::registry(‘current_category’);
$currentCategoryId= $_category->getId();

И

$layer = Mage::getSingleton(‘catalog/layer’);
$_category = $layer->getCurrentCategory();
$currentCategoryId= $_category->getId();

Но ни один из этих методов не работает. Кто-нибудь знает, как я могу получить удостоверение личности?

Author: Jonathan Day, 2011-04-01

6 answers

Не пробовал этого, но, может быть, что-то вроде:

$this->getLayout()->getBlock('product_list')->getCategoryId()

Таким образом, вы напрямую получаете переменную, которую вы установили для объекта блока в XML.

Приветствия,
Джей Ди

 4
Author: Jonathan Day, 2011-04-01 00:37:01

Я думаю, что это лучший способ;)

Mage::registry('current_category')->getId();
 38
Author: Ansyori, 2014-01-17 16:09:32

Попробуйте использовать код ниже

 Mage::getModel('catalog/layer')->getCurrentCategory()->getId();
 3
Author: Rohit Goel, 2017-03-31 10:16:20

Рассматривали ли вы возможность обновления макета страницы каталога вместо создания страницы CMS? Я полагаю, что бывают ситуации, когда вы можете предпочесть страницу CMS, но вы можете довольно легко обновить макет категории, примерно так же просто, как в Magento, что не так просто:)

Войдите в серверную часть администратора, перейдите в Каталог -> Управление категориями, затем выберите нужную категорию, затем перейдите на вкладку Пользовательский дизайн. Обратите внимание на поле Обновления пользовательского макета. Это где вы можете разместить свои обновления макета.

Итак, для этой категории, если вы не хотите отображать определенный блок, вы можете сделать что-то вроде

<reference name="right">
        <remove name="right.permanent.callout" />
</reference>

, Который полностью удалит блок с именем right.permanent.выноска из макета. И если бы вы хотели просто изменить список продуктов, чтобы использовать ваш конкретный файл phtml, вы могли бы сделать что-то вроде...

<reference name="product_list">
        <action method="setTemplate"><template>catalog/product/wholesale.phtml</template></action>
</reference>

Вероятно, вы можете использовать Google, чтобы узнать больше о том, как создавать макеты.

 1
Author: shaune, 2011-04-01 00:08:20

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

$layer = Mage::getSingleton('catalog/layer');
$_category = $layer->getCurrentCategory();
$currentCategoryId= $_category->getId();
 1
Author: Meetai.com, 2013-07-06 04:26:11

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

$currentCat = $this->getLayout()->getBlock('category.products')->getCurrentCategory();

Затем у вас есть текущая категория в качестве объекта, и вы можете получить идентификатор по:

$currentCat->getId();
 0
Author: codiga, 2015-11-02 19:28:24