গ্রাহক ঠিকানা সম্পাদনা ফর্মটিতে কীভাবে গ্রাহক কাস্টম-বৈশিষ্ট্য যুক্ত করবেন?


19

আমি customer_addressটাইপ হিসাবে একটি গ্রাহক কাস্টম বৈশিষ্ট্য যুক্ত করেছি এবং এটি অ্যাডমিনে এবং অনেপেজ চেকআউটে পাশাপাশি শিপিং এবং বিলিং ঠিকানার ক্ষেত্রে সঠিকভাবে চলে।

আমি তৈরি করেছি: my_namespace/my_module/etc/module.xmlএবং registration.php composer.jsonমডিউল বেস ডিরেক্টরিতে ফাইল।

my_namespace / my_module / সেটআপ / InstallData.php

namespace Namespace\Module\Setup;

use Magento\Framework\Module\Setup\Migration;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;

/**
 * @codeCoverageIgnore
 */
class InstallData implements InstallDataInterface
{
    /**
     * Customer setup factory
     *
     * @var CustomerSetupFactory
     */
    private $customerSetupFactory;

    /**
     * Init
     *
     * @param CustomerSetupFactory $customerSetupFactory
     */
    public function __construct(\Magento\Customer\Setup\CustomerSetupFactory $customerSetupFactory)
    {
        $this->customerSetupFactory = $customerSetupFactory;
    }

    /**
     * {@inheritdoc}
     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
     */
    public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
    {
        /** @var CustomerSetup $customerSetup */
        $customerSetup = $this->customerSetupFactory->create(['setup' => $setup]);

        $setup->startSetup();

        // insert attribute
        $customerSetup->addAttribute('customer_address', 'attr_code',  [
            'label' => 'My attribute',
            'type' => 'varchar',
            'input' => 'text',
            'position' => 45,
            'visible' => true,
            'required' => false,
            'system' => 0
        ]);

        $MyAttribute = $customerSetup->getEavConfig()->getAttribute('customer_address', 'attr_code');
        $MyAttribute->setData(
            'used_in_forms',
            ['adminhtml_customer_address', 'customer_address_edit', 'customer_register_address']
        );
        $MyAttribute->save();

        $setup->endSetup();
    }
}

এখন আমাকে গ্রাহক addএবং editঠিকানা ফর্মের এ্যাট্রিবিউট ফিল্ড যুক্ত করতে হবে যা magento_customer / ভিউ / ফ্রন্টএন্ড / টেম্পলেট / ঠিকানা / edit.phtml ফাইলের সাথে সম্পর্কিত

আমি ক্ষেত্রটি যুক্ত করেছি তবে আমি সেই গুণটির মান পেতে এবং সংরক্ষণ করতে সক্ষম নই।


কোন ম্যাজেন্টো সংস্করণ?
সোহেল রানা

ম্যাজেন্টো সিই 2.1.0
এলে

হাই আলে, আপনি দয়া করে কাস্টম গ্রাহক ঠিকানার জন্য আপনার কাজের কোডটি ভাগ করতে পারেন। আমারও একই কার্যকারিতা যুক্ত করতে হবে।
রাহুল

উত্তর:


9

কাস্টম গ্রাহক বৈশিষ্ট্যগুলি অগ্রভাগে কখনই কেবল "উপস্থিত হবে না" যেমন তারা ব্যাকএন্ডে করে। সীমান্তে এগুলি প্রদর্শন করে এমন কোডটি একটি কাস্টম পিএইচটিএমএল ফাইলে অবস্থিত।

ম্যাজেন্টো EE এর এই কার্যকারিতাটি অন্তর্নির্মিত। আপনি যদি এগিয়ে যেতে এবং কাস্টম বৈশিষ্ট্যগুলি যুক্ত করার চেষ্টা করতে চান তবে এটি কিছুটা জটিল।

প্রথমত, আপনাকে অবশ্যই মডিউলটিতে এগুলি করতে হবে বা এটি ঠিক কাজ করছে না, এবং এটি পরে ডিবাগ করা / আপগ্রেড করা কঠিন হতে চলেছে।

আপনাকে এই জিনিসগুলি করতে হবে:

  • বৈশিষ্ট্য তৈরি করুন (এটি অ্যাডমিনে প্রদর্শিত হলে আপনি এটি করেছেন)
  • রেফারেন্সকন্টেইনার form.additional.info জন্য সীমানা বিন্যাস ওভাররাইড করুন
  • অতিরিক্ত বৈশিষ্ট্য (গুলি) দেখানোর জন্য একটি টেমপ্লেট পিএইচটিএমএল ফাইল যুক্ত করুন
  • নতুন বৈশিষ্ট্যগুলি লোড করতে এবং এইচটিএমএল তৈরি করতে একটি ব্লক পিএইচপি ফাইল যুক্ত করুন
  • অন্যান্য জিনিস যেমন প্রক্রিয়াটি কীভাবে স্বয়ংক্রিয় করা যায় এবং আপনার তৈরি করা একটির নাম লোড করার জন্য হার্ড কোডিংয়ের পরিবর্তে গুণকগুলি লোড করতে শিখুন।

আপনি ব্লক পিএইচপিতে আপনার কাস্টম বৈশিষ্ট্যগুলি লোড করতে পারেন। তারপরে আপনার লেআউটটি কেবল এটির customer_account_create.xmlমতো যুক্ত করুন:

<?xml version="1.0"?>

<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
    <update handle="customer_form_template_handle"/>
    <body>
        <referenceContainer name="form.additional.info">
            <block class="Company\Customformattributes\Block\FormCustomer" template="Company_Customformattributes::customattributes.phtml" name="customer_form_user_attributes" cacheable="false">
                <action method="setFormCode">
                    <argument name="code" xsi:type="string">customer_account_edit</argument>
                </action>
                <action method="setEntityModelClass">
                    <argument name="code" xsi:type="string">Magento\Customer\Model\Customer</argument>
                </action>
            </block>
        </referenceContainer>
    </body>
</page>

আপনার ব্লক পিএইচপি লোড করা, আপনার পিএইচটিএমএল লোড করা এবং এটি সঠিক পৃষ্ঠাতে পেতে এটি ম্যাজিক সস।

এটি সততার সাথে একটি সম্পূর্ণ উত্তর নয়, এর আরও অনেক কিছুই রয়েছে তবে আপনি মূল ধারণাটি পেয়ে যান।


আপনি দয়া করে আপনার উত্তরটি সম্পূর্ণ করতে পারেন? আপনি ব্লক এবং টেমপ্লেট ফাইলে কি প্রবেশ করেছেন?
চিরাগ

setEntityModelClass ক্রিয়াটি আমাদের অ্যাট্রিবিউটটি স্বয়ংক্রিয়ভাবে সংরক্ষণ করতে পারে বা বৈশিষ্ট্যটি সংরক্ষণ করার জন্যও আমাদের কোড লিখতে হবে?
সিদ্ধেশ

2

আপনার প্রশ্নের উত্তর দেওয়া যায় না, কারণ পর্যাপ্ত কোড সরবরাহ করা হয়নি, তবে একটু পরামর্শ দেওয়া উচিত। আপনি কি এই টিউটোরিয়ালটি পরীক্ষা করেছেন গ্রাহককে আটকেরত টিউটোরিয়াল যুক্ত করে ?

ম্যাজেন্টো ২.১ থেকে যেহেতু একটি পরিবর্তন আছে এবং পদ্ধতিগুলি -> সেভ () হ্রাস করা হয়েছে। পরিবর্তে আপনার সংগ্রহস্থলগুলি ব্যবহার করা উচিত। গ্রাহক EAV এর উদাহরণস্বরূপ আপনার ব্যবহার করা উচিত

Magento \ Eav \ মডেল \ AttributeRepository

আপনার ক্ষেত্রে, স্ক্রিপ্টের দ্বিতীয় অংশে পরিবর্তন করা উচিত

/** Magento\Eav\Model\AttributeRepository $attributeRepository */
    $attributeRepository->save($MyAttribute);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.