การเพิ่มคุณสมบัติที่กำหนดเองให้กับลูกค้า


64

เราต้องการวิธีง่ายๆในการเพิ่มคุณสมบัติให้กับบันทึกลูกค้าที่ไม่สามารถแก้ไขได้โดยลูกค้าหรือผู้ดูแลระบบโดยทางโปรแกรมเท่านั้น โดยพื้นฐานแล้วเรามีเว็บไซต์ ExpressionEngine ควบคู่กับ Magento

เรารับรองความถูกต้องผ่านทางเว็บเซอร์วิซและต้องการเก็บ JSON บางส่วนที่เราได้รับกลับมาจากการรับรองความถูกต้องในบันทึกของลูกค้าและอัปเดตทุกครั้งที่เข้าสู่ระบบ

นอกจากนี้เรายังต้องการให้ข้อมูลแก้ไขหากพวกเขาเปลี่ยนข้อมูลในกระบวนการเช็คเอาต์เช่นที่อยู่จัดส่ง จากนั้นเราจะส่งข้อมูลกลับไปยังบริการเว็บของเราในขณะที่เราดำเนินการกับแต่ละคำสั่งซื้อ

เป็นเรื่องยากหรือไม่ที่เราจะจัดเก็บ JSON บางรายการในแต่ละผลิตภัณฑ์โดยใช้แอตทริบิวต์ที่กำหนดเองพร้อมกับส่วนขยาย Custom Options ของ MageWorx

ฉันใช้ Online Module Creator ที่นี่http://www.silksoftware.com/magento-module-creator/แต่ฉันไม่แน่ใจว่าจะแก้ไขหรือเรียกคืนค่าได้อย่างไรเมื่อติดตั้งโมดูลแล้ว

ฉันจะเรียนรู้วิธีเขียนส่วนขยายได้จากที่ใด



จะทำอย่างไรถ้าฉันต้องการบันทึกค่าคุณลักษณะนี้ลงในตารางฐานข้อมูล 'customer_entity'? @Marius
Kazim Noorani

1
@KazimNoorani หากคุณต้องการที่จะประหยัดค่าโดยตรงในcustomer_entityตารางที่คุณจำเป็นต้องเพิ่มคอลัมน์ในตารางและในสคริปต์ที่เพิ่มแอตทริบิวต์ (ดูคำตอบของฉันด้านล่าง) เปลี่ยนประเภทจากไปvarchar static
Marius

@Marius ฉันได้เพิ่มคอลัมน์ในcustomer_entityตารางแล้ว และแอตทริบิวต์ของฉันเป็นประเภท 'เลือก' ฉันต้องการบันทึกค่าคุณสมบัติของฉันโดยตรงที่ 'custom_column' ในcustomer_entityตารางนี้ ทำอย่างไร
Kazim Noorani

1
แม้ว่าคุณต้องการบันทึกข้อมูลในตารางหลักคุณยังคงต้องการแอตทริบิวต์ที่มีประเภทคงที่
Marius

คำตอบ:


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 / โมดูล / 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);

คุณจะต้องสร้างผู้สังเกตการณ์เหตุการณ์สำหรับกิจกรรมการเข้าสู่ระบบตอบที่นี่: ฉันจะรับข้อมูลลูกค้าจากผู้สังเกตการณ์หลังจากเข้าสู่ระบบที่ประสบความสำเร็จได้อย่างไร

และผู้สังเกตการณ์ที่เป็นไปได้สำหรับ customer_save_after ในกรณีที่พวกเขาแก้ไขที่อยู่ของพวกเขาในบัญชี mgmt และอีกอันสำหรับการอ้างอิงซึ่งอาจจะอยู่ในสถานที่ที่แตกต่างกันขึ้นอยู่กับสิ่งที่คุณจะ


customer_band_sku คืออะไร
MB34

ขออภัยนั่นเป็นสิ่งที่ฉันสร้างขึ้น
willboudle

ดังนั้น setCustomAttribute () จะทำงานอย่างไรเพื่อตั้งค่าข้อมูล
MB34

คุณมีตัวอย่างของวิธีการตั้งค่าข้อมูลเมื่อผู้ใช้เข้าสู่ระบบ?
MB34

1
ทำงาน good..could คุณยังบอกวิธีการแสดงแอตทริบิวต์ในแผง admin + ตารางลูกค้า
Aravind

9

มีฟังก์ชั่นที่กำหนดเองจำนวนมากที่คุณจะต้องสร้างด้วยตัวคุณเองเป็นโมดูลที่กำหนดเองแทนที่คลาสต่างๆ เท่าที่แอ็ตทริบิวต์ไปเมื่อคุณสร้างโมดูลที่กำหนดเองของคุณและกำหนดทรัพยากรการติดตั้งในโมดูล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_definedทำให้แอตทริบิวต์เป็นsystemแอตทริบิวต์หากตั้งค่าเป็น0ซึ่งจะปิดใช้งานความสามารถในการลบออกจากผู้ดูแลระบบ


0

หลังจากที่มากของการแก้จุดบกพร่องหลักผมพบว่าวีโอไอพีคาดว่าไฟล์ที่จะอยู่ในทั้งข้อมูล / 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.