व्यवस्थापक शिपिंग पता बॉक्स में एक कस्टम विशेषता कैसे दिखाएं?


13

मैंने चेकआउट पृष्ठ पर कस्टम मानों के साथ ड्रॉप-डाउन कस्टम फ़ील्ड जोड़ा है। यह ठीक काम कर रहा है डेटाबेस में विशेषता मान भी सहेजता है लेकिन ऑर्डर शिपिंग पते में प्रदर्शित नहीं होता है। किसी भी विचार को कैसे दिखाना है?

यहाँ छवि विवरण दर्ज करें

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

लगाना

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

यहाँ छवि विवरण दर्ज करें

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

    }
}

यहाँ छवि विवरण दर्ज करें रीफ़ एक्सटेंशन

ऊपर प्लगइन ठीक काम कर रहा है और quot_address तालिका में मूल्यों को बचा सकता है। मैं आदेश दृश्य पृष्ठ और ईमेल टेम्पलेट में भी कस्टम विशेषता प्रदर्शित करना चाहता हूं। किसी को भी अंदाजा है कि कोड में क्या गलत है। अग्रिम में धन्यवाद



आपका उदाहरण magento2.2.3 में काम नहीं करता है
जिग्स परमार

अपना मुद्दा साझा करें ताकि मैं इसे देख
सकूं

अतिथि चेकआउट सक्षम होने पर मैं ईमेल आईडी कैसे प्राप्त कर सकता हूं
केतन बोरदा

उद्धरण और ऑर्डर ऑब्जेक्ट इसे वापस
लौटाएं

जवाबों:


4

सिस्टम कॉन्फ़िगरेशन पर नेविगेट करें

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

एड्रेस टेम्प्लेट से, HTML सेक्शन ढूंढें, चेकबॉक्स सिस्टम वैल्यू को अनचेक करें, निम्न कोड जोड़ें। यदि आवश्यक हो तो आप एक विशेषता कोड बदल सकते हैं।

ईमेल टेम्प्लेट के लिए, समान पता प्रारूप [HTML पता प्रारूप] काम करेगा।

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

दिखाओ php bin/magento cache:cleanनहीं तो भागो ।

एक विशेषता आदेश दृश्य पृष्ठ और आदेश ईमेल पर भी दिखाई देगा।

ऊपर दोनों पते में प्रदर्शित किया गया है, लेकिन यदि आप केवल शिपिंग में दिखाना चाहते हैं, तो आपको शिपिंग एड्रेस टेबल में केवल एसएमएस मूल्य डालना होगा ( sales_order_address and quote_addressबिलिंग नहीं) ठीक काम नहीं कर रहा है। का आनंद लें

तालिका दृश्य -

यहाँ छवि विवरण दर्ज करें

परिणाम -

यहाँ छवि विवरण दर्ज करें


मैं केवल शिपिंग पते में कैसे बचा सकता हूं?
Magento2 Devloper

आपको ईवेंट जोड़ने की आवश्यकता है। या यह एक उपयोगी हो सकता है - magento.stackexchange.com/questions/138902/…
Japs M2 Developer

वास्तव में यह मेरे मामले के लिए काम नहीं करता है, मुझे समझ में नहीं आता है कि एक चर विस्तार एट्रिब्यूट को कैसे संदर्भित कर सकता है जो पहले से ही quot_address & sales_order_address तालिका में सहेजा गया था। लगता है मुझे दो जानकारी को ओवरराइड करने की जरूरत है। एफटीपी एमएल टेम्पलेट
एचकेगुइल

4

मेरे दृष्टिकोण के साथ प्रयास करें। प्रश्न में वर्णित के रूप में विचार मॉड्यूल में ले रहा है।

  1. प्रश्न में दिखाए गए समान मॉड्यूल का उपयोग किया। कोई परिवर्तन नहीं होता है

  2. स्थापित संदर्भ एक्सटेंशन जिसे आप संदर्भित कर रहे हैं (एसएमएस एक्सटेंशन)

सिस्टम कॉन्फ़िगरेशन पर नेविगेट करें

स्टोर -> कॉन्फ़िगरेशन -> ग्राहक -> ग्राहक कॉन्फ़िगरेशन -> पता टेम्पलेट

एड्रेस टेम्प्लेट से, HTML सेक्शन ढूंढें, चेकबॉक्स सिस्टम वैल्यू को अनचेक करें, निम्न कोड जोड़ें। यदि आवश्यक हो तो आप एक विशेषता कोड बदल सकते हैं।

ईमेल टेम्पलेट के लिए, एक ही पता प्रारूप [HTML पता प्रारूप] काम करेगा।

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

यहाँ छवि विवरण दर्ज करें

कैश साफ़ करने के लिए आवश्यक हो सकता है।

दिखाओ php bin/magento cache:cleanनहीं तो चलाओ

एक विशेषता आदेश दृश्य पृष्ठ और आदेश ईमेल पर भी दिखाई देगा।

यहाँ छवि विवरण दर्ज करें


आपके उत्तर के लिए धन्यवाद। हम केवल शिपिंग पता क्षेत्र में प्रदर्शन कैसे प्रबंधित करते हैं?
Magento2 Devloper

केवल शिपिंग पते के लिए आपको अधिक सिस्टम कॉन्फ़िगरेशन बनाना पड़ सकता है html_for_shippingMagento/sales/view/adminhtml/templates/order/view/info.phtml, रेखा से नीचे को खोजने $block->getFormattedAddress( $order->getShippingAddress() );के लिए परिवर्तन $block->getFormattedShippingAddress( $order->getShippingAddress() );में info.phpफ़ाइल, आप केवल शिपिंग पते के प्रारूपण के लिए नया तरीका बना सकते हैं। आप प्रारूप विधि 'html' के पैरामीटर को 'html_for_shipping' में बदल सकते हैं, जहाँ 'html_for_shipping' शिपिंग पता प्रारूप के लिए आपका नया सिस्टम कॉन्फ़िगरेशन मान होगा।
संदीप

अचानक यह काम नहीं कर रहा है। मुझे एसएमएस विवरणों के क्रम में प्रदर्शित न करें। कोई उपाय?
Magento2 Devloper

मैंने यह @ सैंडिप की कोशिश की..लेकिन यह प्रदर्शित नहीं होता है .... कृपया मेरी मदद करें
विशाली मारियाप्पन

3

यदि विशेषता सही ढंग से सहेजी गई है, तो आपको टेम्पलेट को संबोधित करने के लिए विशेषता जोड़ने की आवश्यकता है। इनमें पाया जा सकता है

स्टोर -> कॉन्फ़िगरेशन -> ग्राहक -> ग्राहक कॉन्फ़िगरेशन -> पता टेम्पलेट

आप अंत में कुछ इस तरह जोड़ सकते हैं:

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

टेम्पलेट प्रकार के आधार पर, आप <br/>नई लाइनें बनाने के लिए उपयोग कर सकते हैं ।


मैं केवल शिपिंग पता प्रदर्शित करना चाहता हूं और मैं ऑर्डर व्यू पेज पर भी कैसे प्रबंधित कर सकता हूं?
Magento2 Devloper

ये टेम्पलेट हर जगह उपयोग किए जाते हैं। फ्रंटेंड, बैकएंड, पीडीएफ, ईमेल ... यदि विशेषता केवल शिपिंग पते में सहेजी जाती है, तो यह केवल वहां प्रदर्शित होगी
लैंगली

ठीक है, मुझे इसे देखना चाहिए
Magento2 Devloper

काम नहीं कर रहा। कहीं प्रदर्शित नहीं। - nimb.ws/9cnpHW
Magento2 Devloper

हाय @Langley उत्तर के लिए धन्यवाद, iam केवल बिलिंग पते में इसे शिपिंग पते में प्रदर्शित नहीं कर रहा है, मैं इसे दोनों स्थानों पर प्रदर्शित करना चाहता हूं।
शिवाशंकर मी

2

मुझे क्या करना होगा कि इस तरह: यह करने के लिए जोड़ quoteऔर sales_orderऔर डेटा निम्नलिखित कोड का उपयोग वहाँ से काम (भी अगर आप मौजूदा डीबी तालिका अद्यतन करने की आवश्यकता UpgradeSchema स्क्रिप्ट का उपयोग कर प्रयास करें, InstallSchema नई डीबी तालिकाओं के लिए इस्तेमाल किया जाना चाहिए)

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

अपडेट करें

इस प्रकार एक मिश्रण js बनाएँ:

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

इसके अलावा, आप एक होना चाहिए extension_attributes.xmlमें Your_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>

जहाँ आवश्यक हो, परिवर्तन करें (विशेषता कोड, प्रकार, आदि) यह आपके कस्टम विशेषता को शिपिंग जानकारी में जोड़ देगा


लेकिन इस फ़ील्ड डेटा को तालिका में सहेजने के लिए आप कोड साझा कैसे कर सकते हैं? धन्यवाद
Magento2 Devloper

क्या आप मुझे बता सकते हैं कि आपने di.xmlफ़ाइल में अपने प्लगइन को कैसे परिभाषित किया ?
व्लाद पैट्रू

जाँच करें कि मैंने फ़ील्ड कोड सहेजने और ठीक काम करने के लिए अपडेट किया है लेकिन ऑर्डर शिपिंग एड्रेस क्षेत्र में कैसे प्रदर्शित किया जाए?
Magento2 Devloper

अद्यतन के लिए धन्यवाद, लेकिन मेरे उपरोक्त प्रश्न को देखो। किए गए काम को बचाएं लेकिन ऑर्डर दृश्य और ईमेल टेम्पलेट पर प्रदर्शित न करें। धन्यवाद
Magento2 Devloper

फ़ील्ड्स उस getShippingAddress()फ़ंक्शन के साथ शो होते हैं जो सभी फ़ील्ड्स को स्वयं पते पर सेट करता है, इसलिए मैंने यह कोड क्यों जोड़ा है, इसने आपकी विशेषता को शिपिंग पते पर स्वयं जोड़ना चाहिए
Vlad Patru
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.