2015-04-23 68 views
0

我正在使用magento API,并需要为不同的商家视图创建下拉选项。Magento API:为商店视图设置下拉属性选项

我发现一个函数来创建默认storeview下拉选项:

public function addAttributeOption($arg_attribute, $arg_value) 
{ 
    $attribute_model = Mage::getModel('eav/entity_attribute'); 
    $attribute_options_model= Mage::getModel('eav/entity_attribute_source_table'); 
    $attribute_code = $attribute_model->getIdByCode('catalog_product', $arg_attribute); 
    $attribute = $attribute_model->load($attribute_code); 
    $attribute_table = $attribute_options_model->setAttribute($attribute); 
    $options = $attribute_options_model->getAllOptions(false); 
    $value['option'] = array($arg_value,$arg_value); 
    $result = array('value' => $value); 
    $attribute->setData('option',$result); 
    $attribute->save(); 
} 

此功能工作正常,我可以添加默认storeview新attribut值。

例子:

我有属性“mycolor”,并呼吁像

addAttributeOption("mycolor", "black") 

功能现在我有一个德国的店storeview,喜欢设置德语色彩。我需要这样的东西

addAttributeOption(“mycolor”,“黑”,“施瓦茨”,$ storeview)

来设定storeview对施瓦茨的颜色选项,其中默认值的颜色为黑色。

有没有人有一个想法我该怎么做?

问候

+0

好了,当没有办法,我将通过MySQL查询解决。 – dermold

回答

1

我想你alreay找到你的解决方案,但也许我可以帮助别人谁是新的Magento像我。今天,我必须找到一种方法,即将外部产品管理系统的属性(仅限于产品属性)导入运行Magento的多个商店视图。我不知道提问者的addAttributeOption函数来自哪里,但Magento安装程序脚本提供了它自己的addAttributeOption()。所以,我接过来一看进入Setup.php其中Magento的addAttributeOption()的定义是:

{你的Magento路径} /app/code/core/Mage/Eav/Model/Entity/Setup.php

现在,在我正在使用(1.9.1.0)的Magento版本中,addAttributeOption()需要一个参数,一个名为$ option的数组。它的结构如下所示:

Array (
    'attribute_id' => '{attributeId}', 
    'value'   => array(
     '{optionId}' => array(

      '{storeId}' => '{labelName}', 

     ), 
    ), 
    'delete'  => array(
     //... 
    ), 
    'order'   => array(
     //... 
    ) 
); 

正如你所看到的,“价值”预计一个数组,数组的关键决定STOREID。在大多数addAttributeOption() - 我在网上发现的介绍中,storeID被硬编码为0,没有进一步解释 - 0使其成为所需的默认管理员值。所以,很明显现在,对于StoreView相关的标签添加选项,我们只需要为每个StoreView添加额外的数组值是这样的:

Array (
    'attribute_id' => $attribute_id, 
    'value'   => array(
     'option1' => array(

      '0' => 'black',    // required admin value 
      '1' => 'Schwarz (RAL 9005)', // if storeId = 1 is German 
      '2' => 'Black (RAL 9005)', // if storeId = 2 is English 

     ), 
     'option2' => array(

      '0' => 'blue', 
      '1' => 'Blau (RAL 5015)', 
      '2' => 'Blue (RAL 5015)', 

     ), 
     // And so on... 
    ) 
); 

注:如果您选择的数组索引是一个数字addAttributeOption ()期望它是已经存在的Option的ID号。如果你想更新已经存在的选项,这很好,但这也意味着一个新选项不会是数字。因此我将它们命名为'option1'&'option2'。

你可以叫addAttributeOption()这样的:

Mage::app(); 
$installer = Mage::getResourceModel('catalog/setup','catalog_setup'); 
$installer->startSetup(); 

// ... 
// generate your Options-Array 
// I called it $newOptions 

$installer->addAttributeOption($newOptions); 

$installer->endSetup();