Ich habe ein benutzerdefiniertes customer_address
Kundenattribut als Typ hinzugefügt und es wird im Admin und in der Onpagecheckout sowie in der Liefer- und Rechnungsadresse korrekt ausgeführt.
Ich habe erstellt:
my_namespace/my_module/etc/module.xml
und registration.php
composer.json
Dateien im Modul-Basisverzeichnis.
Mein_Namensraum / Mein_Modul / 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();
}
}
Jetzt muss ich im Kunden- add
und edit
Adressformular ein Attributfeld hinzufügen, das sich auf die Datei magento_customer / view / frontend / templates / address / edit.phtml bezieht
Ich habe das Feld hinzugefügt, kann aber den Wert dieses Attributs nicht abrufen und speichern.
Antworten:
Individuelle Kundenattribute werden nie nur ‚erscheinen‘ auf dem Frontend , wie sie im Backend tun. Der Code, der sie im Frontend anzeigt, befindet sich in einer benutzerdefinierten HTML-Datei.
Magento EE hat diese Funktionalität eingebaut. Ich schlage nicht vor, dass Sie dieses Geld ausgeben MÜSSEN, ich sage nur, dass es es hat. Wenn Sie versuchen möchten, benutzerdefinierte Attribute hinzuzufügen, ist dies etwas komplex.
Zuallererst müssen Sie dies alles in einem Modul tun , da es sonst nicht richtig funktioniert und sich später nur schwer debuggen / upgraden lässt.
Sie müssen diese Dinge tun:
Sie können Ihre benutzerdefinierten Attribute in Block PHP laden. Dann fügen Sie einfach Ihr Layout so hinzu
customer_account_create.xml
:Dies ist die magische Sauce, um Ihren PHP-Block zum Laden zu bringen, Ihren PHP-Code zum Laden zu bringen und ihn auf die richtige Seite zu bringen.
Das ist ehrlich gesagt keine vollständige Antwort, da steckt noch viel mehr dahinter, aber Sie haben eine Grundidee.
quelle
Ihre Frage kann nicht beantwortet werden, da nicht genügend Code bereitgestellt wird, Sie jedoch einen kleinen Rat haben. Haben Sie dieses Tutorial überprüft ? Hinzufügen eines Kunden-Tutorials ?
Seit Magento 2.1 gibt es eine Änderung und Methoden -> save () sind veraltet. Sie sollten stattdessen Repositories verwenden. Zum Beispiel für Kunden-EAV sollten Sie verwenden
Magento \ Eav \ Model \ AttributeRepository
In Ihrem Fall sollte der zweite Teil des Skripts in geändert werden
quelle