Magento 2 শিপিং পদ্ধতিতে অতিরিক্ত ডেটা


11

আমি নতুন শিপিং পদ্ধতি তৈরি করছি এবং শিপিংয়ের হারগুলি চেকআউট করার জন্য আমার নতুন কলাম যুক্ত করা দরকার। ডেটা কাস্টম শিপিংয়ের পদ্ধতি সেটিংস থেকে আসে, উদাহরণস্বরূপ পদ্ধতির বিবরণ। বা কিছু ইনপুট ক্ষেত্র যেখানে গ্রাহক তথ্য যুক্ত করতে পারেন (ডেটা সম্ভবত উদ্ধৃতিতে এবং পরে ক্রমে সংরক্ষণ করা হবে)।

সম্ভবত সবার সহজতম অংশটি হ'ল টেম্পলেট ব্যবহার করে implement

Magento_Checkout/web/template/shipping.html

এটি শুধু এটি প্রয়োজন

<div data-bind="text: method.description"></div>

সমস্যাটি হ'ল আমি কীভাবে কাস্টম ডেটা যুক্ত করতে পারি তা বুঝতে পারি না। এটি যোগ করার জন্য এটি যথেষ্ট নয়:

public function collectRates(RateRequest $request)
{
    if (!$this->isActive()) return false;

    $method = $this->rateMethodFactory->create();
    $method->setData('carrier', $this->getCarrierCode());
    $method->setData('carrier_title', $this->getConfigData('title'));
    $method->setData('method_title', $this->getConfigData('title'));
    $method->setData('method', $this->getCarrierCode());
    $method->setPrice($this->_price);
    $method->setData('cost', $this->_price);

    // custom
    $method->setData('description', $this->getConfigData('description'));

    $result = $this->rateResultFactory->create();
    $result->append($method);

    return $result;
}

এইচটিএমএলের ডেটা জেএস রেট () থেকে আসে, যা এপিআই থেকে ডেটা পায়:

<route url="/V1/carts/:cartId/shipping-methods" method="GET">
    <service class="Magento\Quote\Api\ShippingMethodManagementInterface" method="getList"/>
    <resources>
        <resource ref="Magento_Cart::manage" />
    </resources>
</route>

এর পরে অনেকগুলি পদক্ষেপ রয়েছে যখন কিছু আসলে সংগ্রহ করা হয়। আমি পেয়েছি

ম্যাজেন্টো \ উক্তি \ মডেল \ কার্ট \ শিপিংমেডকনভার্টার মডেল টোডেটাঅবজেক্ট ()

এটি সবচেয়ে প্রতিশ্রুতিবদ্ধ লাগছিল তবে আমি যদি এতে আমার গুণাবলী যুক্ত করার চেষ্টা করি তবে কিছুই ঘটে না।

সুতরাং আমার প্রশ্নটি হল, যদি শিপিং রেটে নতুন ডেটা যুক্ত করার কোনও উপায় থাকে? এম 1 এ এটি সম্ভব ছিল। এটি এম 2 সম্ভব না হলে এটি পাগল হবে।

এটি সম্ভব হওয়ার অনেক কারণ রয়েছে। উদাহরণস্বরূপ যদি আমি একাধিক স্টোর ড্রপ ডাউন বা অনুরূপ কিছু দিয়ে স্টোর পদ্ধতিতে বাছাই করতে চাইতাম।


হাই, আপনি যদি সমাধান পেয়ে থাকেন তবে দয়া করে ভাগ করে নিতে পারেন?
কনিকা

আচ্ছা, এর কোন সমাধান?
পীযূষ ডাঙরে

আমি এই উত্তর অপেক্ষা করছি।
দিয়েগো কুইরোজ

উত্তর:


6

নীচের মতো এক্সটেনশন অ্যাট্রিবিউট হিসাবে বর্ণনা যুক্ত করে আপনার এটি করা দরকার:

/etc/extension_attributes.xML এর মতো হওয়া উচিত:

<?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\ShippingMethodInterface">
        <attribute code="method_description" type="string" />
    </extension_attributes>
</config>

ইত্যাদি / 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\Quote\Model\Cart\ShippingMethodConverter">
        <plugin name="add_description_to_carrier" type="<Vendor>\<module>\Plugin\Carrier\Description" disabled="false" sortOrder="30"/>
    </type>
</config>

প্লাগইন ফাইল বিক্রেতা \ মডিউল \ প্লাগইন \ ক্যারিয়ার \ বিবরণ.এফপি এই জাতীয় হওয়া উচিত:

<?php

namespace Vendor\module\Plugin\Carrier;

use Magento\Quote\Api\Data\ShippingMethodExtensionFactory;

/**
 * Class Description
 * 
 */
class Description
{
    /**
     * @var ShippingMethodExtensionFactory
     */
    protected $extensionFactory;

    /**
     * Description constructor.
     * @param ShippingMethodExtensionFactory $extensionFactory
     */
    public function __construct(
        ShippingMethodExtensionFactory $extensionFactory
    )
    {
        $this->extensionFactory = $extensionFactory;
    }

    /**
     * @param $subject
     * @param $result
     * @param $rateModel
     * @return mixed
     */
    public function afterModelToDataObject($subject, $result, $rateModel)
    {
        $extensionAttribute = $result->getExtensionAttributes() ?
            $result->getExtensionAttributes()
            :
            $this->extensionFactory->create()
        ;
        $extensionAttribute->setMethodDescription($rateModel->getMethodDescription());
        $result->setExtensionAttributes($extensionAttribute);
        return $result;
    }
}

এত কিছুর পরেও আপনি নীচে নীচে ফ্রিঅনডে বর্ণনাটি পাবেন:

<div data-bind="text: method.extension_attributes.method_description"></div>

এটি কাজ করছে না।
ধডুক মিতেশ

3

শীর্ষ রেট করা উত্তরটি কাজ করে না কারণ তিনি description ম্যাজেন্টো ote উক্তি \ মডেল \ উক্তি \ ঠিকানা \ হার শ্রেণীর অভ্যন্তরে "বিবরণ" মান সেট করতে ভুলে গিয়েছিলেন । যদি আমরা এই শ্রেণিতে বিবরণ মান সেট করতে একটি প্লাগইন তৈরি না করি, তবে $ হারমোডেল-> getMethodDescript () সর্বদা খালি ফিরে আসবে। সমাধানটির একটি সম্পূর্ণ-কার্যকারী সংস্করণ:

[বিক্রেতার] / [মডিউল] /etc/extension_attributes.xml

<?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\ShippingMethodInterface">
        <attribute code="description" type="string" />
    </extension_attributes>
</config>

[বিক্রেতার] / [মডিউল] /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\Quote\Model\Cart\ShippingMethodConverter">
        <plugin name="add_description_to_method" type="<Vendor>\<module>\Plugin\Carrier\Description" disabled="false" sortOrder="30"/>
    </type>

<type name="Magento\Quote\Model\Quote\Address\Rate">
        <plugin name="add_description_to_method_rate" type="<Vendor>\<module>\Plugin\Quote\Address\Rate" disabled="false" sortOrder="3"/>
    </type>
</config>

[বিক্রেতার] / [মডিউল] /Plugin/Carrier/Description.php

<?php

namespace Vendor\module\Plugin\Carrier;

use Magento\Quote\Api\Data\ShippingMethodExtensionFactory;


class Description
{
    /**
     * @var ShippingMethodExtensionFactory
     */
    protected $extensionFactory;

    /**
     * Description constructor.
     * @param ShippingMethodExtensionFactory $extensionFactory
     */
    public function __construct(
        ShippingMethodExtensionFactory $extensionFactory
    )
    {
        $this->extensionFactory = $extensionFactory;
    }

    /**
     * @param $subject
     * @param $result
     * @param $rateModel
     * @return mixed
     */
    public function afterModelToDataObject($subject, $result, $rateModel)
    {
        $extensionAttribute = $result->getExtensionAttributes() ?
            $result->getExtensionAttributes()
            :
            $this->extensionFactory->create()
        ;
        $extensionAttribute->setDescription($rateModel->getDescription());
        $result->setExtensionAttributes($extensionAttribute);
        return $result;
    }
}

এবং পরিশেষে:

[বিক্রেতার] / [মডিউল] /Plugin/Quote/Address/Rate.php

<?php
namespace <Vendor>\<Module>\Plugin\Quote\Address;

class Rate
{
    /**
     * @param \Magento\Quote\Model\Quote\Address\AbstractResult $rate
     * @return \Magento\Quote\Model\Quote\Address\Rate
     */
    public function afterImportShippingRate($subject, $result, $rate)
    {
        if ($rate instanceof \Magento\Quote\Model\Quote\Address\RateResult\Method) {
            $result->setDescription(
                $rate->getDescription()
            );
        }

        return $result;
    }
}

বিন / ম্যাজেন্টো সেটআপ চালাতে ভুলবেন না: ডি: সংকলন, অন্যথায় বর্ধিত বৈশিষ্ট্য উত্পন্ন হবে না।

আপনি এটি ব্যবহার করে আপনার টেম্পলেটটিতে ডেটা বাঁধতে পারেন:

<div data-bind="text: method.extension_attributes.description"></div>

বা একটি মন্তব্য হিসাবে, এই মত:

<!-- ko text: $data.extension_attributes.description --><!-- /ko -->

এছাড়াও আপনার কাস্টম ক্যারিয়ার এক্সটেনশনের অভ্যন্তরে $ পদ্ধতি-> সেটডেস্ক্রিপশন (' এখানে আপনার কাস্টম বিবরণ') বা $ পদ্ধতি-> সেটডেটা ('বিবরণ', 'আপনার কাস্টম বিবরণ এখানে') ব্যবহার করতে ভুলবেন না (এর জন্য মূল প্রশ্নটি দেখুন) রেফারেন্স)।


0

আপনাকে ইন্টারফেস ফাইলটিতে পদ্ধতির নামগুলি ঘোষণা করতে হবে, এই ফাইলটির পথ

vendor/magento/module-quote/Api/Data/ShippingMethodInterface.php 

উদাহরণ:
শীর্ষে স্থির ঘোষণা করুন

const KEY_DESCRIPTION = 'description';  

এরপরে পদ্ধতিটি সংজ্ঞায়িত করুন

public function getDescription();
public function setDescription($desc);

তারপরে আপনাকে নিম্নলিখিত ফাইলটিতে মানগুলি নির্ধারণ করতে হবে

vendor/magento/module-quote/Model/Cart/ShippingMethod.php 

নিম্নরূপ

public function getDescription()
{
  return $this->_get(self::KEY_DESCRIPTION);
}
public function setDescription($desc)
{
  return $this->setData(self::KEY_DESCRIPTION, $desc);
}   

পাবলিক এপি-তে পদ্ধতি যুক্ত করা হচ্ছে (বিক্রেতা / ম্যাজেন্টো / মডিউল-কোট / এপিআই / ডেটা / শিপিংমথোডে ইন্টারফেস)। ??? কখনই না।
পিট জাওরোস্কি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.