Magento:如何判断您是在 .phtml 文件中的类别页面还是产品页面上

2022-08-30 19:22:44

我正在尝试将 if 来宾在类别列表页面或产品页面上,则将 if 语句编程到我的 .phtml 文件中。

例如,此代码:

<?= Mage::app()->getFrontController()->getRequest()->getRouteName(); ?>

每当我位于CMS页面以外的页面上时,返回“目录”。

有没有办法使用类似的方法来了解用户是否正在查看根类别,子类别或单个产品页面?

任何帮助将不胜感激!


答案 1

自从我处理前端目录页面以来已经有一段时间了,但是试一试。

Magento的当前版本在某些页面上注册某些全局变量(不是PHP全局变量,而是Magento系统的全局变量)。

呼叫以下人员

$category = Mage::registry('current_category');         
$product  = Mage::registry('current_product');
$product  = Mage::registry('product');

如果尚未设置对象(即,您位于没有类别或产品的页面上),则返回 null,或者返回类别和产品对象。

如果返回产品对象,则您位于产品页面上。

如果未返回任何产品对象,但返回类别对象,则您位于类别页面上。类别对象具有获取父 ID 的方法

$category->getParentId()

没有父 ID 的类别应该是顶级类别,具有父 ID 的类别应该是子类别。

这应该为您提供确定当前请求位置所需的内容。

更新:差不多十年后回到这一点 - 我可能不会仅仅依靠注册表的内容来确定我所在的页面。相反,我会使用完整的操作名称来查找上面的对象。


答案 2

虽然Alan的答案会起作用,但有一个更直接的选择,你实际上在正确的轨道上使用了你的代码片段......您只需要检查控制器名称而不是模块名称:

<?php Mage::app()->getFrontController()->getRequest()->getControllerName(); ?>

这将返回或基于其控制器分别是 和。categoryproductCategoryController.phpProductController.php

这假设您没有安装任何第三方模块,这些模块用自己的控制器重写这些控制器。


推荐