จะแสดงแอททริบิวที่กำหนดเองในช่องที่อยู่ผู้ดูแลระบบได้อย่างไร


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

    }
}

ป้อนคำอธิบายรูปภาพที่นี่ Refe Extension

ปลั๊กอินด้านบนทำงานได้ดีและบันทึกค่าในตาราง quote_address ฉันต้องการที่จะแสดงคุณลักษณะที่กำหนดเองในหน้ามุมมองคำสั่งซื้อและแม่แบบอีเมลอีกคนมีความคิดที่ผิดกับรหัส ขอบคุณล่วงหน้า



ตัวอย่างของคุณไม่ทำงานใน magento2.2.3
Jigs Parmar

แบ่งปันปัญหาของคุณเพื่อให้ฉันสามารถตรวจสอบได้
Magento2 Devloper

ฉันจะรับรหัสอีเมลได้อย่างไรเมื่อเปิดใช้งานการชำระเงินของผู้เข้าพัก
Ketan Borada

อ้างและสั่งซื้อวัตถุคืนมัน
Magento2 Devloper

คำตอบ:


4

นำทางไปยังการกำหนดค่าระบบ

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

จากเทมเพลตที่อยู่, ค้นหาส่วน HTML, ลบค่าระบบช่องทำเครื่องหมาย, เพิ่มรหัสต่อไปนี้ คุณสามารถเปลี่ยนรหัสแอตทริบิวต์หากต้องการ

สำหรับเทมเพลตอีเมลรูปแบบที่อยู่เดียวกัน [รูปแบบที่อยู่ HTML] จะใช้งานได้

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

เรียกใช้php bin/magento cache:cleanถ้าไม่แสดง

แอตทริบิวต์จะแสดงที่หน้ามุมมองคำสั่งซื้อและอีเมลคำสั่งซื้อด้วย

ด้านบนจะแสดงในทั้งสองที่อยู่ แต่ถ้าคุณต้องการเพียงแสดงในการจัดส่งแล้วคุณต้องใส่เฉพาะค่า SMS ในตารางที่อยู่จัดส่ง ( sales_order_address and quote_address) ไม่เรียกเก็บเงินมันทำงานได้ดี สนุก

มุมมองตาราง -

ป้อนคำอธิบายรูปภาพที่นี่

ผลลัพธ์ -

ป้อนคำอธิบายรูปภาพที่นี่


ฉันจะบันทึกเฉพาะในที่อยู่จัดส่งได้อย่างไร
Magento2 Devloper

คุณต้องเพิ่มกิจกรรม หรืออันนี้อาจมีประโยชน์ - magento.stackexchange.com/questions/138902/ …
Japs M2 Developer

ที่จริงมันใช้ไม่ได้กับกรณีของฉันฉันไม่เข้าใจว่าตัวแปรสามารถอ้างถึง attrbute ส่วนขยายที่บันทึกไปแล้วในตาราง quote_address & sales_order_address ดูเหมือนว่าฉันจะต้องแทนที่เทมเพลต info.phtml สองรายการ
hkguile

4

ลองด้วยวิธีของฉัน คำนึงถึงโมดูลการพิจารณาตามที่อธิบายไว้ในคำถาม

  1. ใช้โมดูลเดียวกันที่แสดงในคำถาม ไม่มีการเปลี่ยนแปลง

  2. ติดตั้งส่วนขยายการอ้างอิงที่คุณกำลังอ้างอิง (ส่วนขยาย SMS)

นำทางไปยังการกำหนดค่าระบบ

ร้านค้า -> การกำหนดค่า -> ลูกค้า -> การกำหนดค่าลูกค้า -> เทมเพลตที่อยู่

จากเทมเพลตที่อยู่, ค้นหาส่วน HTML, ลบค่าระบบช่องทำเครื่องหมาย, เพิ่มรหัสต่อไปนี้ คุณสามารถเปลี่ยนรหัสแอตทริบิวต์หากต้องการ

สำหรับเทมเพลตอีเมลรูปแบบที่อยู่เดียวกัน [รูปแบบที่อยู่ HTML] จะใช้งานได้

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

ป้อนคำอธิบายรูปภาพที่นี่

อาจต้องล้างแคช

เรียกใช้php bin/magento cache:cleanถ้าไม่แสดง

แอตทริบิวต์จะแสดงที่หน้ามุมมองคำสั่งซื้อและอีเมลคำสั่งซื้อด้วย

ป้อนคำอธิบายรูปภาพที่นี่


ขอบคุณสำหรับคำตอบ. เราจัดการแสดงเฉพาะในพื้นที่ที่อยู่จัดส่งได้อย่างไร
Magento2 Devloper

html_for_shippingคุณอาจต้องสร้างการกำหนดค่าระบบมากขึ้นสำหรับที่อยู่จัดส่งสินค้าเป็นเพียง Magento/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' จะเป็นค่าการกำหนดค่าระบบใหม่ของคุณสำหรับรูปแบบที่อยู่สำหรับจัดส่ง
sandip

ทันใดนั้นมันก็ไม่ทำงาน ไม่แสดงรายละเอียด SMS ตามลำดับ ความคิดใด ๆ
Magento2 Devloper

ฉันลองใช้ @ sandip..But แต่ไม่ปรากฏขึ้น .... โปรดช่วยฉันด้วย
Vishali Mariappan

3

หากมีการบันทึกแอตทริบิวต์อย่างถูกต้องคุณจะต้องเพิ่มแอตทริบิวต์ไปยังที่อยู่แม่แบบ สิ่งเหล่านี้สามารถพบได้ใน

ร้านค้า -> การกำหนดค่า -> ลูกค้า -> การกำหนดค่าลูกค้า -> เทมเพลตที่อยู่

คุณสามารถเพิ่มท้ายสิ่งที่ชอบ:

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

คุณสามารถใช้<br/>เพื่อสร้างบรรทัดใหม่ได้ทั้งนี้ขึ้นอยู่กับประเภทแม่แบบ


ฉันต้องการแสดงเฉพาะที่อยู่สำหรับจัดส่งและฉันจะจัดการได้อย่างไรในหน้าดูคำสั่งซื้อ
Magento2 Devloper

แม่แบบเหล่านี้ถูกนำมาใช้ทุกที่ ส่วนหน้า, ส่วนหลัง, PDF, อีเมล ... หากบันทึกแอตทริบิวต์ไว้เฉพาะในที่อยู่จัดส่งจะมีการแสดงเฉพาะที่นั่น
Langley

ตกลงให้ฉันตรวจสอบ
Magento2 Devloper

ไม่ทำงาน. ไม่แสดงผลทุกที่ - nimb.ws/9cnpHW
Magento2 Devloper

สวัสดี @Langley ขอบคุณสำหรับคำตอบฉันได้รับสิ่งนี้เฉพาะในที่อยู่สำหรับการเรียกเก็บเงินที่ไม่แสดงในที่อยู่จัดส่งฉันต้องการแสดงทั้งสองแห่ง
shivashankar m

2

ฉันจะทำเช่นนี้: เพิ่มลงในquoteและsales_orderใช้ข้อมูลจากที่นั่นใช้รหัสต่อไปนี้ (ลองใช้สคริปต์ UpgradeSchema หากคุณต้องการอัปเดตตารางฐานข้อมูลที่มีอยู่ควรใช้ InstallSchema สำหรับตาราง DB ใหม่)

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

UPDATE

สร้าง mixin 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ไฟล์ได้อย่างไร
Vlad Patru

ตรวจสอบฉันอัปเดตบันทึกรหัสฟิลด์และทำงานได้ดี แต่จะแสดงอย่างไรในพื้นที่ที่อยู่สำหรับจัดส่ง
Magento2 Devloper

ขอบคุณสำหรับการอัปเดต แต่ลองดูคำถามข้างต้น บันทึกสิ่งที่ทำแล้วแต่ไม่แสดงในมุมมองคำสั่งซื้อและเทมเพลตอีเมล ขอบคุณ
Magento2 Devloper

เขตข้อมูลที่มีการแสดงด้วยgetShippingAddress()ฟังก์ชั่นที่ได้รับการตั้งค่าทั้งหมดไปยังที่อยู่ตัวเองนั่นคือเหตุผลที่ฉันเพิ่มรหัสนี้มันควรจะเพิ่มคุณสมบัติของคุณไปยังที่อยู่จัดส่งตัวเอง
วลาด Patru
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.