Bagaimana cara menambahkan atribut khusus pelanggan di formulir edit alamat pelanggan?

19

Saya menambahkan atribut khusus pelanggan sebagai customer_addressjenis dan itu berjalan dengan benar di admin dan di onepagecheckout serta di alamat pengiriman & penagihan.

Saya membuat: my_namespace/my_module/etc/module.xmldan registration.php composer.jsonfile dalam direktori basis modul.

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();
    }
}

Sekarang saya perlu menambahkan bidang atribut di formulir pelanggan adddan editalamat yang terkait dengan file magento_customer / view / frontend / templates / address / edit.phtml

Saya menambahkan bidang tetapi saya tidak bisa mendapatkan dan menyimpan nilai atribut itu.

Ale
sumber
versi magento yang mana?
Sohel Rana
magento CE 2.1.0
Ale
Hai Ale, Tolong bagikan kode kerja Anda untuk atribut alamat pelanggan khusus. Saya juga perlu menambahkan fungsionalitas yang sama.
Rahul

Jawaban:

9

Atribut kustom pelanggan tidak akan pernah hanya 'muncul' di frontend seperti yang mereka lakukan di backend. Kode yang menampilkannya di frontend terletak di file phtml khusus.

Magento EE memiliki fungsi ini bawaan. Saya tidak menyarankan Anda PERLU menghabiskan uang itu, saya hanya mengatakan itu memilikinya. Jika Anda ingin maju dan mencoba menambahkan atribut khusus, ini agak rumit.

Pertama-tama, Anda harus melakukan semua ini dalam sebuah modul atau itu tidak akan berfungsi dengan baik, dan akan sulit untuk debug / upgrade nanti.

Anda harus melakukan hal-hal ini:

  • Buat atribut (Anda telah melakukan ini jika muncul di admin)
  • menimpa tata letak ujung depan untuk referenceContainer form.additional.info
  • tambahkan file phtml templat untuk menunjukkan atribut tambahan
  • tambahkan blok file PHP untuk memuat atribut baru dan buat HTML
  • hal-hal lain seperti mempelajari cara mengotomatiskan proses dan memuat banyak alih-alih alih-alih mengkode, memuat hanya nama yang Anda buat.

Anda dapat memuat atribut khusus Anda di Blok PHP. Kemudian tambahkan saja tata letak Anda ke yang customer_account_create.xmlseperti ini:

<?xml version="1.0"?>

<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
    <update handle="customer_form_template_handle"/>
    <body>
        <referenceContainer name="form.additional.info">
            <block class="Company\Customformattributes\Block\FormCustomer" template="Company_Customformattributes::customattributes.phtml" name="customer_form_user_attributes" cacheable="false">
                <action method="setFormCode">
                    <argument name="code" xsi:type="string">customer_account_edit</argument>
                </action>
                <action method="setEntityModelClass">
                    <argument name="code" xsi:type="string">Magento\Customer\Model\Customer</argument>
                </action>
            </block>
        </referenceContainer>
    </body>
</page>

Ini adalah saus ajaib untuk memuat PHP Anda, memuat phtml, dan memasukkannya ke halaman yang benar.

Ini bukan jawaban yang sepenuhnya jujur, ada banyak lagi, tetapi Anda mendapatkan ide dasarnya.

CarComp
sumber
bisakah Anda mengisi jawaban Anda? apa yang Anda masukkan dalam file blok dan templat?
chirag
tindakan setEntityModelClass dapat secara otomatis menyimpan atribut kita atau kita perlu menulis kode untuk menyimpan atribut juga?
siddhesh
2

Tidak dapat menjawab pertanyaan Anda, karena tidak ada kode yang cukup, tetapi punya sedikit saran. Apakah Anda memeriksa tutorial ini. Menambahkan tutorial attirbute pelanggan ?

Sejak Magento 2.1 ada perubahan dan metode -> save () sudah usang. Anda seharusnya mulai menggunakan Gudang sebagai gantinya. Misalnya untuk EAV pelanggan yang harus Anda gunakan

Magento \ Eav \ Model \ AttributeRepository

Dalam kasus Anda, bagian kedua skrip harus diubah menjadi

/** Magento\Eav\Model\AttributeRepository $attributeRepository */
    $attributeRepository->save($MyAttribute);
pietr
sumber