在Magento中以编程方式确定是否在产品页面上

Del*_*l F 15 php magento

我想在Magento网站的所有页面上插入跟踪代码,如果页面是CMS页面,类别浏览页面或产品视图页面,则需要使用不同的语法.我有一个自定义模块设置了一个块,现在在每个页面上插入一个通用的跟踪代码.在块内,如何区分CMS页面,类别页面和产品页面?

我开始时:

Mage::app()->getRequest();
Run Code Online (Sandbox Code Playgroud)

我知道

Mage::app()->getRequest()->getParam('id');
Run Code Online (Sandbox Code Playgroud)

返回产品和类别页面上的产品或类别ID,但不区分这些页面类型.

Mage::app()->getRequest()->getRouteName();
Run Code Online (Sandbox Code Playgroud)

返回CMS页面的"cms",但返回类别浏览页面和产品视图页面的"目录",因此我无法使用它来区分类别和产品页面.

在我可以安全使用的请求中是否有一些指示器?或者是否有更好的方法来实现不同页面类型的不同跟踪代码的目标?

小智 32

最简单的答案如下:

<?php
echo $this->getRequest()->getControllerName();
if($this->getRequest()->getControllerName()=='product') //do something
if($this->getRequest()->getControllerName()=='category') //do others
?>
Run Code Online (Sandbox Code Playgroud)

这是100%根据MVC模型做的正确方法,请查看核心代码真正理解它,并且不要给方法加载或依赖于注册表方法.支持mytraining.net即使我不在那里.


Jos*_*tey 27

使用路由器可能有更好的方法来做到这一点,但一种快速的方法是检查注册表,看看我们是否有一个我们正在查看的产品:

<?php

$onCatalog = false;
if(Mage::registry('current_product')) {
    $onCatalog = true;
}
Run Code Online (Sandbox Code Playgroud)

希望有所帮助!

谢谢,乔


Mat*_*att 16

我认为值得一提的是检查存在缺陷

Mage::registry('current_product')
Run Code Online (Sandbox Code Playgroud)

这确实检查是否存在产品,但是当例如查看页面上,该产品还设置,因此你可能需要更具体,确定的页面位置.

以下检查确保我们在产品页面上,通过检查它是否使用"目录"模块,并且控制器是"产品"请求.在查看评论的产品列表时,它的值将是"评论"(模块)和"列表"(控制器).

if($this->getRequest()->getModuleName()=='catalog' && 
$this->getRequest()->getControllerName()=='product'){
    Mage::registry('current_product');
}
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助.