Как я могу получить текущий идентификатор категории? - PullRequest
5 голосов
/ 01 апреля 2011

У меня есть страница 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();

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

Ответы [ 6 ]

39 голосов
/ 17 января 2014

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

Mage::registry('current_category')->getId();
4 голосов
/ 01 апреля 2011

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

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

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

Приветствия
JD

3 голосов
/ 06 марта 2014

Попробуйте код ниже

 Mage::getModel('catalog/layer')->getCurrentCategory()->getId();
1 голос
/ 06 июля 2013

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

$layer = Mage::getSingleton('catalog/layer');
$_category = $layer->getCurrentCategory();
$currentCategoryId= $_category->getId();
1 голос
/ 01 апреля 2011

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

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

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

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

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

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

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

0 голосов
/ 02 ноября 2015

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

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

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

$currentCat->getId();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...