Der Wert des Kundenadressattributs wird in Magento 2 nicht gespeichert

7

Wir arbeiten daran, ein Kundenadressattribut zu erstellen, da der Eingabetyp Datei ist. Wir haben den Code von silksoftware heruntergeladen, indem wir " Kundenattribut hinzufügen " -> "Entitätstyp" -> "Kundenadresse" ausgewählt haben. Der folgende Code lautet jedoch funktioniert nicht / spart, kann jemand, bitte helfen Sie uns in dieser Angelegenheit.

<?php
namespace Module\Vendor\Setup;

use Magento\Eav\Model\Config;
use Magento\Eav\Model\Entity\Setup\Context;
use Magento\Eav\Setup\EavSetup;
use Magento\Framework\App\CacheInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\CollectionFactory;

class CustomerSetup extends EavSetup {

    protected $eavConfig;

    public function __construct(
        ModuleDataSetupInterface $setup,
        Context $context,
        CacheInterface $cache,
        CollectionFactory $attrGroupCollectionFactory,
        Config $eavConfig
        ) {
        $this -> eavConfig = $eavConfig;
        parent :: __construct($setup, $context, $cache, $attrGroupCollectionFactory);
    } 

    public function installAttributes($customerSetup) {
        $this -> installCustomerAttributes($customerSetup);
        $this -> installCustomerAddressAttributes($customerSetup);
    } 

    public function installCustomerAttributes($customerSetup) {

    } 

    public function installCustomerAddressAttributes($customerSetup) {


        $customerSetup -> addAttribute('customer_address',
            'customeridproof',
            [
            'label' => 'Customeridproof',
            'system' => 0,
            'user_defined' => true,
            'position' => 100,
            'sort_order' =>100,
            'visible' =>  true,
            'default_value' => '',
            'note' => '',

                        'type' => 'varchar',
                        'input' => 'file',
            ]
            );

        $customerSetup -> getEavConfig() -> getAttribute('customer_address', 'customeridproof')->setData('is_user_defined',1)->setData('default_value','')-> setData('used_in_forms', ['adminhtml_customer_address', 'customer_register_address', 'customer_address_edit']) -> save();


    } 

    public function getEavConfig() {
        return $this -> eavConfig;
    } 
} 
Krishna ijjada
quelle
Ich stehe auch vor diesem Problem. Bitte lassen Sie mich wissen, wenn Sie eine Lösung dafür gefunden haben. Ich benutze den gleichen Code wie Sie durch Silksoftware
Purushotam Sharma

Antworten:

1

Wenn ich Sie wäre, würde ich Mage2Gen verwenden, um die Grundlagen Ihrer Magento 2-Module zu entwickeln

https://mage2gen.com/

Es ist möglich, Kunden- und Kundenadressattribute über eine einfache Oberfläche zu erstellen.

Neben dem Generieren von Modulen können Sie sich dieses Code-Snippet ansehen, um auf einfache Weise benutzerdefinierte Kundenattribute zu erstellen. Https://mage2gen.com/snippets/customerattribute/

Warnung. Nicht alle Vorlagendateien sind so eingerichtet, dass Kunden- oder Kundenadressattribute dynamisch geladen werden.

Es ist eigentlich ziemlich einfach, die Adressfelder zur Registrierungsseite hinzuzufügen. Weitere Informationen zum Hinzufügen der Adressfelder zur Registrierungsseite finden Sie in einem meiner Artikel unter https://codeblog.experius.nl/magento-2-address -Felder-Kundenregistrierung /

Wenn Sie dieser Vorlage dann Ihr benutzerdefiniertes Feld hinzufügen möchten, überschreiben Sie die Vorlagendatei in Ihrem Design. Dies ist der Kerndateipfad:

Anbieter / Magento / Modul-Kunde / Ansicht / Frontend / Vorlagen / Formular / Register.phtml

Mr. Lewis
quelle
Vielen Dank für die Antwort, aber diese Lösung kann für Eingabetyp-Dateien oder Bilder nicht erfüllt werden.
Krishna Ijjada
0

Sieht so aus, als ob Ihnen der Backend-Typ fehlt.

Das Backend-Attribut teilt Magento mit, welche Attributklasse zum Speichern / Speichern des Felds verwendet werden soll, sobald es das Backend erreicht.

Versuche dies :

    $customerSetup -> addAttribute('customer_address',
        'customeridproof',
        [
            'label' => 'Customeridproof',
            'system' => 0,
            'user_defined' => true,
            'position' => 100,
            'sort_order' =>100,
            'visible' =>  true,
            'default_value' => '',
            'note' => '',
            'type' => 'varchar',
            'input' => 'file',
            'backend' => 'customer/attribute_data_file'
        ]
        );

Dieser Code sagt im Wesentlichen "Verwendung" Mage_Customer_Model_Attribute_Data_Filefür den Upload von Dateien. Diese Klasse ist eine leere Erweiterung, in der sich Mage_Eav_Model_Attribute_Data_Filedie meiste Logik befindet, wenn Sie sie überprüfen müssen.

Ich glaube, für Dateitypen benötigen Sie dies, da Dinge wie die Nachbearbeitung von Bildern / Dateien, das Speichern des Uploads und das Darstellen / Laden des zugrunde liegenden DB-Typs varchar in der Attributklasse behandelt werden.

Wenn es aus irgendeinem Grund nicht geeignet ist (mir ist klar, dass ich ein Kundenattribut für die Adresse verwende, aber es sollte in Ordnung sein), erstellen Sie einfach ein neues Modell in einem Modul und lassen Sie es erben Mage_Eav_Model_Attribute_Data_File, zum Beispiel:

class My_Module_Model_Attribute_File extends Mage_Eav_Model_Attribute_Data_File
{
}

Und machen Sie sich an die Arbeit my_module/attribute_file, indem Sie eine der benötigten Handhabungsmethoden überladen und Ihr Backend auf einstellen (vergessen Sie nicht, Ihr Modell auch in der Konfiguration zu löschen).

Haftungsausschluss: Während ich diese Lösung schreibe, schaue ich mir technisch eine Magento 1.9-Site an und hatte meine Teammitglieder, die an der Magento 2-Doppelprüfungsklasse arbeiten, vorhanden und sollte funktionieren oder zumindest den Weg nach vorne angeben.

Ich hoffe es hilft!

PS> Ich habe diese Woche genug benutzerdefinierte Adressattribute gesehen, um ein Leben lang zu bestehen. Ich dachte, ich würde diesen Vorschlag machen, da ich in den letzten Wochen eine Reihe von Attributen gerollt habe !! Also Daumen drücken, es bringt deine Sache voran.

cygnus digital
quelle
Vielen Dank für die Antwort. Nachdem ich einige Zeit mit diesem Problem verbracht hatte, wurde mir klar, dass ich ['attribute_set_id' => $ attributeSetId, 'attribute_group_id' => $ attributeGroupId] auf mein Attribut setzen muss, dann scheint alles zu funktionieren Administrator. Wenn ich ein Bild in die Kundenadresse der Checkout-Seite einfügen möchte, werden die Daten nicht übergeben oder gespeichert, was mir seltsam erscheint. In diesem Fall funktioniert der Eingabetyp 'Text' einwandfrei, aber der Eingabetyp 'Datei' funktioniert nicht mehr. Bitte vorschlagen.
Krishna Ijjada
Meinen Sie damit, dass das Bild über die Adminhtml-Panels gespeichert werden kann, nicht jedoch über das Frontend? Weil es ein Adressattribut ist, funktioniert es in Mein Konto oder Registrierung (vorausgesetzt, Sie sammeln Adressen bei der Registrierung)? Ich frage, da Checkout ein lustiges Biest sein kann, das weitgehend überschrieben oder erweitert wird (zum Beispiel onestepcheckout oder SagePay). Haben Sie versucht, das Backend-Modell einzustellen?
Cygnus Digital
Eine Technik, die ich verwende, ist das Debuggen / Protokollieren innerhalb des tatsächlichen Attributs (wenn Sie dies für das Kernattribut tun, stellen Sie sicher, dass Sie es anschließend zurücksetzen!), Da es Routinen gibt, die bei Validierung und Speichern ausgelöst werden, können Sie zumindest debuggen und sehen dieser admin trifft sie und wenn das frontend auch tut. Vergleichen Sie auch Ihre Administrator-Eingabefelder mit denen im Frontend.
Cygnus Digital