2009-10-06 42 views
6

我正在为客户构建Magento商店,并且想要将所有产品的属性添加到下拉列表中。像'制造商'属性一样。Magento:如何预先填充产品的下拉属性值

但是,而不是手动输入属性的值列表我想要从外部站点填充值。因此,每次创建新产品或编辑现有产品时,下拉列表都会填入从远程站点检索到的最新值列表。在创建属性时不应该仅提取一次列表,而是每次创建或编辑产品时。

例如,假设您可以从远程站点通过curl获取所有制造商的列表。这个列表中的名字偶尔会被修改或添加,但是ID保持不变,所以它们应该在幕后使用。您如何预先填写制造商的下拉菜单的值?

我知道如何创建基本的自定义扩展,但扩展adminhtml后端对我来说是新东西。

任何帮助表示赞赏。

+0

接受答案? – ColinM 2014-07-15 20:33:10

+0

@ColinM哎呀。完成。 :) – 2014-07-16 08:02:17

回答

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, 
)); 

或者推出自己的SQL INSERT语句为eav_attribute表。确保将新属性分配给在后端设置的属性,以便它可用于您的产品。然后你在My_Namespace_Model_Source延伸Mage_Eav_Model_Entity_Attribute_Source_Table(假设你想为你的属性值的选择输入),并在最小实现下列方法创建一个模型:

getAllOptions() 
getOptionText($value) 

因此,这些将来自于本地缓存的动态选项拉和在大多数情况下,您的新属性的行为与Magento中的其他属性相同。请务必使用智能缓存,因为这些方法可能会在一次页面加载中多次触发。在产品创建或编辑页面显示之前,可能会出现一个您可以观察到的事件,否则只是覆盖类或控制器或使用Magento cron任务。

编辑:您也可以使用现有的Magento属性模型,并通过现有的API创建您的选项值,但我假设要执行同步或出于其他原因,您可能需要一些额外的元数据,一个自定义的后端模型。

4

我想不是一个好的答案,但是在这里,我会先添加一个属性,然后对其进行反向工程,以查看它是如何填充的。

然后在管理员的产品展示页面,我就重写ProductController的的编辑和新的行动,来加载使用curl该属性的值(你可以查找属性的ID在eav_attribute表)

然后,您可以将其打包为自定义扩展名,这样您就不需要直接编辑核心代码。祝你好运!

4

您需要查看Magento Event Dispatchers。

基本上,每次发生事件时 - 更新产品,提交订单,删除等等 - 都会通过系统发送消息。这些消息可以被捕获,然后可以触发你创建的方法。为了达到您想要的效果,您需要捕获在创建和更新产品时触发的事件,并从此自定义模块中运行方法。然后,该方法将从远程站点获取该值并使用该值更新产品。

快速谷歌搜索后,我发现下面的文章:

http://blog.baobaz.com/en/tag/magento-events

你可以找到Magento的事件被期待在适当的模块代码触发。

相关问题