19

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

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

私が使用している:

$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"/>
4

4 に答える 4

23

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

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

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

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

$product_id = Mage::registry('current_product')->getId();
于 2012-08-20T10:41:51.850 に答える
5

から継承する独自のブロッククラスを使用したくない場合は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>
于 2012-07-17T14:53:39.930 に答える
2
$_proId  = $this->getProduct()->getId();
$_product= Mage::getModel('catalog/product')->load($_proId);

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

これはMagentoのバージョンに固有である可能性がありますが、ばかげているように見えますが機能します。

于 2016-08-30T06:44:42.607 に答える
-3

以下のコードから現在の製品IDと製品の詳細を取得できます。

$_proId  = $this->getProduct()->getId();
$_product= Mage::getModel('catalog/product')->load($_proId);
于 2012-07-16T14:47:43.413 に答える