カタログ製品一覧ページでprice.phtmlのレンダリングはどのように行われますか?


12

カタログ製品一覧ページのテンプレートファイルはlist.phtmlです。カテゴリ内のすべての製品のレンダリングがforeachループを使用して行われる場所。

のレンダリングについて混乱していますprice.phtml。ハンドルにブロックがないため<catalog_category_default>

今、<?php echo $this->getPriceHtml($_product, true) ?>製品の価格を返します。

このメソッドはどのようにリンクされていprice.phtmlますか?


base / default / your_themeのcatalog.xmlで「price.phtml」を検索すると、list.phtmlを含むブロックの子ブロックになります。
シャシッシュ

回答:


12

製品価格表示

メソッドgetPriceHtml()はブロッククラスで定義されMage_Catalog_Block_Product_Abstractます。

このメソッドは、製品タイプに依存する価格レンダラーを使用します。

$type_id = $product->getTypeId(); // e.g. simple, configurable, bundle, grouped, ...
$this->_preparePriceRenderer($type_id)

価格レンダラーは、テンプレートが関連付けられたブロックです。どちらも製品タイプに依存します。

指定した製品タイプにブロックまたはテンプレートが定義されていない場合、デフォルトでcatalog/product_priceブロックとcatalog/product/price.phtmlテンプレートが使用されます。

製品タイプの価格レンダラーとテンプレートはどこで定義されていますか?

通常、価格ブロックとレンダラーはレイアウトXMLを使用して指定されるため、新しい製品タイプを追加するモジュールは独自のレンダラーも簡単に追加できます。例えば。バンドルされた製品は、bundle.xmlレイアウトファイルに次のように価格レンダラーを追加します。

<default>
    <reference name="catalog_product_price_template">
        <action method="addPriceBlockType">
            <type>bundle</type>
            <block>bundle/catalog_product_price</block>
            <template>bundle/catalog/product/price.phtml</template>
        </action>
    </reference>
</default>

カスタム価格テンプレートまたはレンダラー

同じメカニズムを使用して、デフォルトのレンダラーをオーバーライドすることもできます。テンプレートを変更するだけで、デフォルトの価格ブロックタイプを保持する場合addPriceBlockTypeは、デフォルトブロック(上記を参照)とテンプレートを使用してレイアウトファイルを呼び出します。

価格ブロックのレンダリング

価格ブロックを実際にレンダリングするコードは次のようになります。

$this->_preparePriceRenderer($type_id)
    ->setProduct($product)
    ->setDisplayMinimalPrice($displayMinimalPrice)
    ->setIdSuffix($idSuffix)
    ->toHtml();

変数は、オプションの引数にしている方法。$displayMinimalPrice$idSuffixgetPriceHtml

public function getPriceHtml($product, $displayMinimalPrice = false, $idSuffix = '')

$idSuffixCSSのID完了するために、価格のテンプレートで使用され<span>、たとえば、実際の価格を囲むタグを:

<span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">


スーパー属性の価格設定を取得したい場合は、単に<?php echo $ this-> getPriceHtml($ _ product);を使用します。?>または価格設定の種類を指定する必要がありますか?ティアード?
エルバサンドバル

コレント。このメソッドは製品タイプを決定し、それに応じて価格を表示します。
ヴィナイ

こんにちは@Vinai私はそれをやってみましたが、価格は固定されたままです。異なる価格の色を選択しても変わりません。最高価格は変わりますが、カートに追加する近くの価格は変わりません。こちらをご覧くださいjennyyootest.com/index.php/adelle.html
エルヴァサンドバル

両方の価格を変更するには、JavaScriptを調整する必要があります。
ヴィナイ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.