0

因此,我一直在研究一个 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>

然而,两部分似乎真的很不自然

  1. 调用'原始'或默认模板代码的价格感觉不对,Magento是否提供任何功能来做到这一点,在模板中调用默认模板,同时检查模板是否存在于当前包中,然后恢复为默认值如果没有?

  2. 我认为模板应该仅用于演示,因此应该将变量分配移到一个块中,但我不能这样做,因为我只是设置模板而不是扩展 *Mage_Catalog_Block_Product_Price_Template*

4

1 回答 1

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();
    }
}

谢谢

于 2012-09-09T01:21:52.923 回答