3

新しい製品の複数選択属性を作成する方法は次のとおりです。

$eav = new Mage_Catalog_Model_Resource_Setup('core_setup');

$eav->addAttribute(
    Mage_Catalog_Model_Product::ENTITY, 
    "product_country", 
    array(
        'label'                      => 'Country',
        'group'                      => 'General',
        'type'                       => 'text',
        'input'                      => 'multiselect',
        'global'                     => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_WEBSITE,
        'user_defined'               => true,
        'required'                   => true,
        'visible'                    => true,
        'source'                     => 'ns/some_source', // this source has the "UK" value
        'backend'                    => 'eav/entity_attribute_backend_array',
        'default'                    => 'UK',
    )
);

また、「はい/いいえ」の値を使用して試しました

"type" => "boolean" 

また

"type" => "select",
'source' => 'eav/entity_attribute_source_boolean'

機能的に同一です。

いずれの場合も、キーに値を指定すると、テーブル columndefaultが正しく設定されます。しかし、「はい/いいえ」属性を持っていても、編集ページでの入力に関する限り、何もしません。「いいえ」がまだ選択されており、「1」が「はい」にマッピングされているため、「はい」を期待していました。eav_attributedefault_value"default" => "1"

// Mage_Eav_Model_Entity_Attribute_Source_Boolean
$this->_options = array(
    array(
        'label' => Mage::helper('eav')->__('Yes'),
        'value' =>  1
    ),
    array(
        'label' => Mage::helper('eav')->__('No'),
        'value' =>  0
    ),
);

複数選択でも同じことが起こります。デフォルトではオプションは選択されていません。

私はアイデアがありません。属性のデフォルト値を設定していない場合、「デフォルト」列/キーの目的を誰かが知っていますか? 新規/編集の製品バックエンド ページで属性の値を自動的に選択するように設定するにはどうすればよいですか?

4

1 に答える 1

2

私もこの問題に遭遇しました。カスタムの {product, customer, address} 属性を作成し、エンティティを追加するときに問題があります。

Mage_Catalog_Model_Resource_Setup::_prepareValues では、この問題の原因となる「デフォルト」のエンティティ セットが定義されています。

これに対する最善の解決策は、属性の作成後に属性をロードし、デフォルト値を設定することです。

 $model = Mage::getModel('eav/entity_attribute')
     ->load($installer->getAttributeId(Mage_Catalog_Model_Product::ENTITY, 'product_country'));
 $model
     ->setDefaultValue(Mage::helper('eav')->__('Yes'))
     ->save();
于 2013-06-03T09:07:37.123 に答える