在Magento属性中存储值

时间:2012-05-16 05:03:14

标签: php magento attributes feed

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

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

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

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

前言

通常,Magento中使用的大多数模型(例如,核心库中的产品,订单等以及您将在具有db访问权限的自定义模块中定义的每个模型)都会扩展类Mage_Core_Model_Abstract ,它提供某些“基于事件”的方法。

这些方法包括_afterDelete_afterDeleteCommit_afterLoad_afterSave_afterSavecommit_beforeLoad_beforeSave和{{ 1}}(在Magento> 1.4.2.0中)。

覆盖模型

我认为,您希望在产品上具有自动校准属性。这里的第一步是创建一个新的自定义模块,它覆盖了Magento产品的核心模型。在新创建的模型中,您可以使用_beforeDelete中的以下条目:

./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); } } 或创建占位符属性,每次加载模型时填充这些属性,然后保存。

对于_beforeSavediscount_amount的属性,我会使用相同的策略:

  1. 加载模型
  2. 计算discount_percentage中的dicount_amountdiscount_percentage并将其存储在模型上
  3. 使用该模型。
  4. 附录

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

    LG,

    祝你好运,

    FLO