繁体   English   中英

覆盖价格模板Magento local.xml

[英]Override Price Template Magento local.xml

我正在尝试根据客户是否登录来修改price.phtml模板。我正在尝试在customer_logged_out句柄内使用local.xml。

<customer_logged_out>
    <reference name="catalog_product_price_template">
        <action method="addPriceBlockType"><type>simple</type><block>catalog/product_price</block><template>catalog/product/view/noprice.phtml</template></action>
        <action method="addPriceBlockType"><type>grouped</type><block>catalog/product_price</block><template>catalog/product/view/noprice.phtml</template></action>
        <action method="addPriceBlockType"><type>configurable</type><block>catalog/product_price</block><template>catalog/product/view/noprice.phtml</template></action>
        <action method="addPriceBlockType"><type>virtual</type><block>catalog/product_price</block><template>catalog/product/view/noprice.phtml</template></action>
        <action method="addPriceBlockType"><type>bundle</type><block>catalog/product_price</block><template>catalog/product/view/noprice.phtml</template></action>
        <action method="addPriceBlockType"><type>msrp</type><block>catalog/product_price</block><template>catalog/product/view/noprice.phtml</template></action>
        <action method="addPriceBlockType"><type>msrp_item</type><block>catalog/product_price</block><template>catalog/product/view/noprice.phtml</template></action>
        <action method="addPriceBlockType"><type>msrp_noform</type><block>catalog/product_price</block><template>catalog/product/view/noprice.phtml</template></action>
    </reference>
</customer_logged_out>

虽然这没有设置我想要的模板,但我确实知道它正在起作用。 我已将以下调试信息添加到

/app/code/core/Mage/Catalog/Block/Product/Price/Template.php

    public function addPriceBlockType($type, $block = '', $template = '')
    {
        Mage::log('Type: ' . $type . ', Block: ' . $block . ', Template: ' . $template, null, 'priceblock.log');
        if ($type) {
            $this->_priceBlockTypes[$type] = array(
                'block'     => $block,
                'template'  => $template
            );
        }

        Mage::log($this->_priceBlockTypes, null, 'priceblock.log');
        return $this;
    }

这将产生以下输出:

2015-12-14T16:07:59+00:00 DEBUG (7): Type: msrp, Block: catalog/product_price, Template: catalog/product/price_msrp.phtml
2015-12-14T16:07:59+00:00 DEBUG (7): Array
(
    [msrp] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/price_msrp.phtml
        )

)

2015-12-14T16:07:59+00:00 DEBUG (7): Type: msrp_item, Block: catalog/product_price, Template: catalog/product/price_msrp_item.phtml
2015-12-14T16:07:59+00:00 DEBUG (7): Array
(
    [msrp] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/price_msrp.phtml
        )

    [msrp_item] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/price_msrp_item.phtml
        )

)

2015-12-14T16:07:59+00:00 DEBUG (7): Type: msrp_noform, Block: catalog/product_price, Template: catalog/product/price_msrp_noform.phtml
2015-12-14T16:07:59+00:00 DEBUG (7): Array
(
    [msrp] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/price_msrp.phtml
        )

    [msrp_item] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/price_msrp_item.phtml
        )

    [msrp_noform] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/price_msrp_noform.phtml
        )

)

2015-12-14T16:07:59+00:00 DEBUG (7): Type: bundle, Block: bundle/catalog_product_price, Template: bundle/catalog/product/price.phtml
2015-12-14T16:07:59+00:00 DEBUG (7): Array
(
    [msrp] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/price_msrp.phtml
        )

    [msrp_item] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/price_msrp_item.phtml
        )

    [msrp_noform] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/price_msrp_noform.phtml
        )

    [bundle] => Array
        (
            [block] => bundle/catalog_product_price
            [template] => bundle/catalog/product/price.phtml
        )

)

2015-12-14T16:07:59+00:00 DEBUG (7): Type: msrp, Block: catalog/product_price, Template: catalog/product/price_msrp_item.phtml
2015-12-14T16:07:59+00:00 DEBUG (7): Array
(
    [msrp] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/price_msrp_item.phtml
        )

    [msrp_item] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/price_msrp_item.phtml
        )

    [msrp_noform] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/price_msrp_noform.phtml
        )

    [bundle] => Array
        (
            [block] => bundle/catalog_product_price
            [template] => bundle/catalog/product/price.phtml
        )

)

2015-12-14T16:07:59+00:00 DEBUG (7): Type: simple, Block: catalog/product_price, Template: catalog/product/view/noprice.phtml
2015-12-14T16:07:59+00:00 DEBUG (7): Array
(
    [msrp] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/price_msrp_item.phtml
        )

    [msrp_item] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/price_msrp_item.phtml
        )

    [msrp_noform] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/price_msrp_noform.phtml
        )

    [bundle] => Array
        (
            [block] => bundle/catalog_product_price
            [template] => bundle/catalog/product/price.phtml
        )

    [simple] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

)

2015-12-14T16:07:59+00:00 DEBUG (7): Type: grouped, Block: catalog/product_price, Template: catalog/product/view/noprice.phtml
2015-12-14T16:07:59+00:00 DEBUG (7): Array
(
    [msrp] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/price_msrp_item.phtml
        )

    [msrp_item] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/price_msrp_item.phtml
        )

    [msrp_noform] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/price_msrp_noform.phtml
        )

    [bundle] => Array
        (
            [block] => bundle/catalog_product_price
            [template] => bundle/catalog/product/price.phtml
        )

    [simple] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

    [grouped] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

)

2015-12-14T16:07:59+00:00 DEBUG (7): Type: configurable, Block: catalog/product_price, Template: catalog/product/view/noprice.phtml
2015-12-14T16:07:59+00:00 DEBUG (7): Array
(
    [msrp] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/price_msrp_item.phtml
        )

    [msrp_item] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/price_msrp_item.phtml
        )

    [msrp_noform] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/price_msrp_noform.phtml
        )

    [bundle] => Array
        (
            [block] => bundle/catalog_product_price
            [template] => bundle/catalog/product/price.phtml
        )

    [simple] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

    [grouped] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

    [configurable] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

)

2015-12-14T16:07:59+00:00 DEBUG (7): Type: virtual, Block: catalog/product_price, Template: catalog/product/view/noprice.phtml
2015-12-14T16:07:59+00:00 DEBUG (7): Array
(
    [msrp] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/price_msrp_item.phtml
        )

    [msrp_item] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/price_msrp_item.phtml
        )

    [msrp_noform] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/price_msrp_noform.phtml
        )

    [bundle] => Array
        (
            [block] => bundle/catalog_product_price
            [template] => bundle/catalog/product/price.phtml
        )

    [simple] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

    [grouped] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

    [configurable] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

    [virtual] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

)

2015-12-14T16:07:59+00:00 DEBUG (7): Type: bundle, Block: catalog/product_price, Template: catalog/product/view/noprice.phtml
2015-12-14T16:07:59+00:00 DEBUG (7): Array
(
    [msrp] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/price_msrp_item.phtml
        )

    [msrp_item] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/price_msrp_item.phtml
        )

    [msrp_noform] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/price_msrp_noform.phtml
        )

    [bundle] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

    [simple] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

    [grouped] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

    [configurable] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

    [virtual] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

)

2015-12-14T16:07:59+00:00 DEBUG (7): Type: msrp, Block: catalog/product_price, Template: catalog/product/view/noprice.phtml
2015-12-14T16:07:59+00:00 DEBUG (7): Array
(
    [msrp] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

    [msrp_item] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/price_msrp_item.phtml
        )

    [msrp_noform] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/price_msrp_noform.phtml
        )

    [bundle] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

    [simple] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

    [grouped] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

    [configurable] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

    [virtual] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

)

2015-12-14T16:07:59+00:00 DEBUG (7): Type: msrp_item, Block: catalog/product_price, Template: catalog/product/view/noprice.phtml
2015-12-14T16:07:59+00:00 DEBUG (7): Array
(
    [msrp] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

    [msrp_item] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

    [msrp_noform] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/price_msrp_noform.phtml
        )

    [bundle] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

    [simple] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

    [grouped] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

    [configurable] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

    [virtual] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

)

2015-12-14T16:07:59+00:00 DEBUG (7): Type: msrp_noform, Block: catalog/product_price, Template: catalog/product/view/noprice.phtml
2015-12-14T16:07:59+00:00 DEBUG (7): Array
(
    [msrp] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

    [msrp_item] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

    [msrp_noform] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

    [bundle] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

    [simple] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

    [grouped] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

    [configurable] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

    [virtual] => Array
        (
            [block] => catalog/product_price
            [template] => catalog/product/view/noprice.phtml
        )

)

需要注意的有趣的是,数组的最终状态具有我想要的每个模板,但是由于某些原因,它们没有被使用。

当我将价格更新xml从<customer_logged_out>移出到<default>将使用适当的模板,但是当然,无论用户状态如何,它都会使用新的模板文件。

TL; DR:如果用户登录,尝试更改价格模板,将更新xml放在<customer_logged_out>时没有预期的效果

在使用主句柄后,Magento会处理customer_logged_out和其他事件驱动的句柄。 基于此,我设计了以下解决方案:

  • 创建一个接受参数的助手(我称其为getPriceTemplate)
  • 将布局xml移至默认值
  • 更改每个模板以使用新的帮助程序,并以所需的类型传递arg

这是XML :(请注意助手)

<reference name="catalog_product_price_template">
    <action method="addPriceBlockType"><type>bundle</type><block>catalog/product_price</block><template helper="wholesale/getPriceTemplate" ><arg>bundle</arg></template></action>
    <action method="addPriceBlockType"><type>msrp</type><block>catalog/product_price</block><template helper="wholesale/getPriceTemplate" ><arg>msrp</arg></template></action>
    <action method="addPriceBlockType"><type>msrp_item</type><block>catalog/product_price</block><template helper="wholesale/getPriceTemplate" ><arg>msrp_item</arg></template></action>
    <action method="addPriceBlockType"><type>msrp_noform</type><block>catalog/product_price</block><template helper="wholesale/getPriceTemplate" ><arg>msrp_noform</arg></template></action>
</reference>

这是帮手:

<?php 
  protected $_noPriceTemplate = 'catalog/product/view/noprice.phtml';
  protected $_priceTemplateArray = array(
      'bundle' => 'bundle/catalog/product/price.phtml',
      'msrp' => 'catalog/product/price_msrp.phtml',
      'msrp_item' => 'catalog/product/price_msrp_item.phtml',
      'msrp_noform' => 'catalog/product/price_msrp_noform.phtml',
  );
...
public function getPriceTemplate($type = null) {
  if (!$this->isCustomerAllowed()) return $this->_noPriceTemplate;

  return $this->_priceTemplateArray[$type];

}

isCustomerAllowed是一种检查是否允许当前客户查看价格并返回布尔值的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM