0

オブザーバーファイルで、ロードされたページが製品に対応しているかどうかを検出する必要があります。私はこの質問のチェックされた回答で使用されたものと同様の方法を使用しています:

if (!(Mage::registry('current_product'))) return;

しかし、これまで私たちは開発のテストを行っていました。今日から、多くのモジュールとプラグインを備えた実稼働前のサーバーでテストを行っています。これまではシームレスに機能していましたが、現在は機能せず、商品ページが読み込まれたことを検出しません。より「わかりやすい」URLを表示するためのURL書き換えに関連していると思いますが、それを解決する方法を検出できません。AlanStormチュートリアルのDepthMagentoDispatchを調べましたが、それでも何が間違っているのか、何を変更する必要があるのか​​を知ることができます。

何か案が?または、製品ページが読み込まれたことを検出する方法に関する他の解決策はありますか?

4

1 に答える 1

2

オブザーバーが攻撃されていることを確認しましたか?トリガーするイベントに対して、そのイベントの一意の名前が付いていることを確認してください。たとえば、次のコードでは、「catalog_product_set_price」という名前は「catalog_product_load_after」イベントに関して一意である必要があります。私はあなたがオブザーバーに入っていると仮定していますが、念のためです。このリスクは、インスタンスに多数の新しいモジュールを追加した場合に発生する可能性があります。

        <catalog_product_load_after>
            <observers>
                <catalog_product_set_price>
                    <type>singleton</type>
                    <class>NamespaceModule_Model_Observer</class>
                    <method>set_price2</method>
                </catalog_product_set_price>
            </observers>
        </catalog_product_load_after>

次の配列を使用して、現在地を確認できます。

$currentPageArray = array(
            'request_string'=> Mage::app()->getFrontController()->getRequest()->getRequestString(),
            'uri'           => Mage::app()->getFrontController()->getRequest()->getRequestUri(),
            'route'         => Mage::app()->getFrontController()->getRequest()->getRouteName(),
            'action'        => Mage::app()->getFrontController()->getRequest()->getActionName(),
            'controller'    => Mage::app()->getFrontController()->getRequest()->getControllerName()
        );

次のように出力されます。

Array
(
    [request_string] => /some-category/some-product-page-url.html
    [uri] => /catalog/product/view/id/64806/category/17
    [route] => catalog
    [action] => view
    [controller] => product
)

別のオブザーバーを試すことができます。

  • controller_action_layout_render_before_catalog_product_view
  • controller_action_postdispatch_catalog_product_view
于 2013-01-15T15:47:05.577 に答える