mon objectif actuel est d’ajouter un nouvel attribut client (avec le type int
) qui devrait apparaître comme étant sélectionné avec des options prédéfinies (chargé à partir d’un modèle avec des entrées modifiables dans le backend, ce qui est fait) .. $installer->addAttribute()
, spécifiant en particulier l’option source correcte. Autre problème, le nouvel attribut n'est pas enregistré dans la table eav_entity_attribute
Je suis sur Magento CE 1.5.1.0
Ceci est le code d'un attribut int
de base avec le rendu text
:
$installer = $this;
$installer->startSetup();
$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
$setup->addAttribute('customer', 'your_attribute_code_here', array(
'input' => 'text',
'type' => 'int',
'label' => 'Some textual description',
'visible' => 1,
'required' => 0,
'user_defined' => 1,
));
$entityTypeId = $setup->getEntityTypeId('customer');
$attributeSetId = $setup->getDefaultAttributeSetId($entityTypeId);
$attributeGroupId = $setup->getDefaultAttributeGroupId($entityTypeId, $attributeSetId);
$setup->addAttributeToGroup(
$entityTypeId,
$attributeSetId,
$attributeGroupId,
'your_attribute_code_here',
'999' //sort_order
);
$oAttribute = Mage::getSingleton('eav/config')->getAttribute('customer', 'your_attribute_code_here');
$oAttribute->setData('used_in_forms', array('adminhtml_customer'));
$oAttribute->save();
$setup->endSetup();
L'étape inhabituelle pour l'ajout d'attributs est la setData('used_in_forms')
, qui semble être unique pour les attributs du client. Sans cela, le champ ne sera pas rendu, certainement pas dans le fichier adminhtml de toute façon. Vous pouvez voir les options valides pour ce tableau dans la table de base de données customer_form_attribute
.
Pour ce qui est d'utiliser une select
avec des options prédéfinies, voici ce dont vous avez besoin:
$iAttributeId = $installer->getAttributeId($entityTypeId, 'your_attribute_code_here');
$aClasses = array('TV','DVD','Home Theatre','Air Conditioner','Stereo/Hifi','Game Console','Camcorder','VCR','Set Top Box','PVR');
$aOption = array();
$aOption['attribute_id'] = $iAttributeId;
for($iCount=0;$iCount<sizeof($aClasses);$iCount++){
$aOption['value']['option'.$iCount][0] = $aClasses[$iCount];
}
$setup->addAttributeOption($aOption);
Et voici un walk-through on utilisant une source personnalisée pour votre liste déroulante
J'espère que cela t'aides,
JD
@ Jonathan Day La réponse de/est excellente et m'a énormément aidée. Cependant, tant que vous avez défini votre setup
classe sur Mage_Customer_Model_Entity_Setup
, Magento peut alors effectuer tout ce travail à votre place:
<!-- config.xml Example -->
<?xml version="1.0"?>
<config>
<global>
<resources>
<acme_module_setup>
<setup>
<module>Acme_Module</module>
<class>Mage_Customer_Model_Entity_Setup</class>
</setup>
<connection>
<use>core_setup</use>
</connection>
</acme_module_setup>
</resources>
</global>
</config>
Et voici le fichier mysql4-install-X.X.X.php
:
<?php
$installer = $this;
/* @var $installer Mage_Customer_Model_Entity_Setup */
$installer->startSetup();
$installer->addAttribute(
'customer',
'acme_imported',
array(
'group' => 'Default',
'type' => 'int',
'label' => 'Imported into Acme',
'input' => 'select',
'source' => 'eav/entity_attribute_source_boolean',
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
'required' => 0,
'default' => 0,
'visible_on_front' => 1,
'used_for_price_rules' => 0,
'adminhtml_only' => 1,
)
);
$installer->endSetup();
Le adminhtml_only
ci-dessus gérera toute la logique used_in_forms
pour vous. De plus, définir group
se chargera de l'attribuer au groupe d'attributs.
Vous venez d’ajouter votre attribut client sous votre fichier d’installation mysql de module personnalisé via le script suivant.
$installer = $this;
$installer->startSetup();
$installer->addAttribute("customer", "yourattributename", array(
"type" => "int",
"backend" => "",
"label" => "Bad Customer",
"input" => "select",
"source" => "eav/entity_attribute_source_boolean",
"visible" => true,
"required" => false,
"default" => "",
"frontend" => "",
"unique" => false,
"note" => ""
));
$attribute = Mage::getSingleton("eav/config")->getAttribute("customer", "yourattributename");
Le script suivant utilisé pour où voulez utiliser l'attribut client
$used_in_forms=array();
$used_in_forms[]="adminhtml_customer";
$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", 0)
->setData("sort_order", 100)
;
$attribute->save();
$installer->endSetup();
La solution fournie par alex et leek les deux a fonctionné pour moi . Seulement, je dois ajouter la fonction de définition dans notre AccountController.php
$customer->setProfession($this->getRequest()->getPost('profession'))
->save(); // Added for updating Profession
Où "profession" était mon attribut personnalisé.