Özellik, check-out adımını değiştirirken Magento \ Quote \ Api \ Data \ AddressInterface sınıfında karşılık gelen ayarlayıcıya sahip değil


18

1 - customer_address'e bir eav özelliği ekliyorum

$attributesInfo = [
    'reference' => [
         'label' => 'Reference',
         'type' => 'varchar',
         'input' => 'text',
         'position' => 100,
         'visible' => true,
         'required' => false,
    ],
];

foreach ($attributesInfo as $attributeCode => $attributeParams) {
    $customerSetup->addAttribute('customer_address', $attributeCode, $attributeParams);
}

2 - Modülüme uzantı özelliğini ekledim

<extension_attributes for="Magento\Quote\Api\Data\AddressInterface">
    <attribute code="reference" type="string"/>
</extension_attributes>

Requirjs-config.js dosyasında referans alanı eklemek için bazı javascript dosyalarını geçersiz kıldım

var config = {
"map": {
    "*": {
        "Magento_Checkout/js/model/shipping-save-processor/default" : "Agr_Checkout/js/shipping-save-processor-default-override",
        "Magento_Customer/js/model/customer/address" : "Agr_Checkout/js/model/customer/address",
        "Magento_Checkout/js/model/address-converter" : "Agr_Checkout/js/model/address-converter",
        "Magento_Checkout/js/model/new-customer-address" : "Agr_Checkout/js/model/new-customer-address"
    }
}

3 - Referans alanının adrese gönderildiğini onaylıyorum

resim açıklamasını buraya girin

4 - Gönderim bilgilerimi gönderdiğimde (İleri'ye tıklayın) Bu hatayı alıyorum: "Özellik" Referansı "Magento \ Quote \ Api \ Data \ AddressInterface" sınıfında ilgili ayarlayıcıya sahip değil. "

resim açıklamasını buraya girin

Zaten yaptım: - Macenta önbelleğini temizle ve temizle - Çalıştır kurulum: yükseltme - Çalıştır kurulum: di: compile

Neyi yanlış yapıyorum?


Aşağıdaki cevap işe yaradı mı?
Stevie G

Ben adres_id ile güncelleme de referans için bir komut dosyası yürütme, sabit sql ekleme ile çözüldü, biliyorum yanlış ama biraz koştu, ben test ve daha sonra size bir geri bildirim verecektir.
allamgr

Suçlanabileceğinizi sanmıyorum ... görünüşe göre sadece Enterprise'da custom_attributes ekleyebilirsiniz ve şimdiye kadar bunun etrafında hiçbir "kolayca özelleştirilebilir ödeme" yolu bulamadım.
LM_Fielding

ile ilgili herhangi bir güncelleme var mı?
Magento2 Devloper

@allamgr ben de yeni müşteri adresi özniteliği ile aynı sorunla karşı karşıya u u bunun için çözüm aldın mı? bana bu konuda düşüncelerini paylaşabilir misin? prnt.sc/iovkp2
Nagaraju K

Yanıtlar:


1

Bir eav kurulumunda veya yükseltme komut dosyasında nitelikleri ayarlamak en iyi sonucu verir ve otomatik olarak eklemek istediğiniz formlara eklenir.

    class InstallData implements InstallDataInterface
    {
        private $_eavSetupFactory;
        private $_eavConfig;
        private $_attributeResource;
        protected $_logger;

        public function __construct(EavSetupFactory $eavSetupFactory, Config $eavConfig, Attribute $attributeResource, Monolog $logger)
        {
            $this->_eavSetupFactory = $eavSetupFactory;
            $this->_eavConfig = $eavConfig;
            $this->_attributeResource = $attributeResource;
            $this->_logger = $logger;
        }

        public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
        {
            $eavSetup = $this->_eavSetupFactory->create(['setup' => $setup]);
            $addressAttributes = [
        'attribute1' => [
            'type' => 'int',
            'label' => 'attribute1',
            'input' => 'text',
            'unique' => true,
            'required' => false,
            'visible' => true,
            'user_defined' => false,
            'position' => 100,
            'system' => false,
            'adminhtml_only' => 0
        ],
        'attribute2' => [
            'type' => 'int',
            'label' => 'attribute2',
            'input' => 'text',
            'required' => false,
            'visible' => true,
            'user_defined' => false,
            'position' => 110,
            'system' => false,
            'adminhtml_only' => 1
        ]
    ];

    $usedInFormsAddress = [
            'adminhtml_customer_address',
            'customer_address_edit',
            'customer_register_address'
        ];

    foreach ($addressAttributes as $code => $options) {
        $eavSetup->addAttribute(
            'customer_address',
            $code,
            $options
        );

        try {
            $attribute = $this->_eavConfig->getAttribute('customer_address', $code);
            $attribute->setData(
                'used_in_forms',
                $usedInFormsAddress
            );
            $this->_attributeResource->save($attribute);
        } catch (LocalizedException $exception) {
            $this->_logger->critical($exception->getMessage());
        } catch (Exception $exception) {
            $this->_logger->critical($exception->getMessage());
        }
    }

resim açıklamasını buraya girin

Buradaki kod, formlara eklenecek ve kaydedilecek veya bir sonraki adıma geçecek herhangi bir sorun olmayacak

$usedInFormsAddress = [
            'adminhtml_customer_address',
            'customer_address_edit',
            'customer_register_address'
        ];

try {
            $attribute = $this->_eavConfig->getAttribute('customer_address', $code);
            $attribute->setData(
                'used_in_forms',
                $usedInFormsAddress
            );
            $this->_attributeResource->save($attribute);
        } catch (LocalizedException $exception) {
            $this->_logger->critical($exception->getMessage());
        } catch (Exception $exception) {
            $this->_logger->critical($exception->getMessage());
        }

0

Özel özellikler üzerinden ayarlamayı deneyin.

Misal:

...
 custom_attribute: [{"attribute_code": "reference", "value": "Your value"}]
...

Hiç işe yaradın mı yoksa sadece bir deney mi?
LM_Fielding

Ben o çalışma var
Phoenix128_RiccardoT

Topluluk sürümü ile mi? Nasıl olduğunu gösterebilirseniz bile, lütufla çok takdir ediyorum.
LM_Fielding

1
Magento2 Enterprise Edition ile özel bir müstakil ön uç ödeme prosedürü içindeydi. Bu kodu aramam gerekiyor. Eski bir eser.
Phoenix128_RiccardoT

Lütfen bulursan bana göster, ama uygun olduğunu düşünmüyorum.
LM_Fielding

0

özelliği istekte nasıl iletirsiniz? tarayıcı konsolunu böyle kontrol edebilirsiniz

{
    ...
    extension_attributes: {
         reference: "value"
    }
}

Bu doğru. Var klasörünü ve oluşturulan klasörü var / cache var / page_cache var / view_proceed ve oluşturulan / klasörlerini kaldırabilirsiniz .

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.