web-dev-qa-db-ja.com

Magentoでプログラム的に製品ページにあるかどうかを確認します

Magentoサイトのすべてのページにトラッキングコードを挿入したいのですが、ページがCMSページ、カテゴリ閲覧ページ、または製品ビューページの場合は、異なる構文を使用する必要があります。今のところ、各ページに一般的なトラッキングコードを挿入するブロックを使用してカスタムモジュールを設定しています。ブロック内から、CMSページ、カテゴリページ、および製品ページをどのように区別できますか?

私は始めました:

Mage::app()->getRequest();

わかります

Mage::app()->getRequest()->getParam('id');

商品ページとカテゴリページで商品IDまたはカテゴリIDを返しますが、これらのページタイプは区別しません。

Mage::app()->getRequest()->getRouteName();

cMSページでは「cms」を返しますが、カテゴリブラウジングページと製品ビューページの両方で「catalog」を返すため、これを使用してカテゴリページと製品ページを区別することはできません。

安全に使用できるリクエストにインジケーターはありますか?または、ページタイプごとに異なるトラッキングコードという私の目標を達成するためのより良い方法はありますか?

15
Del F

ルーターを使用してこれを行うさらに良い方法があるかもしれませんが、1つの高速な方法は、レジストリをチェックして、調べている単一の製品があるかどうかを確認することです。

<?php

$onCatalog = false;
if(Mage::registry('current_product')) {
    $onCatalog = true;
}

お役に立てば幸いです。

ありがとう、ジョー

26
Joseph Mastey

最も簡単な答えは次のとおりです。

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

これはMVCモデルに従って100%正しい方法です。コアコードを調べて実際に理解してください。ロード時にメソッドを提供したり、レジストリメソッドに依存したりしないでください。私がそこにいなくてもmytraining.netをサポートしてください。

32
bzhang

チェックに欠陥があることは言及する価値があると思いました

Mage::registry('current_product')

これは確かに商品が存在するかどうかをチェックしますが、たとえばレビューページでは、商品も設定されているため、ページの場所を決定するためにより具体的にする必要がある場合があります。

次のチェックでは、「catalog」モジュールを使用していて、コントローラーが「product」リクエストであることを確認することで、製品ページにいることを確認します。レビューの製品リストを表示する場合、その値は「レビュー」(モジュール)と「リスト」(コントローラー)になります。

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

これがお役に立てば幸いです。

16
Matt

使用されているブロックのパラメーターを使用して、必要な追跡コードのタイプを示すことができます。次に、レイアウトXMLを使用して問題を解決します。次のレイアウトハンドルを使用して、適切なパラメータでブロックを更新できます。CMSページ= 'cms_page'カテゴリブラウジング= 'catalog_category_view'製品表示= 'catalog_product_view'

このようなもの:

<layout>
    <default>
        <reference name="before_body_end">
            <block type="mymodule/myblock" name="myblock" />
        </reference>
    </default>
    <cms_page>
        <reference name="myblock">
            <action method="setTrackingType">
                <type>cms</type>
            </action>
        </reference>
    </cms_page>
    <catalog_category_view>
        <reference name="myblock">
            <action method="setTrackingType">
                <type>category</type>
            </action>
        </reference>
    </catalog_category_view>
    <catalog_product_view>
        <reference name="myblock">
            <action method="setTrackingType">
                <type>product</type>
            </action>
        </reference>
    </catalog_product_view>
</layout>
4
Lee Saferite