0

我正在设置一个 magento 提要,但我卡住了,因为我需要系统自动计算最后几个属性的值。

如何让 magento 创建一个具有 MAX 销售价格、MAX 标价和评级的属性,我还需要 2 个属性 1 用于折扣金额,最后一个用于折扣百分比。

任何帮助表示赞赏。

4

1 回答 1

0

如果我正确理解您的问题,您可能会使用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_amountdiscount_percentagei 的属性,我会使用相同的策略:

  1. 加载模型
  2. 计算dicount_amountand discount_percentagein_afterLoad并将其存储在模型中
  3. 与模型一起工作。

附录

如果您是 Magento 新手并且不明确知道如何创建新模块,您可以从http://www.magentocommerce.com/wiki/5_-_modules_and_development/0_-_module_development_in_magento/custom_module_with_custom_database_table开始(虽然它有点过时) 或查看stackoverflow。

lg,

还有祝你好运,

弗洛

于 2012-05-22T14:52:22.620 回答