Я добавил пользовательский атрибут клиента как customer_address
тип, и он корректно работает в админке и в onepagecheckout, а также в адресе доставки и выставления счета.
Я создал:
my_namespace/my_module/etc/module.xml
и registration.php
composer.json
файлы в базовом каталоге модуля.
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();
}
}
Теперь мне нужно добавить поле атрибута в форму клиента add
и edit
адреса, которые связаны с файлом magento_customer / view / frontend / templates / address / edit.phtml
Я добавил поле, но не могу получить и сохранить значение этого атрибута.
Ответы:
Пользовательские атрибуты клиентов никогда не будут просто «появляться» во внешнем интерфейсе, как в бэкэнде. Код, отображающий их в веб-интерфейсе, находится в пользовательском файле phtml.
В Magento EE встроена эта функциональность. Я не предлагаю вам НУЖНО тратить эти деньги, я просто говорю, что они есть. Если вы хотите пойти дальше и попытаться добавить пользовательские атрибуты, это несколько сложно.
Прежде всего, вы должны сделать все это в модуле, иначе он просто не будет работать правильно, а потом будет сложно отлаживать / обновлять.
Вы должны сделать эти вещи:
Вы можете загрузить свои пользовательские атрибуты в блоке PHP. Затем просто добавьте свой макет к вот
customer_account_create.xml
так:Это волшебный соус, чтобы заставить ваш блочный PHP загружаться, чтобы ваш phtml загружался и выводил его на нужную страницу.
Честно говоря, это не полный ответ, есть еще много чего, но вы поймете основную идею.
источник
Не могу ответить на ваш вопрос, потому что недостаточно кода, но есть небольшой совет. Вы проверяли этот учебник? Как добавить учебник для клиентов ?
Начиная с Magento 2.1 произошли изменения, и методы -> save () устарели. Вместо этого вы должны начать использовать репозитории. Например, для клиента EAV вы должны использовать
Magento \ Eav \ Model \ AttributeRepository
В вашем случае, вторая часть скрипта должна быть изменена на
источник