如何获取当前类别ID?

时间:2011-03-31 22:12:04

标签: php xml variables layout magento

我有一个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> 

我已经尝试获取我在布局中设置的ID,但没有这样的运气。我试过了:

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

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

但这些方法都不起作用。有谁知道我怎么能得到这个ID?

6 个答案:

答案 0 :(得分:39)

我认为这是最好的方式;)

Mage::registry('current_category')->getId();

答案 1 :(得分:4)

没有试过这个,但也许是这样的:

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

这样,您可以直接获取在XML中的Block对象上设置的变量。

干杯,
JD

答案 2 :(得分:3)

尝试以下代码

 Mage::getModel('catalog/layer')->getCurrentCategory()->getId();

答案 3 :(得分:1)

您是否考虑过更新目录页面的布局而不是制作CMS页面?我想在某些情况下您可能更喜欢CMS页面,但是您可以非常轻松地更新类别的布局,就像在Magento中一样简单,这并不是那么容易:)

登录管理员后端,转到目录 - &gt;管理类别,然后选择所需的类别,然后单击自定义设计选项卡。请注意“自定义布局更新”字段。您可以在此处进行布局更新。

因此,对于此类别,如果您不想显示特定的块,则可以执行类似

的操作
<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>

您可以使用谷歌查找有关如何布局的更多信息。

答案 4 :(得分:1)

这对我有用:

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

答案 5 :(得分:0)

这对我有用:

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

然后您将当前类别作为对象,您可以通过以下方式获取ID:

$currentCat->getId();