所以我一直在研究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 *
答案 0 :(得分:2)
我真的不明白上面的代码!!
如果您想隐藏未登录客户的价格,我使用的最简单,最好的方式是:
模块将只有一个块和config.xml
扩展 - 重写类Mage_Catalog_Block_Product_Price
class Namespame_ModuleName_Block_Product_Price extends Mage_Catalog_Block_Product_Price
{
// and Override _toHtml Function to be
protected function _toHtml()
{
if(!$this->helper('customer')->isLoggedIn()){
$this->getProduct()->setCanShowPrice(false);
}
if (!$this->getProduct() || $this->getProduct()->getCanShowPrice() === false) {
return '';
}
return parent::_toHtml();
}
}
这可以很好地工作而无需向视图/模板/布局添加更多代码!
如果您仍想设置模板,您也可以这样做:
class Namespame_ModuleName_Block_Product_Price extends Mage_Catalog_Block_Product_Price
{
// and Override _toHtml Function to be
protected function _toHtml()
{
if(!$this->helper('customer')->isLoggedIn()){
$this->setTemplate('mymodule/price_template.phtml');
}
if (!$this->getProduct() || $this->getProduct()->getCanShowPrice() === false) {
return '';
}
return parent::_toHtml();
}
}
由于