カスタム属性を顧客に追加する


64

顧客または管理者がプログラムでのみ編集できない属性を顧客レコードに追加する簡単な方法が必要です。基本的に、Magentoと組み合わせたExpressionEngineサイトがあります。

Webサービスを介して認証し、認証から取得したJSONを顧客のレコードに保存し、ログインするたびに更新したいと考えています。

チェックアウトプロセスで配送先住所などの情報を変更する場合も、データを変更する必要があります。その後、現在各注文で行っているように、データをWebサービスに送り返します。

MageWorxのカスタムオプション拡張機能を使用してカスタム属性を使用して各製品にJSONを格納するようになったため、これは困難ですか?

http://www.silksoftware.com/magento-module-creator/の Online Module Creatorを使用しましたが、モジュールのインストール後に値を変更または取得する方法がわかりません。

これを行うための拡張機能の作成方法はどこで学べますか?



この属性値を「customer_entity」データベーステーブルに保存する場合はどうすればよいですか?@Marius
カズムNoorani

1
@KazimNoorani customer_entityテーブルに値を直接保存する場合は、テーブルに列を追加する必要があり、属性を追加するスクリプト(以下の回答を参照)でタイプをvarchartoに置き換えstaticます。
マリウス

@Marius customer_entityテーブルに列を追加しました。そして、私の属性は「select」タイプです。customer_entityテーブルのこの「custom_column」に属性値を直接保存したい。どうやってするか?
カジムヌーラニ

1
メインテーブルにデータを保存する場合でも、静的型の属性が必要です。
マリウス

回答:


68

/app/code/local/Your/Customattribute/sql/your_customattribute_setup/install-0.1.0.php

<?php
$installer = $this;

$installer->startSetup();

$setup = new Mage_Eav_Model_Entity_Setup('core_setup');

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

$setup->addAttribute("customer", "customattribute",  array(
    "type"     => "varchar",
    "backend"  => "",
    "label"    => "Custom Attribute",
    "input"    => "text",
    "source"   => "",
    "visible"  => true,
    "required" => false,
    "default" => "",
    "frontend" => "",
    "unique"     => false,
    "note"       => "Custom Attribute"
));

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

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

$used_in_forms=array();

$used_in_forms[]="adminhtml_customer";
//$used_in_forms[]="checkout_register";
//$used_in_forms[]="customer_account_create";
//$used_in_forms[]="customer_account_edit";
//$used_in_forms[]="adminhtml_checkout";
        $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", 1)
                ->setData("sort_order", 100)
                ;
        $attribute->save();



$installer->endSetup();

/app/code/local/Your/Customattribute/etc/config.xml

 <?xml version="1.0"?>
    <config>
        <modules>
            <Your_Customattribute>
                <version>0.1.0</version>
            </Your_Customattribute>
        </modules>
        <global>

            <resources>
                <Your_Customattribute_setup>
                    <setup>
                        <module>Your_Customattribute</module>
                        <class>Mage_Customer_Model_Entity_Setup</class>
                    </setup>
                    <connection>
                        <use>core_setup</use>
                    </connection>
                </Your_Customattribute_setup>
                <Your_Customattribute_write>
                    <connection>
                        <use>core_write</use>
                    </connection>
                </Your_Customattribute_write>
                <Your_Customattribute_read>
                    <connection>
                        <use>core_read</use>
                    </connection>
                </Your_Customattribute_read>
            </resources>
        </global>

    </config>

app / etc / modules / Your_Customattribute.xml

  <?xml version="1.0"?>
    <config>
        <modules>
            <Your_Customattribute>
                <active>true</active>
                <codePool>local</codePool>
                <version>0.1.0</version>
            </Your_Customattribute>
        </modules>
    </config>

次に、取得または編集するには、次を使用します。

$customer = Mage::getModel('customer/customer')->load($custid);
$customer->getCustomattribute();
$customer->setCustomattribute($yourjson);

ログインイベントのイベントオブザーバーを作成する必要があります。ここで回答します。ログインに成功した後、オブザーバーから顧客データを取得するにはどうすればよいですか?

また、アカウントmgmtで住所を変更する場合のcustomer_save_afterのオブザーバー、および見積り用のオブザーバーは、目的に応じて異なる場所にある可能性があります。


customer_band_skuとは何ですか?
MB34 14年

申し訳ありませんが、それは私が残り物を作成したものでした。
willboudle

では、データを設定するためにsetCustomAttribute()はどのように機能しますか?
MB34 14年

ユーザーがログインしたときにデータを設定する方法の例はありますか?
MB34 14

1
good..couldワーキングあなたはまた、管理パネル+顧客のグリッドでその属性を表示する方法を教えて
aravind

9

クラスをオーバーライドし、データをWebサービスに渡すイベントにフックするカスタムモジュールとして自分で作成する必要があるカスタム機能がたくさんあります。属性に関する限り、カスタムモジュールを作成config.xmlし、上記のチュートリアルのようなモジュールでセットアップリソースを定義すると、インストールスクリプトで次のようなことができます。

[module_path] / sql / [resource_node_defined_in_config_xml] / mysql4-install- [module_version_number] .php

$installer = $this;

$installer->startSetup ();

$setup = Mage::getModel ( 'customer/entity_setup' , 'core_setup' );

    //add budget
    $setup->addAttribute('customer', 'budget', array(
        'type' => 'decimal',
        'input' => 'text',
        'label' => 'Budget',
        'global' => 1,
        'visible' => 1,
        'required' => 0,
        'user_defined' => 0,
        'default' => '',
        'visible_on_front' => 1,
        'source' =>   NULL,
        'comment' => 'This is a budget'
    ));

$installer->endSetup ();

user_definedsystem設定されている場合、属性を属性にします0。これにより、管理者から削除する機能が無効になります。


0

多くのコアデバッグの後、magentoはファイルがdata / Companyname_Modulname_setup /またはsql / Companyname_Modulname_setup /にあることを期待していることがわかりました。

そして、それは命名する必要があるmysql4-data-upgrade-OLDVERSION-NEWVERSION.phpなどmysql4-data-upgrade-0.1.0-0.1.0.phpの代わりに、mysql4-install-0.1.0.php

少なくともMagento 1.9.3で

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.