Thêm thuộc tính tùy chỉnh cho khách hàng


64

Chúng tôi cần một cách đơn giản để thêm một thuộc tính vào hồ sơ khách hàng mà khách hàng hoặc quản trị viên không thể chỉnh sửa được, chỉ theo chương trình. Về cơ bản, chúng tôi có một trang ExpressionEngine kết hợp với Magento.

Chúng tôi xác thực qua dịch vụ web và muốn lưu trữ một số JSON mà chúng tôi lấy lại từ xác thực vào hồ sơ của khách hàng và cập nhật nó mỗi khi họ đăng nhập.

Chúng tôi cũng sẽ muốn dữ liệu được sửa đổi nếu họ thay đổi thông tin trong quy trình thanh toán, chẳng hạn như địa chỉ giao hàng. Sau đó, chúng tôi sẽ gửi dữ liệu trở lại dịch vụ web của chúng tôi vì chúng tôi hiện đang làm điều đó với mỗi đơn hàng.

Điều này có khó thực hiện không vì chúng tôi hiện đang lưu trữ một số JSON trên mỗi sản phẩm bằng cách sử dụng thuộc tính tùy chỉnh với tiện ích mở rộng Tùy chọn tùy chỉnh của MageWorx?

Tôi đã sử dụng Trình tạo mô-đun trực tuyến tại đây http://www.silksoftware.com/magento-module-creator/ nhưng không chắc chắn cách sửa đổi hoặc truy xuất giá trị sau khi mô-đun được cài đặt.

Tôi có thể học cách viết một phần mở rộng để làm điều này ở đâu?



Làm thế nào để làm gì nếu tôi muốn lưu giá trị thuộc tính này vào bảng cơ sở dữ liệu 'customer_entity'? @Marius
Kazim Noorani

1
@KazimNoorani Nếu bạn muốn lưu giá trị trực tiếp trong customer_entitybảng, bạn cần thêm cột vào bảng và trong tập lệnh thêm thuộc tính (xem câu trả lời của tôi bên dưới) thay thế loại từ varcharđến static.
Marius

@Marius Tôi đã thêm cột trong customer_entitybảng. Và thuộc tính của tôi thuộc loại 'chọn'. Tôi muốn lưu giá trị thuộc tính của mình trực tiếp tại 'custom_column' này trong customer_entitybảng. Làm thế nào để làm điều đó?
Kazim Noorani

1
Ngay cả khi bạn muốn lưu dữ liệu trong bảng chính, bạn vẫn cần một thuộc tính với kiểu tĩnh.
Marius

Câu trả lời:


68

/app/code/local/Your/Customattribution/sql/your_customattribution_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/Customattribution/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>

ứng dụng / etc / mô-đun / Your_Customattribution.xml

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

Sau đó, để lấy hoặc chỉnh sửa bạn sử dụng:

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

Bạn sẽ phải tạo trình quan sát sự kiện cho sự kiện đăng nhập, được trả lời tại đây: Làm thế nào tôi có thể lấy dữ liệu khách hàng từ người quan sát sau khi đăng nhập thành công?

và cũng có khả năng là người quan sát cho khách hàng_save_ sau đó trong trường hợp họ thay đổi địa chỉ của họ trong tài khoản mgmt và một cho báo giá, có thể ở những nơi khác nhau tùy thuộc vào những gì bạn sẽ làm.


Khách hàng_band_sku là gì?
MB34

Xin lỗi, đó là một cái tôi tạo ra còn sót lại.
willboudle

Vậy làm thế nào setCustomAttribution () hoạt động để thiết lập dữ liệu?
MB34

Bạn có một ví dụ về cách THIẾT LẬP dữ liệu khi người dùng đăng nhập không?
MB34

1
Hoạt động tốt..có thể bạn cũng cho biết cách hiển thị thuộc tính đó trong bảng quản trị + lưới khách hàng
aravind

9

Có rất nhiều chức năng tùy chỉnh bạn sẽ phải tự tạo ra khi mô-đun tùy chỉnh ghi đè các lớp và nối vào các sự kiện mà bạn muốn dữ liệu được chuyển đến dịch vụ web của mình. Theo như thuộc tính, khi bạn tạo mô-đun tùy chỉnh và xác định tài nguyên thiết lập cho nó trong mô-đun config.xmlgiống như trong hướng dẫn ở trên, thì trong tập lệnh cài đặt của bạn, bạn có thể làm một cái gì đó như thế này:

[module_path] / sql / [resource_node_dained_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_definedlàm cho thuộc tính trở thành một systemthuộc tính nếu được đặt thành 0, điều này vô hiệu hóa khả năng xóa nó khỏi quản trị viên.


0

Sau khi gỡ lỗi lõi, tôi phát hiện ra rằng magento hy vọng tệp sẽ nằm trong dữ liệu / Companyname_Modulname_setup / hoặc trong sql / Companyname_Modulname_setup / .

Và nó phải được đặt tên, mysql4-data-upgrade-OLDVERSION-NEWVERSION.phpví dụ mysql4-data-upgrade-0.1.0-0.1.0.phpthay vìmysql4-install-0.1.0.php

Ít nhất là trên Magento 1.9.3

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.