我正在设置一个 magento 提要,但我卡住了,因为我需要系统自动计算最后几个属性的值。
如何让 magento 创建一个具有 MAX 销售价格、MAX 标价和评级的属性,我还需要 2 个属性 1 用于折扣金额,最后一个用于折扣百分比。
任何帮助表示赞赏。
我正在设置一个 magento 提要,但我卡住了,因为我需要系统自动计算最后几个属性的值。
如何让 magento 创建一个具有 MAX 销售价格、MAX 标价和评级的属性,我还需要 2 个属性 1 用于折扣金额,最后一个用于折扣百分比。
任何帮助表示赞赏。
如果我正确理解您的问题,您可能会使用afterLoad
一些 Magento 对象的事件。这适用于 Magento 中的大多数模型。
一般来说,Magento 中使用的大多数模型(例如,核心库中的产品、订单等,以及您将在具有 db 访问权限的自定义模块中定义的每个模型)都扩展了类Mage_Core_Model_Abstract
,它提供了某些“事件”-基于的方法。
这些方法是_afterDelete
、_afterDeleteCommit
、_afterLoad
、_afterSave
、_afterSavecommit
、_beforeLoad
和_beforeSave
(_beforeDelete
在 Magento >1.4.2.0 中)。
我假设,您希望在产品上具有自动计算的属性。这里的第一步是创建一个新的自定义模块,它会覆盖 Magento 产品的核心模型。在新创建的模型中,您可以使用以下条目./app/code/local/YourNamespace/YourModule/etc/config.xml
:
[...]
<global>
[...]
<models>
<catalog>
<rewrite>
<product>YourNamespace_YourModule_Model_Product</product>
</rewrite>
</catalog>
</models>
[...]
<global>
[...]
然后,您可以覆盖Product
模型,如名为的文件中所示./app/code/local/YourNamespace/YourModule/Model/Product.php
:
<?php
class YourNamespace_YourModule_Model_Product extends Mage_Catalog_Model_Product
{
protected function _afterLoad()
{
parent::_afterLoad();
//your voodoo goes here.
$my_awesome_calculated_value = $this->getData('my_awesome_float_attribute') / 2;
$this->setData('my_awesome_calculated_value', $my_awesome_calculated_value);
}
}
有了这个,只要你加载了一个模型,你就有机会以你能想到的任何方式使用该计算值。请记住,每次加载产品时都会执行此代码,这可能非常频繁(如果它是产品,那就是),所以不要太鲁莽。
另请记住,在您的代码执行完成后,该值将丢失,因为该值仅在模型“存在”时才存在。如果要存储它,还可以覆盖_beforeSave
或创建占位符属性,每次加载模型时都会填充这些属性,然后再保存。
对于 fordiscount_amount
和discount_percentage
i 的属性,我会使用相同的策略:
dicount_amount
and discount_percentage
in_afterLoad
并将其存储在模型中如果您是 Magento 新手并且不明确知道如何创建新模块,您可以从http://www.magentocommerce.com/wiki/5_-_modules_and_development/0_-_module_development_in_magento/custom_module_with_custom_database_table开始(虽然它有点过时) 或查看stackoverflow。
lg,
还有祝你好运,
弗洛