web-dev-qa-db-ja.com

顧客エンティティへの属性の追加

私の現在の目標は、新しい顧客属性(intタイプ)を追加することです。これは、定義済みオプション(バックエンドで編集可能なエントリを含むモデルから読み込まれます)で選択として表示されます。 $installer->addAttribute()メソッドの適切な使用、特に正しいソースオプションの指定に苦労しています。他の問題は、新しい属性がeav_entity_attributeテーブルに保存されないことです

Magento CE 1.5.1.0を使用しています

37
Zifius

これは、intレンダラーを持つ基本的なtext属性のコードです。

_$installer = $this;
$installer->startSetup();

$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
$setup->addAttribute('customer', 'your_attribute_code_here', array(
    'input'         => 'text',
    'type'          => 'int',
    'label'         => 'Some textual description',
    'visible'       => 1,
    'required'      => 0,
    'user_defined' => 1,
));

$entityTypeId     = $setup->getEntityTypeId('customer');
$attributeSetId   = $setup->getDefaultAttributeSetId($entityTypeId);
$attributeGroupId = $setup->getDefaultAttributeGroupId($entityTypeId, $attributeSetId);

$setup->addAttributeToGroup(
 $entityTypeId,
 $attributeSetId,
 $attributeGroupId,
 'your_attribute_code_here',
 '999'  //sort_order
);

$oAttribute = Mage::getSingleton('eav/config')->getAttribute('customer', 'your_attribute_code_here');
$oAttribute->setData('used_in_forms', array('adminhtml_customer'));
$oAttribute->save();

$setup->endSetup();
_

属性を追加するための異常なステップはsetData('used_in_forms')です。これは顧客属性に固有のようです。それがないと、フィールドはレンダリングされません。確かにadminhtmlにはありません。 _customer_form_attribute_データベーステーブルで、この配列の有効なオプションを確認できます。

事前に定義されたオプションでselectを使用するという点では、これが必要です。

_$iAttributeId = $installer->getAttributeId($entityTypeId, 'your_attribute_code_here');
$aClasses = array('TV','DVD','Home Theatre','Air Conditioner','Stereo/Hifi','Game Console','Camcorder','VCR','Set Top Box','PVR');
$aOption = array();
$aOption['attribute_id'] = $iAttributeId;

for($iCount=0;$iCount<sizeof($aClasses);$iCount++){
    $aOption['value']['option'.$iCount][0] = $aClasses[$iCount];
}
$setup->addAttributeOption($aOption);
_

そして、ドロップダウンにカスタムソースを使用する ウォークスルー

お役に立てれば、
JD

70
Jonathan Day

@ Jonathan Day の答えは素晴らしく、私を大いに助けてくれました。ただし、setupクラスをMage_Customer_Model_Entity_Setupに設定している限り、Magentoはすべての作業を実行できます。

<!-- config.xml Example -->
<?xml version="1.0"?>
<config>
    <global>
        <resources>
            <acme_module_setup>
                <setup>
                    <module>Acme_Module</module>
                    <class>Mage_Customer_Model_Entity_Setup</class>
                </setup>
                <connection>
                    <use>core_setup</use>
                </connection>
            </acme_module_setup>
        </resources>
    </global>
</config>

そして、これはmysql4-install-X.X.X.phpファイルです:

<?php

$installer = $this;
/* @var $installer Mage_Customer_Model_Entity_Setup */

$installer->startSetup();

$installer->addAttribute(
    'customer',
    'acme_imported',
    array(
        'group'                => 'Default',
        'type'                 => 'int',
        'label'                => 'Imported into Acme',
        'input'                => 'select',
        'source'               => 'eav/entity_attribute_source_boolean',
        'global'               => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
        'required'             => 0,
        'default'              => 0,
        'visible_on_front'     => 1,
        'used_for_price_rules' => 0,
        'adminhtml_only'       => 1,
    )
);

$installer->endSetup();

上記のadminhtml_onlyは、すべてのused_in_formsロジックを処理します。また、groupを定義すると、属性グループに割り当てられます。

23
leek

次のスクリプトを使用して、カスタムモジュールmysqlセットアップファイルで顧客属性を追加しました。

$installer = $this;
$installer->startSetup();


$installer->addAttribute("customer", "yourattributename",  array(
    "type"     => "int",
    "backend"  => "",
    "label"    => "Bad Customer",
    "input"    => "select",
    "source"   => "eav/entity_attribute_source_boolean",
    "visible"  => true,
    "required" => false,
    "default" => "",
    "frontend" => "",
    "unique"     => false,
    "note"       => ""

    ));

        $attribute   = Mage::getSingleton("eav/config")->getAttribute("customer", "yourattributename");

顧客属性を使用する場所に使用される次のスクリプト

$used_in_forms=array();

$used_in_forms[]="adminhtml_customer";
        $attribute->setData("used_in_forms", $used_in_forms)
        ->setData("is_used_for_customer_segment", true)
        ->setData("is_system", 0)
        ->setData("is_user_defined", 1)
        ->setData("is_visible", 0)
        ->setData("sort_order", 100)
        ;
        $attribute->save();

$installer->endSetup();
4
Alexandar

alexとleekによって提供されるソリューションは両方とも私のために働いた。 AccountController.phpにセッター関数を追加するだけです

$customer->setProfession($this->getRequest()->getPost('profession')) 
                        ->save(); // Added for updating Profession

「職業」は私のカスタム属性でした。

0
Suman-PHP4U