Yönetici Gönderim Adresi kutusunda özel bir özellik nasıl gösterilir?


13

Ödeme sayfasında açılır liste özel alanını özel değerlerle ekledim. Ayrıca, özellik değerlerini veritabanına kaydeder, ancak sipariş gönderim adresinde görüntülenmez. Nasıl gösterileceği hakkında bir fikrin var mı?

resim açıklamasını buraya girin

InstallSchema.php

$connection->addColumn(
                $installer->getTable('quote_address'),
                'mob_type',
                [
                    'type' => \Magento\Framework\DB\Ddl\Table ::TYPE_TEXT,
                    'nullable' => true,
                    'default' => NULL,
                    'length' => 255,
                    'comment' => 'Mob Type'
                ]
            );
        $connection->addColumn(
                $installer->getTable('sales_order_address'),
                'mob_type',
                [
                    'type' => \Magento\Framework\DB\Ddl\Table ::TYPE_TEXT,
                    'nullable' => true,
                    'default' => NULL,
                    'length' => 255,
                    'comment' => 'Mob Type'
                ]
            );
        $installer->endSetup();

Eklenti

use Magento\Checkout\Block\Checkout\LayoutProcessor;

class MobPlugin
{
    public function afterProcess(LayoutProcessor $subject, $jsLayout) {
        $customAttributeCode = 'mob_type';
        $customField = [
            'component' => 'Magento_Ui/js/form/element/select',
            'config' => [
                'customScope' => 'shippingAddress.custom_attributes',
                'template' => 'ui/form/field',
                'elementTmpl' => 'ui/form/element/select',
                'id' => 'drop-down',
            ],
            'dataScope' => 'shippingAddress.custom_attributes.mob_type',
            'label' => 'Mob Type',
            'provider' => 'checkoutProvider',
            'visible' => true,
            'validation' => ['required-entry' => true],
            'sortOrder' => 150,
            'id' => 'drop-down',
            'options' => [
                [
                    'value' => 'local',
                    'label' => 'Local',
                ],
                [
                    'value' => 'vip',
                    'label' => 'VIP',
                ]
            ]
        ];

        $jsLayout['components']['checkout']['children']['steps']['children']['shipping-step']['children']['shippingAddress']['children']['shipping-address-fieldset']['children'][$customAttributeCode] = $customField;

        return $jsLayout;
    }
}

resim açıklamasını buraya girin

etc / di.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Checkout\Model\ShippingInformationManagement">
        <plugin name="save_custom_field" type="Namespace\CustomModule\Plugin\Checkout\SaveAddressInformation" />
    </type>

</config>

SaveAddressInformation.php

class SaveAddressInformation
{
    protected $quoteRepository;
    public function __construct(
        \Magento\Quote\Model\QuoteRepository $quoteRepository
    ) {
        $this->quoteRepository = $quoteRepository;
    }
    /**
     * @param \Magento\Checkout\Model\ShippingInformationManagement $subject
     * @param $cartId
     * @param \Magento\Checkout\Api\Data\ShippingInformationInterface $addressInformation
     */
    public function beforeSaveAddressInformation(
        \Magento\Checkout\Model\ShippingInformationManagement $subject,
        $cartId,
        \Magento\Checkout\Api\Data\ShippingInformationInterface $addressInformation
    ) {
        $shippingAddress = $addressInformation->getShippingAddress();
    $shippingAddressExtensionAttributes = $shippingAddress->getExtensionAttributes();
    if ($shippingAddressExtensionAttributes) {
        $customField = $shippingAddressExtensionAttributes->getMobType();
        $shippingAddress->setMobType($customField);
    }

    }
}

resim açıklamasını buraya girin Refe Uzantısı

Yukarıdaki eklenti iyi çalışıyor ve quote_address tablosuna değerleri kaydedin. Sipariş görünümü sayfasında ve e-posta şablonunda da özel özellik göstermek istiyorum. Herkes kodda neyin yanlış olduğu hakkında bir fikre sahip. Şimdiden teşekkürler



örneğin magento2.2.3'te çalışmıyor
Jigs Parmar

Sorununuzu paylaşın, böylece kontrol edebilirim
Magento2 Devloper

konuk ödeme özelliği etkinleştirildiğinde e-posta kimliğini nasıl alabilirim
Ketan Borada

alıntı ve sipariş nesne iade
Magento2 Devloper

Yanıtlar:


4

Sistem Yapılandırması'na gidin

Stores -> Configuration -> Customers -> Customer Configuration -> Address Templates

Adres Şablonları, HTML Bul bölümünde, onay kutusu sistem değerinin işaretini kaldırın, aşağıdaki kodu ekleyin. gerekirse bir özellik kodunu değiştirebilirsiniz.

E-posta şablonu için aynı adres biçimi [HTML Adres biçimi] çalışır.

{{depend mob_type}}Mob_Type: {{var mob_type}}{{/depend}}

php bin/magento cache:cleanGösterilmezse çalıştırın .

Bir özellik, sipariş görünümü sayfasında ve sipariş e-postasında da gösterilir.

Yukarıda her iki adreste de görüntülenir, ancak yalnızca gönderimde göstermek istiyorsanız, gönderim adres tablosuna ( sales_order_address and quote_address) yalnızca SMS değerini koymanız gerekir . Zevk almak

Tablo görünümü -

resim açıklamasını buraya girin

Sonuç -

resim açıklamasını buraya girin


sadece gönderim adresine nasıl kaydedebilirim?
Magento2 Devloper

etkinliği eklemeniz gerekir. ya da bu yararlı olabilir - magento.stackexchange.com/questions/138902/…
M2 Developer

Aslında benim durumum için çalışmıyor, nasıl bir değişken zaten alıntı_adres & sales_order_address tablosunda kaydedilen uzantı attrbute başvurabilir anlamıyorum. İki info.phtml şablonunu geçersiz kılmam gerekiyor gibi görünüyor
hkguile

4

Benim yaklaşımımı dene. Soruda açıklandığı gibi modül dikkate alınarak.

  1. Soruda gösterilen aynı modülü kullandı. değişiklik yok

  2. Başvurduğunuz yüklü referans uzantısı (SMS uzantısı)

Sistem Yapılandırması'na gidin

Mağazalar -> Yapılandırma -> Müşteriler -> Müşteri Yapılandırması -> Adres Şablonları

Adres Şablonları, HTML Bul bölümünde, onay kutusu sistem değerinin işaretini kaldırın, aşağıdaki kodu ekleyin. gerekirse bir özellik kodunu değiştirebilirsiniz.

E-posta şablonu için aynı adres biçimi [HTML Adres biçimi] çalışır.

{{depend mob_type}}Mob_Type: {{var mob_type}}{{/depend}}

resim açıklamasını buraya girin

önbelleği temizlemek gerekebilir.

php bin/magento cache:cleanGösterilmiyorsa çalıştır

Bir özellik, sipariş görünümü sayfasında ve sipariş e-postasında da gösterilir.

resim açıklamasını buraya girin


Cevabınız için teşekkür ederim. Ekranı yalnızca gönderim adresi alanında nasıl yönetiriz?
Magento2 Devloper

yalnızca gönderim adresi için daha fazla sistem yapılandırması oluşturmanız gerekebilir html_for_shipping. Magento/sales/view/adminhtml/templates/order/view/info.phtml, Çizgi aşağıda bulabilirsiniz $block->getFormattedAddress( $order->getShippingAddress() );Değişikliğin $block->getFormattedShippingAddress( $order->getShippingAddress() );olarak info.phpdosyaya, sadece adres biçimlendirme nakliye için yeni bir yöntem oluşturabilir. 'Html' biçim yönteminin parametresini 'html_for_shipping' olarak değiştirebilirsiniz; burada 'html_for_shipping' gönderim adresi biçimi için yeni sistem yapılandırma değeriniz olacaktır.
18'de sandip

aniden çalışmıyor. Beni sırayla SMS detaylarının üstünde göstermiyorum. Herhangi bir fikir?
Magento2 Devloper

Bunu @ sandip denedim.Ancak görüntülenmez .... Lütfen bana yardım et
Vishali Mariappan

3

Özellik doğru kaydedilmişse, özelliği adres şablonlarına eklemeniz gerekir. Bunlar şu adreste bulunabilir:

Mağazalar -> Yapılandırma -> Müşteriler -> Müşteri Yapılandırması -> Adres Şablonları

Sonunda şöyle bir şey ekleyebilirsiniz:

{{depend mob_type}}, Mob. Type: {{var mob_type}}{{/depend}}

Şablon türüne bağlı olarak, <br/>yeni satırlar oluşturmak için kullanabilirsiniz .


Yalnızca gönderim adresini görüntülemek istiyorum ve sipariş görünümü sayfasında da nasıl yönetebilirim?
Magento2 Devloper

Bu şablonlar her yerde kullanılır. Ön uç, arka uç, pdf, e-postalar ... Özellik yalnızca gönderim adresine kaydedilirse yalnızca orada görüntülenir
Langley

Tamam, kontrol
edeyim

Çalışmıyor. hiçbir yerde görüntülenmez. - nimb.ws/9cnpHW
Magento2 Devloper

Hi @Langley Cevabınız için teşekkürler, bunu sadece fatura adresinde gönderim adresinde göstermiyorum, her iki yerde de görüntülemek istiyorum.
shivashankar m

2

Bunu şöyle yaparım: ve ekleyin quoteve sales_orderoradan veri aşağıdaki kodu kullanın (mevcut DB tablosunu güncelleştirmeniz gerekiyorsa UpgradeSchema komut dosyalarını kullanmayı deneyin, yeni DB tabloları için InstallSchema kullanılmalıdır)

namespace Vendor\Module\Setup;

use Magento\Framework\Setup\UpgradeSchemaInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
use Magento\Framework\Setup\ModuleContextInterface;

class UpgradeSchema implements UpgradeSchemaInterface
{
    public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context)
    {
        $setup->startSetup();

        $quoteAddressTable = 'quote';
        $orderTable = 'sales_order';

        //Quote address table
        $setup->getConnection()
            ->addColumn(
                $setup->getTable($quoteAddressTable),
                'mob_type',
                [
                    'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
                    'length' => 255,
                    'comment' =>'Mob type'
                ]
            );
        //Order address table
        $setup->getConnection()
            ->addColumn(
                $setup->getTable($orderTable),
                'mob_type',
                [
                    'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
                    'length' => 255,
                    'comment' =>'Mob type'

                ]
            );

        $setup->endSetup();
    }
}

GÜNCELLEME

Aşağıdaki gibi bir mixin js oluşturun:

içinde requirejs-config.js

var config = {
    config: {
        mixins: {
            'Magento_Checkout/js/action/set-shipping-information': {
                '<YourNamespace_YourModule>/js/action/set-shipping-information-mixin': true
            }
        }
    }
};

set-shipping-information-mixin.js

/*jshint browser:true jquery:true*/
/*global alert*/
define([
    'jquery',
    'mage/utils/wrapper',
    'Magento_Checkout/js/model/quote'
], function ($, wrapper, quote) {
    'use strict';

    return function (setShippingInformationAction) {

        return wrapper.wrap(setShippingInformationAction, function (originalAction) {
            var shippingAddress = quote.shippingAddress();
            if (shippingAddress['extension_attributes'] === undefined) {
                shippingAddress['extension_attributes'] = {};
            }

            shippingAddress['extension_attributes']['custom_field'] = shippingAddress.customAttributes['custom_field'];
            // pass execution to original action ('Magento_Checkout/js/action/set-shipping-information')
            return originalAction();
        });
    };
});

Ayrıca aşağıdaki kod ile bir extension_attributes.xmlin olmalıdırYour_Module/etc/

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Api/etc/extension_attributes.xsd">
    <extension_attributes for="Magento\Quote\Api\Data\AddressInterface">
        <attribute code="custom_field" type="string" />
    </extension_attributes>
</config>

gerektiğinde değişiklik yapın (özellik kodu, tür vb.) bu, özel özelliğinizi gönderim bilgilerine ekler


ancak bu alan verilerini tabloya nasıl kaydedebilirim? Lütfen kodu paylaşabilirsiniz? teşekkürler
Magento2 Devloper

eklentinizi di.xmldosyada nasıl tanımladığınızı gösterebilir misiniz ?
Vlad Patru

kontrol Ben alan kodu kaydetmek ve iyi çalışıyor ama sipariş nakliye adresi alanında görüntülemek nasıl?
Magento2 Devloper

güncelleme için teşekkürler ama yukarıdaki soruma bakın. işleri görüntüleyin, ancak sipariş görünümü ve e-posta şablonunda görüntülenmez. teşekkürler
Magento2 Devloper

getShippingAddress()tüm alanları adresin kendisine ayarlayan işlevi olan alanlar ile gösteriliyor , bu yüzden bu kodu ekledim, bu özelliği gönderim adresinin kendisine
eklemelidir
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.