Ajout d'attribut personnalisé au client

64

Nous avons besoin d’un moyen simple d’ajouter un attribut à un enregistrement client qui ne soit pas éditable par le client ou l’administrateur, mais uniquement par programme. Nous avons essentiellement un site ExpressionEngine couplé à Magento.

Nous nous authentifions via le service Web et souhaiterions stocker dans le fichier du client certains fichiers JSON que nous aurons renvoyés de l'authentification et les mettre à jour à chaque connexion.

Nous voudrons également que les données soient modifiées si elles changent des informations dans le processus de paiement, telles que l'adresse de livraison. Nous renverrons ensuite les données à notre service Web, comme nous le faisons actuellement avec chaque commande.

Est-ce difficile à faire, car nous stockons maintenant des fichiers JSON sur chaque produit à l'aide d'un attribut personnalisé avec l'extension Options personnalisées de MageWorx?

J'ai utilisé le Créateur de module en ligne ici http://www.silksoftware.com/magento-module-creator/ mais je ne sais pas comment modifier ou récupérer la valeur une fois le module installé.

Où pourrais-je apprendre à écrire une extension pour faire ceci?

MB34
la source
X-Ref: Ajout d'attributs à l'entité cliente (mai 2011)
hakre
Comment faire si je veux enregistrer cette valeur d'attribut dans la table de base de données 'customer_entity'? @Marius
Kazim Noorani
1
@KazimNoorani Si vous souhaitez enregistrer la valeur directement dans la customer_entitytable, vous devez ajouter la colonne à la table et dans le script qui ajoute l'attribut (voir ma réponse ci-dessous), remplacez le type de varcharà static.
Marius
@Marius j'ai déjà ajouté la colonne dans la customer_entitytable. Et mon attribut est de type 'select'. Je veux enregistrer la valeur de mon attribut directement dans cette colonne 'custom_column' customer_entity. Comment faire ça?
Kazim Noorani
1
Même si vous souhaitez enregistrer les données dans la table principale, vous avez toujours besoin d'un attribut de type statique.
Marius

Réponses:

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>

Ensuite, pour récupérer ou éditer vous utilisez:

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

Vous devrez créer des observateurs d’événement pour l’événement de connexion, la réponse est la suivante: Comment puis-je obtenir les données client d’observateur après une connexion réussie?

et également des observateurs probables pour customer_save_after au cas où ils modifieraient leur adresse dans le compte, et un pour le devis, qui pourraient se trouver à différents endroits en fonction de vos objectifs.

willboudle
la source
Qu'est-ce que customer_band_sku?
MB34
Désolé, c'est celui que j'ai créé les restes.
willboudle
Alors, comment setCustomAttribute () fonctionnerait-il pour définir les données?
MB34
Avez-vous un exemple de configuration des données lorsque l'utilisateur se connecte?
MB34
1
Vous pouvez également savoir comment afficher cet attribut dans le panneau d'administration + la grille clients
lundi
9

Vous devrez créer de nombreuses fonctionnalités personnalisées en tant que classes de substitution de modules personnalisés et vous connecter à des événements pour lesquels vous souhaitez que les données soient transmises à votre service Web. En ce qui concerne l'attribut, lorsque vous créez votre module personnalisé et définissez une ressource de configuration pour celui-ci dans le module, config.xmlcomme dans le tutoriel ci-dessus, puis dans votre script d'installation, vous pouvez procéder de la manière suivante:

[chemin_module] / sql / [numéro_noeud_ressource_in_config_xml] / mysql4-install- [numéro_version_module] .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_definedfait de l'attribut un systemattribut s'il est défini sur 0, ce qui désactive la possibilité de le supprimer de l'administrateur.

russjman
la source
0

Après beaucoup de débogage de base, j'ai découvert que magento s'attend à ce que le fichier se trouve dans data / Companyname_Modulname_setup / ou dans sql / Companyname_Modulname_setup / .

Et il doit être nommé mysql4-data-upgrade-OLDVERSION-NEWVERSION.phppar exemple mysql4-data-upgrade-0.1.0-0.1.0.phpau lieu demysql4-install-0.1.0.php

Au moins sur Magento 1.9.3

Noir
la source