web-dev-qa-db-ja.com

Magento-現在の製品を入手

別のページに表示されているレイアウトにサイドバーブロックがあります。

このブロックには製品のリストがあり、製品ページにいるときに現在の製品を選択したいと思います。

私は使用しています:

$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"/>
19
Shani1351

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>
5
blmage

現在の製品IDを取得する方法

現在ロードされている製品IDを取得するには、以下のコードを試してください。

$product_id = $this->getProduct()->getId();

$ thisにアクセスできない場合、Magentoレジストリを使用できます。

$product_id = Mage::registry('current_product')->getId();
23
drsndodiya
_$_proId  = $this->getProduct()->getId();
$_product= Mage::getModel('catalog/product')->load($_proId);
_

これは実際に機能します。それは上で下票されました、しかし、それは私のために働きました。 getProduct()を使用すると、実際に製品がロードされることを理解していますが、製品の部分的な情報しか取得できませんでした。 IDを取得して製品をリロードすると、すべての情報が返されました。

これはMagentoのバージョンに固有の場合がありますが、バカに見えても動作します。

2
Adrian