Aggiunta di attributo personalizzato al cliente


64

Abbiamo bisogno di un modo semplice per aggiungere un attributo a un record cliente che non sia modificabile dal cliente o dall'amministratore, solo a livello di programmazione. In sostanza, abbiamo un sito ExpressionEngine associato a Magento.

Effettuiamo l'autenticazione tramite webservice e vorremmo archiviare alcuni JSON che recuperiamo dall'autenticazione nel record del cliente e li aggiorniamo ogni volta che effettuano l'accesso.

Vogliamo anche modificare i dati se cambiano le informazioni nel processo di pagamento, come l'indirizzo di spedizione. Restituiremo quindi i dati al nostro servizio web così come lo facciamo attualmente con ogni ordine.

È difficile da fare poiché ora stiamo memorizzando alcuni JSON su ciascun prodotto utilizzando un attributo personalizzato con l'estensione Opzioni personalizzate di MageWorx?

Ho usato Online Module Creator qui http://www.silksoftware.com/magento-module-creator/ ma non sono sicuro di come modificare o recuperare il valore una volta installato il modulo.

Dove posso imparare a scrivere un'estensione per farlo?



Come fare se desidero salvare questo valore di attributo nella tabella del database "customer_entity"? @Marius
Kazim Noorani l'

1
@KazimNoorani Se si desidera salvare il valore direttamente nella customer_entitytabella è necessario aggiungere la colonna alla tabella e nello script che aggiunge l'attributo (vedere la mia risposta di seguito) sostituire il tipo da varchara static.
Marius

@Marius Ho già aggiunto la colonna nella customer_entitytabella. E il mio attributo è di tipo 'seleziona'. Voglio salvare il mio valore di attributo direttamente in questa colonna personalizzata nella customer_entitytabella. Come farlo?
Kazim Noorani,

1
Anche se si desidera salvare i dati nella tabella principale, è comunque necessario un attributo con il tipo statico.
Marius

Risposte:


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>

Quindi per recuperare o modificare si utilizza:

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

Dovrai creare osservatori di eventi per l'evento di accesso, con risposta qui: Come posso ottenere i dati dei clienti dall'osservatore dopo aver effettuato correttamente l'accesso?

e probabilmente anche osservatori per customer_save_after nel caso in cui alterino il loro indirizzo nell'account mgmt e uno per il preventivo, che potrebbe trovarsi in luoghi diversi a seconda di ciò che stai cercando.


Che cos'è customer_band_sku?
MB34,

Mi dispiace, quello è quello che ho creato rimanendo.
Willboudle

Quindi come funzionerebbe setCustomAttribute () per impostare i dati?
MB34

Hai un esempio di come IMPOSTARE i dati quando l'utente accede?
MB34

1
Funziona bene ... potresti anche dire come mostrare quell'attributo nel pannello di amministrazione + nella griglia del cliente
aravind

9

Ci sono molte funzionalità personalizzate che dovrai creare come moduli di override del modulo personalizzato e collegarti a eventi in cui desideri che i dati vengano passati al tuo servizio web. Per quanto riguarda l'attributo, quando crei il tuo modulo personalizzato e definisci una risorsa di installazione per esso nel modulo config.xmlcome nell'esercitazione sopra, quindi nello script di installazione puoi fare qualcosa del genere:

[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_definedrende l'attributo un systemattributo se impostato su 0, il che disabilita la possibilità di eliminarlo dall'amministratore.


0

Dopo un sacco di debug del core ho scoperto che magento si aspetta che il file sia in data / Companyname_Modulname_setup / o in sql / Companyname_Modulname_setup / .

E deve essere chiamato mysql4-data-upgrade-OLDVERSION-NEWVERSION.phpad es. mysql4-data-upgrade-0.1.0-0.1.0.phpAnzichémysql4-install-0.1.0.php

Almeno su Magento 1.9.3

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.