そのため、ユーザーがログインしていないときに価格を非表示にするMagentoモジュールに取り組んできました.@AlanStormのおかげで機能しましたが、最善のアプローチをとっていることを確認したいだけです.
私がしたことは、*catalog_product_price_template* ブロックに別のテンプレートを設定し、そこからすべてのロジックを実行したことです
<?php $_message = Mage::getStoreConfig('catalog/pricehideconfig/title');
$_enabled = Mage::getStoreConfig('catalog/pricehideconfig/active');
$_current_template = Mage::getBaseDir('design')
. '/frontend/'
. Mage::getSingleton('core/design_package')->getPackageName() . '/'
. Mage::getSingleton('core/design_package')->getTheme('frontend') .'/'
. 'template/catalog/product/price.phtml';
$_default_template = Mage::getBaseDir('design') . '/frontend/base/default/template/catalog/product/price.phtml';
?>
<p>
<?php if ( $_enabled && !($this->helper('customer')->isLoggedIn()) ) { ?>
<?php echo $_message; ?>
<?php } else {
if (file_exists($_current_template)){
include $_current_template;
} else{
include $_default_template;
}
} ?>
</p>
しかし、2つの部分は本当に不自然に思えます
価格の「元の」またはデフォルトのテンプレートコードを呼び出すことは正しくないと感じます.Magentoはこれを行うための機能を提供し、テンプレート内のデフォルトのテンプレートを呼び出し、テンプレートが現在のパッケージに存在するかどうかを確認してからデフォルトに戻します.ない場合は?
テンプレートはプレゼンテーションのみに使用する必要があると思うので、代わりに変数の割り当てをブロックに移動する必要がありますが、テンプレートを設定しているだけで *Mage_Catalog_Block_Product_Price_Template* を拡張していないため、実際にはできません。