2011-01-17 22 views
1

Magento 1.4.1.1または1.5.0.0を使用して、特定のカテゴリに関連付けられた製品を使用する場合、静的ブロックを単一のビューでの商品説明。magento template xml:特定のカテゴリのすべての製品の製品説明にスタティックブロックを追加

スタティックブロック(測定画像)を作成し、local.xmlに簡単な追加コードを追加することができます。しかし、私は特定のカテゴリの製品への追加のアプリケーションを制限する方法を把握することはできません。

EG:(コースの靴カテゴリで、)すべての靴製品、単一のビューページは、靴のサイズ測定画像を表示する必要があり、スカートのサイズ測定画像をスカートなど

私は本当に行きたくありませんテンプレートをオーバーライドする...ブロックを追加するだけです!

答えて

2

cms/blockに由来するカスタムブロックタイプを作成します(Somemodule_Categorical_Cms_Blockと呼んでも構いません)。カテゴリをチェックするために、独自のisEnabledForCategoryを実装

protected function _toHtml() 
{ 
    if(!$this->isEnabledForCategory()) { 
     return ""; 
    } 
    return parent::_toHtml(); 
} 

:そのブロックのクラスでは、このような何かを実装します。新しいブロッククラスを呼び出すようにlocal.xml宣言を変更すると、goに設定する必要があります。

希望に役立ちます!

おかげで、 ジョー

+0

これは私が考えていたものではありませんが、それは私のすべての目的をうまく成し遂げます。ありがとう! –

+0

以下のテンプレートの変更がより良い答えだと思うのはなぜですか?私はあなたがlayout.xmlと追加のブロックにすべてを残すことができるということを除いて、彼らはほぼ平等であると思います。私が知る限り、モジュール式テンプレートシステムのmagentoのアイデアではるかに強力です。 –

+0

私は一般的にブロックをオーバーライドする傾向がありますが、技術的には完全にオーバーライドしないでください。あなたが将来ここでどれだけのカスタマイズをするかによって、おそらくもっと微妙な問題になります。 –

2

あなたは製品が一つのカテゴリに属していると仮定できる場合にのみ、あなたは、このようなテンプレートファイルをチェックインすることができます:それはあなたが管理者に入力したテキストは、とても扱いやすいです提供しているので

$product = Mage::registry('current_product'); 
$category = $product->getCategory(); // get first category only 
if ($category->getUrlKey() == 'shoes'): 
    // Output show size measurements 
elseif ($category->getUrlKey() == 'skirts'): 
    // Output skirt measurements 
endif; 

は、ここで私は getUrlKeyを使用。

もっと洗練された方法は、各製品の[デザイン]タブの[カスタムレイアウトの更新]フィールドを使用してXMLを直接入力することですが、それはもっと有効です。

+0

が、それはCMSのブロックだがそうですここにテンプレートはありません。しかし、テンプレートが正しいとすれば、これはブロックを上書きするよりもはるかに良い答えです。 –

+0

あなたは正しいです、CMSブロックが意図されました。しかし、テーマファイルのように変更されないものとして「静的」を読んでいますが、管理対象のコンテンツは動的だと考えていますが、データベースを読み込むことに依存していて、期待していないときに変更することができます。それからもう一度、それはちょうど私の奇妙な認識です。 – clockworkgeek

+0

magentoは...ちょっと言っておきましょう。私は魔法をあまり好きではありません。テンプレート作成システムは、使い尽くされるほど畳み込まれています。いずれにしても、テンプレートシステムxmlでjavascriptのような追加を行うことができます。それがうまく実行された場合は実際には涼しいアイデア。私の質問は、「カテゴリー[x]の製品にのみ追加を行うにはどうすればいいのですか?」私はこれを行う方法があると推測しますが、上記の答えは基本的に "実際のテンプレートファイルを上書きする必要があります"と言っています。これはおそらく4ヶ月ごとに悪い更新シナリオを意味します。 –

0

は、私はそのようなことを行うために必要な、私はこの思い付いた:
の1-限り、私のテーマが使用するよう「category1_size_guide」
2 - という名前の静的ブロックを作成します。
"\アプリ\設計\フロントエンド\ theme_designer \ THEME_NAME \テンプレート\ページ2columns-right.phtmlは\" ディスプレイ製品の
、私はこのコードを追加:私は質問を読んで

$product = Mage::registry('current_product'); 
$catIds = ($product)?$product->getCategoryIds():array(); //print_r($catIds); 
if(in_array(60, $catIds)){ //60 is category id you want to check 
    echo $this->getLayout()->createBlock('cms/block')->setBlockId('category1_size_guide')->toHTML(); 
} 
関連する問題