J'ai ajouté un attribut personnalisé client en tant que customer_address
type et il fonctionne correctement dans l'administrateur et dans onepagecheckout ainsi que dans l'adresse d'expédition et de facturation.
J'ai créé:
my_namespace/my_module/etc/module.xml
et des registration.php
composer.json
fichiers dans le répertoire de base du module.
my_namespace / my_module / Setup / InstallData.php
namespace Namespace\Module\Setup;
use Magento\Framework\Module\Setup\Migration;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
/**
* @codeCoverageIgnore
*/
class InstallData implements InstallDataInterface
{
/**
* Customer setup factory
*
* @var CustomerSetupFactory
*/
private $customerSetupFactory;
/**
* Init
*
* @param CustomerSetupFactory $customerSetupFactory
*/
public function __construct(\Magento\Customer\Setup\CustomerSetupFactory $customerSetupFactory)
{
$this->customerSetupFactory = $customerSetupFactory;
}
/**
* {@inheritdoc}
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
*/
public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
{
/** @var CustomerSetup $customerSetup */
$customerSetup = $this->customerSetupFactory->create(['setup' => $setup]);
$setup->startSetup();
// insert attribute
$customerSetup->addAttribute('customer_address', 'attr_code', [
'label' => 'My attribute',
'type' => 'varchar',
'input' => 'text',
'position' => 45,
'visible' => true,
'required' => false,
'system' => 0
]);
$MyAttribute = $customerSetup->getEavConfig()->getAttribute('customer_address', 'attr_code');
$MyAttribute->setData(
'used_in_forms',
['adminhtml_customer_address', 'customer_address_edit', 'customer_register_address']
);
$MyAttribute->save();
$setup->endSetup();
}
}
Maintenant, je dois ajouter un champ d'attribut dans le formulaire client add
et edit
adresse qui est lié au fichier magento_customer / view / frontend / templates / address / edit.phtml
J'ai ajouté le champ mais je ne peux pas obtenir et enregistrer la valeur de cet attribut.
Réponses:
Les attributs client personnalisés n'apparaîtront jamais simplement sur le frontend comme ils le font dans le backend. Le code qui les affiche sur le frontend se trouve dans un fichier phtml personnalisé.
Magento EE a cette fonctionnalité intégrée. Je ne suggère pas que vous ayez besoin de dépenser cet argent, je dis simplement qu'il l'a. Si vous voulez continuer et essayer d'ajouter des attributs personnalisés, c'est un peu complexe.
Tout d'abord, vous devez faire tout cela dans un module ou cela ne fonctionnera pas correctement, et il sera difficile de déboguer / mettre à niveau plus tard.
Vous devez faire ces choses:
Vous pouvez charger vos attributs personnalisés dans le bloc PHP. Ensuite, ajoutez simplement votre mise en page
customer_account_create.xml
comme ceci:C'est la sauce magique pour charger votre bloc PHP, charger votre phtml et le placer dans la bonne page.
Ce n'est pas une réponse complète honnêtement, il y a beaucoup plus, mais vous avez l'idée de base.
la source
Impossible de répondre à votre question, car il n'y a pas assez de code fourni, mais ayez un petit conseil. Avez-vous consulté ce didacticiel Ajout d'un didacticiel sur l'attrait des clients ?
Depuis Magento 2.1, il y a un changement et les méthodes -> save () sont obsolètes. Vous devriez plutôt utiliser les référentiels. Par exemple, pour l'EAV client, vous devez utiliser
Magento \ Eav \ Model \ AttributeRepository
Dans votre cas, la deuxième partie du script doit être remplacée par
la source