我正在为客户建立一个Magento商店,并希望为所有作为下拉列表的产品添加属性。与“制造商”属性一样。
但是,我不想手动输入属性的值列表,而是希望从外部站点填充值。因此,每次创建新产品或编辑现有产品时,下拉列表都会填充从远程站点检索到的最新值列表。在创建属性期间,不应仅提取一次列表,而是每次创建或编辑产品时。
例如,假设您可以通过远程站点的curl获取所有制造商的列表。此列表中的名称偶尔会被修改或添加,但ID保持不变,因此应在幕后使用。您如何预先填写制造商下拉列表的值?
我知道如何创建基本的自定义扩展,但扩展adminhtml后端对我来说是新的东西。
感谢任何帮助。
答案 0 :(得分:10)
Magento产品属性非常灵活,但每个产品具有动态值意味着每个产品需要一个属性,这没有多大意义所以我假设这些属性值在您的商店中的产品之间共享一些共同点所以你将拥有有限数量的属性(或一个?)。对于每个此类属性,您应事先为其创建属性和后端模型,然后使用cron作业或事件更新API中的属性值选项,并在数据库或其他方法中本地缓存它们。您可以在模块安装程序中添加属性,如下所示:
$installer->addAttribute('catalog_product', 'my_attr_code', array(
'label' => 'Attribute Name',
'required' => false,
'input' => 'select',
'source' => 'namespace/source',
'default' => 'none',
'position' => 1,
'sort_order' => 3,
));
或者为eav_attribute
表滚动自己的SQL插入语句。确保将新属性分配给后端中设置的属性,以便它可以与您的产品一起使用。然后在My_Namespace_Model_Source
创建一个扩展Mage_Eav_Model_Entity_Attribute_Source_Table
的模型(假设您需要为属性值选择输入)并至少实现以下方法:
getAllOptions()
getOptionText($value)
因此,这些将从本地缓存的动态选项中拉出来,并且在大多数情况下,您的新属性的行为与Magento中的任何其他属性相同。请务必使用智能缓存,因为这些方法可能会在一次页面加载中多次出现。您可以观察到在显示产品创建或编辑页面之前调用的事件,否则只需覆盖类或控制器或使用Magento cron任务。
编辑:你也可以使用现有的Magento属性模型并通过现有的API创建你的选项值,但我认为要执行同步或由于某些其他原因你可能需要一些额外的元数据,在这种情况下你需要有一个自定义后端模型。
答案 1 :(得分:4)
我想这不是一个好的答案,但是,我会首先添加一个属性,然后对其进行反向工程以查看它是如何填充的。
然后在admin的产品显示页面中,我将覆盖productController的编辑和新操作,使用curl为该属性加载值(您可以在eav_attribute表中查找属性的id)
然后,您可以将其打包为自定义扩展,因此您不必直接编辑核心代码。祝你好运!
答案 2 :(得分:4)
您需要查找Magento事件调度员。
基本上,每次发生事件 - 更新产品,提交订单,删除某些内容等 - 都会通过系统发送消息。可以捕获这些消息,然后可以触发您创建的方法。要实现您想要的功能,您需要捕获在创建和更新产品时触发的事件,并使其从一个自定义模块运行方法。然后,此方法将从远程站点获取值并使用它更新产品。
快速搜索Google后,我发现了以下文章:
http://blog.baobaz.com/en/tag/magento-events
通过查看相应的模块代码,您可以找到触发的Magento事件。