覆盖价格模板 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 移至默认布局
- 更改每个模板以使用您的新助手,传递所需类型的参数
这是 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 是一种检查是否允许当前客户查看价格的方法,returns 一个布尔值。
我正在尝试根据客户是否登录来修改 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 移至默认布局
- 更改每个模板以使用您的新助手,传递所需类型的参数
这是 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 是一种检查是否允许当前客户查看价格的方法,returns 一个布尔值。