Menambahkan atribut khusus ke Pelanggan

64

Kami membutuhkan cara sederhana untuk menambahkan atribut ke catatan pelanggan yang tidak dapat diedit oleh pelanggan atau admin, hanya secara terprogram. Pada dasarnya, kami memiliki situs ExpressionEngine yang digabungkan dengan Magento.

Kami mengautentikasi melalui layanan web dan ingin menyimpan beberapa JSON yang kami dapatkan dari otentikasi ke dalam catatan pelanggan dan memperbaruinya setiap kali mereka masuk.

Kami juga ingin data diubah jika mereka mengubah informasi dalam proses checkout, seperti alamat pengiriman. Kami kemudian akan mengirim data kembali ke layanan web kami karena saat ini kami melakukannya dengan setiap pesanan.

Apakah ini sulit dilakukan karena kami sekarang menyimpan beberapa JSON pada setiap produk menggunakan atribut khusus dengan ekstensi Opsi Kustom MageWorx?

Saya menggunakan Online Module Creator di sini http://www.silksoftware.com/magento-module-creator/ tetapi saya tidak yakin bagaimana memodifikasi atau mengambil nilai begitu modul diinstal.

Di mana saya bisa belajar cara menulis ekstensi untuk melakukan ini?

MB34
sumber
Bagaimana caranya jika saya ingin menyimpan nilai atribut ini ke dalam tabel basis data 'customer_entity'? @Marius
Kazim Noorani
1
@KazimNoorani Jika Anda ingin menyimpan nilai secara langsung dalam customer_entitytabel, Anda perlu menambahkan kolom ke tabel dan dalam skrip yang menambahkan atribut (lihat jawaban saya di bawah) ganti tipe dari varcharke static.
Marius
@Marius saya sudah menambahkan kolom dalam customer_entitytabel. Dan atribut saya adalah tipe 'pilih'. Saya ingin menyimpan nilai atribut saya langsung di 'custom_column' ini dalam customer_entitytabel. Bagaimana cara melakukannya?
Kazim Noorani
1
Bahkan jika Anda ingin menyimpan data di tabel utama Anda masih memerlukan atribut dengan tipe statis.
Marius

Jawaban:

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>

Kemudian untuk mengambil atau mengedit Anda menggunakan:

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

Anda harus membuat pengamat acara untuk acara masuk, jawab di sini: Bagaimana saya bisa mendapatkan data pelanggan dari pengamat setelah berhasil masuk?

dan juga pengamat yang mungkin untuk customer_save_after jika mereka mengubah alamat mereka di akun mgmt, dan satu untuk kuotasi, yang bisa berada di tempat yang berbeda tergantung pada apa yang Anda tuju.

willboudle
sumber
Apa itu customer_band_sku?
MB34
Maaf, itu yang saya buat sisa.
willboudle
Jadi, bagaimana setCustomAttribute () bekerja untuk mengatur data?
MB34
Apakah Anda memiliki contoh cara SET data saat pengguna masuk?
MB34
1
Bekerja dengan baik..bisakah Anda juga memberi tahu cara menunjukkan atribut itu di panel admin + kisi pelanggan
aravind
9

Ada banyak fungsionalitas khusus yang harus Anda buat sendiri sebagai modul penimpaan modul khusus , dan menghubungkan ke acara di mana Anda ingin data diteruskan ke layanan web Anda. Sejauh atribut berjalan, ketika Anda membuat modul khusus Anda dan menentukan sumber daya pengaturan untuk itu dalam modul config.xmlseperti pada tutorial di atas, maka dalam skrip instalasi Anda, Anda dapat melakukan sesuatu seperti ini:

[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_definedmenjadikan atribut sebagai systematribut jika disetel ke 0, yang menonaktifkan kemampuan untuk menghapusnya dari admin.

russjman
sumber
0

Setelah banyak debugging inti saya menemukan bahwa magento mengharapkan file berada di data / Companyname_Modulname_setup / atau di sql / Companyname_Modulname_setup / .

Dan itu harus dinamai mysql4-data-upgrade-OLDVERSION-NEWVERSION.phpmisalnya mysql4-data-upgrade-0.1.0-0.1.0.phpbukanmysql4-install-0.1.0.php

Setidaknya di Magento 1.9.3

Hitam
sumber