관리자 배송 주소 상자에 맞춤 속성을 표시하는 방법은 무엇입니까?


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

    }
}

여기에 이미지 설명을 입력하십시오 리프 확장

위의 플러그인은 정상적으로 작동하며 quote_address 테이블에 값을 저장합니다. 주문보기 페이지와 이메일 템플릿에도 사용자 정의 속성을 표시하고 싶습니다. 미리 감사드립니다



귀하의 예제는 magento2.2.3에서 작동하지 않습니다
Jigs Parmar

내가 확인할 수 있도록 문제를 공유하십시오
Magento2 Devloper

게스트 체크 아웃이 가능하게 될 때 나는 이메일 ID를 얻을 수있는 방법
케탄 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표시되지 않으면 실행하십시오 .

주문보기 페이지 및 주문 이메일에도 속성이 표시됩니다.

위의 주소는 두 주소 모두에 표시되지만 배송에만 표시하려면 sales_order_address and quote_address청구 주소가 아닌 배송 주소 표 ( ) 에 SMS 값만 입력하면됩니다 . 즐겨

테이블 뷰-

여기에 이미지 설명을 입력하십시오

결과-

여기에 이미지 설명을 입력하십시오


배송지 주소로만 저장하려면 어떻게해야합니까?
Magento2 Devloper

이벤트를 추가해야합니다. 또는 이것이 유용 할 수 있습니다 -magento.stackexchange.com/questions/138902/…
M2 개발자

실제로 그것은 내 경우에는 작동하지 않습니다, 변수가 이미 quote_address & sales_order_address 테이블에 저장된 확장 속성을 참조하는 방법을 이해하지 못합니다. 2 개의 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로 시도했다. 그러나 그것은 표시되지 않는다. ... 제발 도와주세요
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 답변 주셔서 감사합니다, iam 청구서 수신 주소로 배송지 주소로 표시되지 않는 경우에만 두 곳에서 표시하고 싶습니다.
shivashankar m

2

나는이 같은 것을 할 것 다음에 추가 quote하고 sales_order다음과 같은 코드가 사용에서 데이터 작업 (당신은 DB 테이블을 기존 업데이트해야하는 경우도 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();
    }
}

최신 정보

다음과 같이 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.xmlYour_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 2014 년

업데이트 주셔서 감사하지만 위의 질문을 봐. 수행 한 작업을 저장하지만 주문보기 및 이메일 템플릿에는 표시되지 않습니다. 감사합니다
Magento2 Devloper

이 필드에는 getShippingAddress()주소 자체로 설정된 모든 필드를 가져 오는 함수가 포함되어 있습니다.이 코드를 추가 한 이유는 배송 주소 자체에 속성을 추가해야합니다.
Vlad Patru
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.