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>

しかし、2つの部分は本当に不自然に思えます

  1. 価格の「元の」またはデフォルトのテンプレートコードを呼び出すことは正しくないと感じます.Magentoはこれを行うための機能を提供し、テンプレート内のデフォルトのテンプレートを呼び出し、テンプレートが現在のパッケージに存在するかどうかを確認してからデフォルトに戻します.ない場合は?

  2. テンプレートはプレゼンテーションのみに使用する必要があると思うので、代わりに変数の割り当てをブロックに移動する必要がありますが、テンプレートを設定しているだけで *Mage_Catalog_Block_Product_Price_Template* を拡張していないため、実際にはできません。

4

1 に答える 1

2

I don't really understand the code above !!

if you want to hide price from non-logged in customers the easiest and best way i have used is :

The Module will be Only one Block and the config.xml

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

This works perfectly without adding more codes to view/template/layout !

If you still want to set Template you can do it also as :

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

Thanks

于 2012-09-09T01:21:52.923 に答える