別のページに表示されているレイアウトにサイドバーブロックがあります。
このブロックには製品のリストがあり、製品ページにいるときに現在の製品を選択したいと思います。
私は使用しています:
$current_product = Mage::registry('current_product');
現在の製品を取得しますが、これは製品ページを初めてロードするときにのみ機能します。別の製品を選択すると、上記のコードは同じ値を返します(最初の製品)。
Magentoキャッシュを使用しているため、これが起こると仮定しています。適切な価値を得るために何ができますか?
私が使用するときに同じことが起こります:
$currentCategory = Mage::registry('current_category');
サイドバーブロックは、ここに追加したナビゲーションテンプレートです。.\ app\design\frontend\default\mytheme\template\catalog\navigation\page_left.phtml。
このXMLを使用してレイアウトに追加しています。
<block type="catalog/navigation" name="left.navigation.block" as="left.navigation.block" template="catalog/navigation/page_left.phtml"/>
Mage_Catalog_Block_Navigation
を継承する独自のブロッククラスを使用したくない場合は、独自のキャッシュ情報を設定できます(たとえば、現在の製品に応じて)、キャッシュを削除できます。レイアウト定義でこれを使用してブロックします:
<block type="catalog/navigation" name="left.navigation.block" as="left.navigation.block" template="catalog/navigation/page_left.phtml">
<action method="unsetData"><key>cache_lifetime</key></action>
</block>
現在の製品IDを取得する方法
現在ロードされている製品IDを取得するには、以下のコードを試してください。
$product_id = $this->getProduct()->getId();
$ thisにアクセスできない場合、Magentoレジストリを使用できます。
$product_id = Mage::registry('current_product')->getId();
_$_proId = $this->getProduct()->getId();
$_product= Mage::getModel('catalog/product')->load($_proId);
_
これは実際に機能します。それは上で下票されました、しかし、それは私のために働きました。 getProduct()
を使用すると、実際に製品がロードされることを理解していますが、製品の部分的な情報しか取得できませんでした。 IDを取得して製品をリロードすると、すべての情報が返されました。
これはMagentoのバージョンに固有の場合がありますが、バカに見えても動作します。