Incluindo Atributo Customizado no Cliente

64

Precisamos de uma maneira simples de adicionar um atributo a um registro do cliente que não seja editável pelo cliente ou administrador, apenas programaticamente. Basicamente, temos um site ExpressionEngine juntamente com o Magento.

Nós autenticamos via webservice e gostaríamos de armazenar alguns JSON que recuperamos da autenticação no registro do cliente e atualizá-lo sempre que eles fizerem login.

Também queremos que os dados sejam modificados se eles mudarem as informações no processo de checkout, como endereço de entrega. Em seguida, enviaremos os dados de volta ao nosso serviço da Web, como fazemos atualmente em cada pedido.

Isso é difícil, pois agora estamos armazenando algum JSON em cada produto usando um atributo personalizado com a extensão Opções personalizadas do MageWorx?

Usei o Online Module Creator aqui http://www.silksoftware.com/magento-module-creator/, mas não sei como modificar ou recuperar o valor depois que o módulo estiver instalado.

Onde eu poderia aprender a escrever uma extensão para fazer isso?

MB34
fonte
X-Ref: Adicionando atributos à entidade do cliente (maio de 2011)
hakre
Como fazer se eu quiser salvar esse valor de atributo na tabela de banco de dados 'customer_entity'? @Marius
Kazim Noorani
11
@KazimNoorani Se você quiser salvar o valor diretamente na customer_entitytabela, precisará adicionar a coluna à tabela e no script que adiciona o atributo (veja minha resposta abaixo) substitua o tipo de varcharpor static.
Marius
@ Marius Eu já adicionei coluna na customer_entitytabela. E meu atributo é do tipo 'select'. Quero salvar meu valor de atributo diretamente neste 'custom_column' na customer_entitytabela. Como fazer isso?
Kazim Noorani
11
Mesmo se você quiser salvar os dados na tabela principal, ainda precisará de um atributo com o tipo estático.
Marius

Respostas:

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>

Para recuperar ou editar, use:

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

Você precisará criar observadores de eventos para o evento de login, respondidos aqui: Como posso obter dados do cliente do observador após o login bem-sucedido?

e também observadores prováveis ​​para o customer_save_after, caso eles alterem seu endereço na conta mgmt e um para a cotação, que pode estar em lugares diferentes, dependendo do que você procura.

willboudle
fonte
O que é customer_band_sku?
precisa saber é o seguinte
Desculpe, esse foi o que eu criei.
precisa saber é
Então, como setCustomAttribute () funcionaria para definir os dados?
MB34 31/01
Você tem um exemplo de como definir os dados quando o usuário faz login?
MB34
11
Trabalhando good..could você também dizer como mostrar esse atributo no painel de administração + grade cliente
Aravind
9

Há muitas funcionalidades personalizadas que você precisará criar como módulo customizado, substituindo classes e conectando-se a eventos nos quais você deseja que os dados sejam passados ​​para o serviço da web. Quanto ao atributo, quando você cria seu módulo personalizado e define um recurso de configuração para ele no módulo, config.xmlcomo no tutorial acima, no script de instalação, você pode fazer algo assim:

[path_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_definedtorna o atributo um systematributo se definido como 0, o que desativa a capacidade de excluí-lo do administrador.

russjman
fonte
0

Após muita depuração do núcleo, descobri que o magento espera que o arquivo esteja em data / Companyname_Modulname_setup / ou em sql / Companyname_Modulname_setup / .

E deve ser nomeado, mysql4-data-upgrade-OLDVERSION-NEWVERSION.phppor exemplo, em mysql4-data-upgrade-0.1.0-0.1.0.phpvez demysql4-install-0.1.0.php

Pelo menos no Magento 1.9.3

Preto
fonte