Müşteri adresi düzenleme formuna müşteri özel özelliği nasıl eklenir?


19

customer_addressTür olarak bir müşteri özel özelliği ekledim ve yönetici ve onepagecheckout'ta ve gönderim ve fatura adresinde doğru şekilde çalışıyor.

Oluşturdum: my_namespace/my_module/etc/module.xmlve registration.php composer.jsonmodül taban dizinindeki dosyalar.

my_namespace / my_module / Kurulum / 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();
    }
}

Şimdi magento_customer / view / frontend / templates / address / edit.phtml dosyasıyla ilişkili müşteri addve editadres formuna özellik alanı eklemem gerekiyor

Alanı ekledim ancak bu özelliğin değerini alamıyorum ve kaydedemiyorum.


hangi magento versiyonu?
Sohel Rana

magento CE 2.1.0
Ale

Merhaba Ale, Özel müşteri adresi özelliği için lütfen çalışma kodunuzu paylaşabilir misiniz? Aynı işlevselliği de eklemem gerekiyor.
Rahul

Yanıtlar:


9

Özel müşteri özellikleri hiçbir zaman yalnızca arka uçta olduğu gibi ön uçta görünmez. Bunları ön uçta görüntüleyen kod, özel bir phtml dosyasında bulunur.

Magento EE'de bu işlevsellik yerleşiktir. Bu parayı harcamanıza GEREKMİYORUM, sadece ona sahip olduğunu söylemiyorum. Devam etmek ve özel özellikler eklemeye çalışmak istiyorsanız, biraz karmaşıktır.

Her şeyden önce, sen gerekir bir modülde tüm bu yapmak ya da sadece iş sağa gitmiyor, ve / sonradan yükseltme debug zor olacak.

Bu şeyleri yapmak zorundasınız:

  • Özelliği oluşturun (bunu yönetici sayfasında görünüyorsa yaptınız)
  • referenceContainer form.additional.info için ön uç düzenini geçersiz kıl
  • ek özellikleri göstermek için şablon phtml dosyası ekleme
  • yeni özellikleri yüklemek ve HTML oluşturmak için bir blok PHP dosyası ekleyin
  • sadece sizin oluşturduğunuz kişinin adını yüklemek için sabit kodlama yerine işlemi otomatikleştirmeyi ve katları yüklemeyi öğrenir.

Özel özniteliklerinizi PHP'yi Engelle'ye yükleyebilirsiniz. Ardından, düzeninizi şu şekilde ekleyin customer_account_create.xml:

<?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>

Bu, blok PHP'nizin yüklenmesini, phtml'inizin yüklenmesini ve doğru sayfaya girmesini sağlamak için sihirli bir sostur.

Bu dürüstçe tam bir cevap değil, çok daha fazlası var, ancak temel fikri anlıyorsunuz.


lütfen cevabını tamamlayabilir misin? blok ve şablon dosyasına ne yazdınız?
chirag

setEntityModelClass eylemi otomatik olarak özniteliğimizi kaydedebilir mi yoksa özniteliği kaydetmek için de kod yazmamız gerekir mi?
siddhesh

2

Sorunuz cevaplanamıyor, çünkü yeterli kod sağlanmadı, ancak küçük bir öneri alın. Bu öğreticiyi kontrol ettiniz mi Müşteri attirbute öğreticisi ekleme ?

Magento 2.1'den beri bir değişiklik var ve yöntemler -> save () kullanımdan kaldırılıyor. Bunun yerine Depoları kullanmaya başlamalısınız. Örneğin, müşteri EAV'si için

Magento \ Eav \ Modeli \ AttributeRepository

Sizin durumunuzda, betiğin ikinci kısmı şu şekilde değiştirilmelidir:

/** Magento\Eav\Model\AttributeRepository $attributeRepository */
    $attributeRepository->save($MyAttribute);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.