Magento Mage::registry(';current#U category';)返回NULL的原因是什么?

Magento Mage::registry(';current#U category';)返回NULL的原因是什么?,magento,Magento,我正在使用一个在块中调用函数的模板,在该块中,我试图使用Mage::registry('current_category')提取当前类别。但是,它总是返回NULL。我试过在产品页面、搜索页面上这样做,但仍然没有。是否有任何原因会返回NULL,我可以检查哪些内容?尝试以下方法: $category = $this->helper('catalog/category')->getCategoryUrl(Mage::registry('current_category')); 它为nul

我正在使用一个在块中调用函数的模板,在该块中,我试图使用
Mage::registry('current_category')
提取当前类别。但是,它总是返回NULL。我试过在产品页面、搜索页面上这样做,但仍然没有。是否有任何原因会返回NULL,我可以检查哪些内容?

尝试以下方法:

$category = $this->helper('catalog/category')->getCategoryUrl(Mage::registry('current_category'));

它为null,因为它未设置。注册表作为全局变量的系统,不依赖于PHP内置的全局支持。不能保证任何已注册的特定变量在每页上都可用。例如,你说你在搜索页面上尝试了这个。搜索页面上的当前类别应该是什么


它是空的,因为它应该是空的

您可以使用调试器检查设置位置和未设置位置:(
致命错误:在第100行的…\Magento\app\code\core\Mage\Catalog\Helper\Category.php中对非对象调用成员函数getData(),并且您的模板文件为?如果Mage::registry('current_Category')的返回值为为空,则获取类别URL将不起作用。此外,如果URL包含相关类别名称,则仅为产品页面设置类别。我想这是有意义的:)谢谢you@clockworkgeek但在我的例子中,有些产品的poduct页面(url中都没有类别名称)
Mage::registry('current_category')
返回null,但在其他情况下,它返回类别对象。这是为什么?我猜,如果你看URL重写页面,你可能会发现那些有类别的产品被重写到一个包含类别ID的路径上。因为我猜可能也与缓存值有关,这将很难确定。所以,我们如何知道注册表是否可用于某个页面?