Magento - créer un nouveau client de l'attribut
J'ai besoin de créer 4 nouveaux attributs de clients dans ma boutique magento. J'ai créé un module ci-dessous pour le faire:
Customerattribute >
etc > config.xml
Model > Mysql4 > Setup.php
sql > customerattribute_setup > mysql4-install-0.0.1.php
config.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Custom_Customerattribute>
<version>0.0.1</version>
</Custom_Customerattribute>
</modules>
<global>
<resources>
<customerattribute_setup>
<setup>
<module>Custom_Customerattribute</module>
<class>Custom_Customerattribute_Model_Mysql4_Setup</class>
</setup>
....
</customerattribute_setup>
</resources>
</global>
</config>
Setup.php
class Custom_Customerattribute_Model_Mysql4_Setup extends Mage_Eav_Model_Entity_Setup
{
/**
* This method returns true if the attribute exists.
*
* @param string|int $entityTypeId
* @param string|int $attributeId
* @return bool
*/
public function attributeExists($entityTypeId, $attributeId)
{
try
{
$entityTypeId = $this->getEntityTypeId($entityTypeId);
$attributeId = $this->getAttributeId($entityTypeId, $attributeId);
return !empty($attributeId);
}
catch(Exception $e)
{
return FALSE;
}
}
}
mysql4-install-0.0.1.php
$installer = $this;
$installer->startSetup();
$entity = $installer->getEntityTypeId('customer');
if(!$installer->attributeExists($entity, 'paypal')) {
$installer->removeAttribute($entity, 'paypal');
}
$installer->addAttribute($entity, 'paypal', array(
'type' => 'text',
'label' => 'Paypal',
'input' => 'text',
'visible' => TRUE,
'required' => FALSE,
'default_value' => '',
'adminhtml_only' => '0'
));
$forms = array(
'adminhtml_customer',
'customer_account_edit'
);
$attribute = Mage::getSingleton('eav/config')->getAttribute($installer->getEntityTypeId('customer'), 'paypal');
$attribute->setData('used_in_forms', $forms);
$attribute->save();
$installer->endSetup();
Cela fonctionne pour mon premier client de l'attribut de paypal
mais maintenant, je veux être en mesure d'ajouter 3 autres. J'avais espéré que si je change la mysql4-install-0.0.1.php
fichier de dire ceci:
$installer = $this;
$installer->startSetup();
$entity = $installer->getEntityTypeId('customer');
if(!$installer->attributeExists($entity, 'attribute_2')) {
$installer->removeAttribute($entity, 'attribute_2');
}
$installer->addAttribute($entity, 'attribute_2', array(
'type' => 'text',
'label' => 'Attribute 2',
'input' => 'text',
'visible' => TRUE,
'required' => FALSE,
'default_value' => '',
'adminhtml_only' => '0'
));
$forms = array(
'adminhtml_customer',
'customer_account_edit'
);
$attribute = Mage::getSingleton('eav/config')->getAttribute($installer->getEntityTypeId('customer'), 'attribute_2');
$attribute->setData('used_in_forms', $forms);
$attribute->save();
$installer->endSetup();
et téléchargé le nouveau fichier et suis retourné sur le site attribute_2
serait ajouté, mais il n'est pas.
Pourquoi ce travail une fois, mais pas de nouveau?
Avez-vous gérer? Et pourriez-vous partager l'extension ou le code si possible (nous avons besoin de 4 attributs) ;P
OriginalL'auteur odd_duck | 2014-11-04
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour ajouter un nouveau fichier(script d'installation) et le nom de fichier doit être,
Alors maintenant, dans ce que vous pouvez ajouter à votre script d'installation comme,
Et vous avez besoin de mettre à jour le config.xml fichier aussi. Il doit donc être,
Pour plus d'informations, allez ici. Si vous avez un doute s'il vous plaît commentaire ici.
Mise à jour:
Je suis désolé. Le nom de fichier devrait ressembler à ceci,
La
core_resource
table contient des entrées de module. Maintenant, le0.0.2
est également mis à jour. Donc, magento va pas chercher votre module(mise à jour) des fichiers xml à charger. si vous avez besoin de nouveau changer le nom du fichier àmysql4-upgrade-0.0.3-0.0.2.php
ou supprimer cette entrée dans votre base de données et de changer le nom de votre module version de frais, commemysql4-upgrade-0.0.0.php
Mise à jour-2:
Ici, j'ai joint les nouveaux codes, j'ai vérifié dans mon local de travail fine,
app/code/local/Packagename/Modulename/etc/config.xml
app/code/local/Packagename/Modulename/Helper/Data.php
app/code/local/Packagename/Modulename/sql/customerattribute1415104755_setup/mysql4-install-0.0.0.php
Et enfin activer votre module,
app/etc/modules/Packagename_Modulename.xml
mysql4-install-0.0.1-0.0.2.php
et aussimysql4-install-0.0.2.php
à pas de chanceJe suis désolé. Nom de fichier devrait ressembler à ceci mysql4-install-0.0.2-0.0.1.php. Je l'ai mise à jour de ma réponse, s'il vous plaît vérifier.
Mis à jour le nom de fichier mais cela ne fonctionne toujours pas. J'ai regardé dans
core_resource
table de base de données et pourrait voir le jour 0.0.2 version de ce module. La recherche en ligne ailleurs, il ressemblait à supprimer, puis en exécutant de nouveau se résoudre et il l'a fait, je ne sais pas pourquoi?!J'ai mis à jour ma réponse. veuillez caisse et laissez-moi savoir si vous avez une question.
Votre code fonctionne aussi, merci pour la profondeur de réponse
OriginalL'auteur Elavarasan
Je pense qu'il y a une erreur dans le code présenté plus tôt:
... l'air de dire "si l'attribut n'existe pas - supprimer'
Vous voulez probablement à ceci:
OriginalL'auteur Martin Francis