我的情况是客户希望将特价四舍五入到最接近的整数(例如:1922.25 => 1922.00
,1256.85 => 1257.00
)
这应仅适用于Special prices
客户说,如果产品没有特殊价格,价格应该按原样显示。
请注意,这不仅适用于显示。此规则适用于任何地方,甚至是发票。那么有没有办法轻松地做到这一点,或者我们应该只修改核心文件?
修改
如果我们修改像Product.php或Price.php这样的核心框架文件,它们会被更新覆盖吗?所以这应该是一种安全的方式。
答案 0 :(得分:2)
这很简单。
只需观察catalog_product_load_after事件,并用舍入值覆盖special_price。
为您的模块创建一个引导程序文件:
应用程序的/ etc /模块/ Danslo_RoundSpecialPrice.xml:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Danslo_RoundSpecialPrice>
<active>true</active>
<codePool>local</codePool>
<depends>
<Mage_Catalog />
</depends>
</Danslo_RoundSpecialPrice>
</modules>
</config>
指定我们要观察产品加载事件:
应用程序/代码/本地/ Danslo / RoundSpecialPrice的/ etc / config.xml中:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<global>
<models>
<roundspecialprice>
<class>Danslo_RoundSpecialPrice_Model</class>
</roundspecialprice>
</models>
<events>
<catalog_product_load_after>
<observers>
<round_special_price>
<class>roundspecialprice/observer</class>
<type>singleton</type>
<method>roundSpecialPrice</method>
</round_special_price>
</observers>
</catalog_product_load_after>
<catalog_product_collection_load_after>
<observers>
<round_special_price>
<class>roundspecialprice/observer</class>
<type>singleton</type>
<method>roundSpecialPriceInCollection</method>
</round_special_price>
</observers>
</catalog_product_collection_load_after>
</events>
</global>
</config>
然后写下你的观察者实现:
应用程序/代码/本地/ Danslo / RoundSpecialPrice /型号/ Observer.php:
class Danslo_RoundSpecialPrice_Model_Observer
{
public function roundSpecialPrice($observer)
{
$product = $observer->getProduct();
if ($product->getSpecialPrice()) {
$product->setSpecialPrice(round($product->getSpecialPrice()));
}
}
public function roundSpecialPriceInCollection($observer)
{
foreach ($observer->getCollection() as $product) {
if ($product->getSpecialPrice()) {
$product->setSpecialPrice(round($product->getSpecialPrice()));
}
}
}
}
答案 1 :(得分:-2)
在PHP中:
if (special price)
price = round(price);
您使用的是哪个数据库?也许您可以在数据库级别执行此操作并保持应用程序不变。例如,如果使用Firebird,则可以使用如下定义的计算字段:
alter table prices
add customer_price
computed by (
case when special_price
then round(price,0)
else price
end)