将值存储在Magento属性中


store values inside Magento attributes

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

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

任何帮助不胜感激。

如果我正确理解您的问题,您可以大概使用某些Magento对象的afterLoad事件。这将适用于Magento中的大多数模型。

前言

一般来说,Magento中使用的大多数模型(即核心库中的产品,订单等以及您将在具有数据库访问权限的自定义模块中定义的每个模型(扩展了类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或创建占位符属性,这些属性在每次加载模型时填充,然后保存。

对于discount_amountdiscount_percentage的属性,我将使用相同的策略:

  1. 加载模型
  2. 计算dicount_amountdiscount_percentage _afterLoad并将其存储在模型上
  3. 使用模型。

补遗

如果你是Magento的新手,并且不知道如何创建新模块,你可以从 http://www.magentocommerce.com/wiki/5_-_modules_and_development/0_-_module_development_in_magento/custom_module_with_custom_database_table 开始(虽然它有点过时了(或环顾堆栈溢出。

LG,

祝你好运,

弗洛