我想在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)
我希望这有帮助.
| 归档时间: |
|
| 查看次数: |
35611 次 |
| 最近记录: |