製品価格表示
メソッド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
$idSuffix
getPriceHtml
public function getPriceHtml($product, $displayMinimalPrice = false, $idSuffix = '')
$idSuffix
CSSのID完了するために、価格のテンプレートで使用され<span>
、たとえば、実際の価格を囲むタグを:
<span class="price" id="price-excluding-tax-<?php echo $_id ?><?php echo $this->getIdSuffix() ?>">