고객에게 사용자 정의 속성 추가


64

고객이나 관리자가 편집 할 수없고 프로그래밍 방식으로 만 고객 레코드에 속성을 추가하는 간단한 방법이 필요합니다. 본질적으로, 우리는 Magento와 결합 된 ExpressionEngine 사이트를 가지고 있습니다.

우리는 웹 서비스를 통해 인증하고 인증에서 얻은 JSON을 고객의 기록에 저장하고 로그인 할 때마다 업데이트하려고합니다.

또한 배송 주소와 같은 결제 프로세스에서 정보를 변경하는 경우 데이터를 수정해야합니다. 그런 다음 현재 주문할 때마다 데이터를 웹 서비스로 다시 보냅니다.

MageWorx의 사용자 정의 옵션 확장자를 가진 사용자 정의 속성을 사용하여 각 제품에 일부 JSON을 저장하기 때문에 이것이 어려운가요?

http://www.silksoftware.com/magento-module-creator/ 에서 Online Module Creator를 사용 했지만 모듈을 설치 한 후 값을 수정하거나 검색하는 방법을 잘 모르겠습니다.

확장을 작성하는 방법을 어디서 배울 수 있습니까?


X-Ref : 고객 엔티티에 속성 추가 (2011 년 5 월)
hakre

이 속성 값을 'customer_entity'데이터베이스 테이블에 저장하려면 어떻게해야합니까? @Marius
Kazim Noorani

1
@KazimNoorani customer_entity테이블에 직접 값을 저장하려면 테이블에 열을 추가하고 속성을 추가하는 스크립트 (아래 답변 참조)에서 유형을에서 varchar로 바꾸십시오 static.
Marius

@Marius 나는 이미 customer_entity테이블 에 열을 추가했습니다 . 그리고 내 속성은 'select'유형입니다. customer_entity표의 'custom_column'에 속성 값을 직접 저장하고 싶습니다 . 그렇게하는 방법?
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 / 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);

로그인 이벤트에 대한 이벤트 옵저버를 작성해야합니다. 여기에 응답하십시오. 성공적인 로그인 후 옵저버로부터 고객 데이터를 얻으려면 어떻게해야합니까?

또한 고객 mgs 계정에서 주소를 변경하는 경우 customer_save_after에 대한 관찰자와 견적에 대한 관찰자가 있습니다.


customer_band_sku 란 무엇입니까?
MB34

죄송합니다. 남은 음식입니다.
willboudle

그렇다면 setCustomAttribute ()는 어떻게 데이터를 설정합니까?
MB34

사용자가 로그인 할 때 데이터를 설정하는 방법에 대한 예가 있습니까?
MB34

1
잘 작동합니다. 또한 관리자 패널 + 고객 표에 해당 속성을 표시하는 방법을 알려 주실 수 있습니다
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_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

마 젠토 1.9.3 이상

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.