Magento:如何预填充产品的下拉属性值

Mar*_*els 6 php magento drop-down-menu

我正在为客户建立一个Magento商店,并希望为所有作为下拉列表的产品添加属性.就像'制造商'属性一样.

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

例如,假设您可以通过远程站点的curl获取所有制造商的列表.此列表中的名称偶尔会被修改或添加,但ID保持不变,因此应在幕后使用.您如何预先填写制造商下拉列表的值?

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

任何帮助表示赞赏.

Col*_*inM 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,
));
Run Code Online (Sandbox Code Playgroud)

或者为eav_attribute表滚动自己的SQL插入语句.确保将新属性分配给后端中设置的属性,以便它可以与您的产品一起使用.然后创建一个My_Namespace_Model_Source扩展的模型Mage_Eav_Model_Entity_Attribute_Source_Table(假设您需要为属性值选择一个输入)并至少实现以下方法:

getAllOptions()
getOptionText($value)
Run Code Online (Sandbox Code Playgroud)

因此,这些将从本地缓存的动态选项中获取,并且在大多数情况下,您的新属性将与Magento中的任何其他属性一样.请务必使用智能缓存,因为这些方法可能会在一次页面加载中多次出现.您可以观察到在显示产品创建或编辑页面之前调用的事件,否则只需覆盖类或控制器或使用Magento cron任务.

编辑:您还可以使用现有的Magento属性模型并通过现有API创建选项值,但我认为执行同步或由于某些其他原因您可能需要一些额外的元数据,在这种情况下您将需要一个自定义后端模型.