因此,我一直在研究一个 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>
然而,两部分似乎真的很不自然
调用'原始'或默认模板代码的价格感觉不对,Magento是否提供任何功能来做到这一点,在模板中调用默认模板,同时检查模板是否存在于当前包中,然后恢复为默认值如果没有?
我认为模板应该仅用于演示,因此应该将变量分配移到一个块中,但我不能这样做,因为我只是设置模板而不是扩展 *Mage_Catalog_Block_Product_Price_Template*