最好在Magento模板中调用模板

时间:2012-09-07 21:58:08

标签: magento

所以我一直在研究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 *

1 个答案:

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

由于