ব্যাক-এন্ড থেকে পণ্য সম্পাদনা করার সময় কাস্টম ডাটাবেস টেবিলের কাস্টম ফিল্ডটি কীভাবে সংরক্ষণ করবেন?


11

আমি ব্যাক-এন্ডে পণ্য ফর্মটিতে কাস্টম ট্যাব প্রদর্শন করতে একটি কাস্টম মডিউল তৈরি করেছি। আমি এই সমাধানটি ব্যবহার করেছি ।

এখন ট্যাবে আমি কাস্টম ডাটাবেস সারণিতে সংরক্ষণ করতে কাস্টম ক্ষেত্রগুলি যুক্ত করছি। বলে<input type="text" name="my_new_field" value="123">

নীচের মত অ্যাডমিন পণ্য সংরক্ষণের জন্য একটি কাস্টম নিয়ামকও তৈরি করেছেন।

ইত্যাদি / 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">
    <preference for="Magento\Catalog\Controller\Adminhtml\Product\Save" type="Namespace\Module\Controller\Adminhtml\Rewrite\Product\Save" />
</config>

এবং নিয়ামক / অ্যাডমিনটিচটিএমএল / পুনর্লিখন / পণ্য / Save.php এ

<?php

    namespace Namespace\Module\Controller\Adminhtml\Rewrite\Product;

    class Save extends \Magento\Catalog\Controller\Adminhtml\Product\save
    {

        public function execute()
        {
            echo "hello"; print_r($_POST); die;

            return parent::execute();
        }
    }

এখন executeফাংশনে আমি পোস্টের মান আশা করছি my_new_field। তবে আমি তা পাচ্ছি না। পাওয়ার পরে আমি কাস্টম সারণিতে ডেটা সংরক্ষণ করতে কাস্টম ক্যোরিগুলি ব্যবহার করব।

আমি কী ভুল করছি বা আমার অন্য কোনও পদ্ধতি ব্যবহার করা উচিত?

আপডেট: 26 আগস্ট

আমি সময় সীমাবদ্ধতা থাকায় আমি পণ্য ট্যাব থেকে ডেটা সংরক্ষণ করতে আজাক্স ফর্মটি ব্যবহার করেছি। আমি @ উইলিয়াম-ওকলির উত্তর গ্রহণ করেছি। এখন @ এমমেজওয়ারেক্স তার উত্তরে যোগ করেছে যে এটি করার কোনও মানক উপায় নয়।

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


1
আরে, আপনি এই কাস্টম সেভ ফিল্ডের জন্য পর্যবেক্ষনে ক্যাটালগপ্রড্রোডাক্টসবেফ্রাউন.এফপি ফাইলটি ব্যবহার করতে পারেন।
পায়েল প্যাটেল

উত্তর:


14

আপনি কেবল "নগ্ন" ইনপুট ক্ষেত্রটি ব্যবহার করতে পারেন, আপনাকে কেবল নিম্নলিখিত বৈশিষ্ট্য যুক্ত করতে হবে:

data-form-part="product_form"

তাই:

<input data-form-part="product_form" type="text" name="my_new_field" value="123">

তারপরে আপনি আপনার ইনপুটটির জন্য পোস্টের ডেটা পেতে সক্ষম হবেন।


7

উপরের সমাধানটি পুরোপুরি সঠিক নয়। আপনি একটি "নগ্ন" এইচটিএমএল উপাদান হিসাবে কোনও ক্ষেত্র যুক্ত করছেন এবং পণ্য ফর্মটি তার নিজস্ব বৈশিষ্ট্যগুলির সাথে একটি ইউআই ফর্ম। একটি বিশেষ শ্রেণি ( vendor/magento/module-ui/view/base/web/js/form/form.js) ক্ষেত্র সংগ্রহ এবং ফর্ম প্রেরণের সময় তাদের বৈধতার জন্য দায়ী। এছাড়াও, এই শ্রেণীর এই ক্ষেত্রগুলি মিস করা উচিত যা এই UI ফর্মের সাথে সম্পর্কিত নয় বা additional fieldsআপনার সমস্ত ক্ষেত্রের মতো নয়। আপনার ক্ষেত্রটি নিয়ামকের কাছে প্রেরণ করা হবে তা নিশ্চিত করার জন্য আপনার নীচের নামকরণটি ব্যবহার করা উচিত:

input type="text" name="product[my_new_field]" value="123"

তবে এটি পুরোপুরি সঠিক নয় কারণ সঠিক সমাধানটি ইউআই থেকে বিচ্যুত হওয়া ব্যবহারের মান নয় এবং এর স্থানীয় উপাদান এবং উপাদানগুলি ব্যবহার করতে পারে না। এক্ষেত্রে আপনার এ জাতীয় বিষয়ে উদ্বিগ্ন হওয়া উচিত নয় কারণ সবকিছু স্বয়ংক্রিয়ভাবে প্রক্রিয়া করা হবে।

প্রক্রিয়াটি বোঝার জন্য আপনি ইউআই ফর্ম ডেটা সংরক্ষণ করার প্রধান পদ্ধতিটি পরীক্ষা করতে পারেন:

/**
 * Submits form
 *
 * @param {String} redirect
 */
submit: function (redirect) {
    var additional = collectData(this.additionalFields),
        source = this.source;

    _.each(additional, function (value, name) {
        source.set('data.' + name, value);
    });

    source.save({
        redirect: redirect,
        ajaxSave: this.ajaxSave,
        ajaxSaveType: this.ajaxSaveType,
        response: {
            data: this.responseData,
            status: this.responseStatus
        },
        attributes: {
            id: this.namespace
        }
    });
},

আপনি এই কোডটি থেকে দেখতে পাচ্ছেন, এর সমস্ত ক্ষেত্র সহ একটি এইচটিএমএল ফর্মটি প্রেরণ করা হয়নি। তবে, this.sourceএবং this.additionalFieldsপ্রেরণ করা হয়েছে তবে এটিতে আপনার উপাদান অন্তর্ভুক্ত নেই কারণ এটি ভুলভাবে ঘোষিত হয়েছে।

08.23.2016 থেকে আপডেট করুন

আমাদের ব্লগ থেকে ফিল্ডসেট কীভাবে যুক্ত করা যায় তার উদাহরণ এখানে। আপনি নীচের লিঙ্কটি ব্যবহার করে পুরো নিবন্ধটি পড়তে পারেন:

উত্স: ইউআই-ফর্মের সাথে ক্ষেত্রগুলি সহ একটি ফিল্ডসেট যুক্ত করার একটি সহজ উপায় :

সামগ্রী যুক্ত করুন: এর সংযোজনের জন্য ইউআই-ফর্ম মেটা-ডেটা এবং ভার্চুয়াল টাইপ।

একটি ফাইল তৈরি করুন app/code/Vendor/Product/etc/adminhtml/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">
    <virtualType name="Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\Pool">
        <arguments>
            <argument name="modifiers" xsi:type="array">
                <item name="custom-fieldset" xsi:type="array">
                    <item name="class" xsi:type="string">Vendor\Product\Ui\DataProvider\Product\Form\Modifier\CustomFieldset</item>
                    <item name="sortOrder" xsi:type="number">10</item>
                </item>
            </argument>
        </arguments>
    </virtualType>
</config>

এখন, app/code/Vendor/Product/Ui/DataProvider/Product/Form/Modifier/CustomFieldset.phpপণ্য সম্পাদনা পৃষ্ঠার জন্য একটি কাস্টম ফিল্ডসেট দিয়ে মডিফায়ার ফাইল ( ) তৈরি করুন এবং ক্ষেত্রগুলি দিয়ে এটি পূরণ করুন:

<?php
namespace Vendor\Product\Ui\DataProvider\Product\Form\Modifier;

use Magento\Catalog\Model\Locator\LocatorInterface;
use Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\AbstractModifier;
use Magento\Framework\Stdlib\ArrayManager;
use Magento\Framework\UrlInterface;
use Magento\Ui\Component\Container;
use Magento\Ui\Component\Form\Fieldset;
use Magento\Ui\Component\Form\Element\DataType\Number;
use Magento\Ui\Component\Form\Element\DataType\Text;
use Magento\Ui\Component\Form\Element\Input;
use Magento\Ui\Component\Form\Element\Select;
use Magento\Ui\Component\Form\Element\MultiSelect;
use Magento\Ui\Component\Form\Field;

class CustomFieldset extends AbstractModifier
{

    // Components indexes
    const CUSTOM_FIELDSET_INDEX = 'custom_fieldset';
    const CUSTOM_FIELDSET_CONTENT = 'custom_fieldset_content';
    const CONTAINER_HEADER_NAME = 'custom_fieldset_content_header';

    // Fields names
    const FIELD_NAME_TEXT = 'example_text_field';
    const FIELD_NAME_SELECT = 'example_select_field';
    const FIELD_NAME_MULTISELECT = 'example_multiselect_field';

    /**
     * @var \Magento\Catalog\Model\Locator\LocatorInterface
     */
    protected $locator;

    /**
     * @var ArrayManager
     */
    protected $arrayManager;

    /**
     * @var UrlInterface
     */
    protected $urlBuilder;

    /**
     * @var array
     */
    protected $meta = [];

    /**
     * @param LocatorInterface $locator
     * @param ArrayManager $arrayManager
     * @param UrlInterface $urlBuilder
     */
    public function __construct(
        LocatorInterface $locator,
        ArrayManager $arrayManager,
        UrlInterface $urlBuilder
    ) {
        $this->locator = $locator;
        $this->arrayManager = $arrayManager;
        $this->urlBuilder = $urlBuilder;
    }

    /**
     * Data modifier, does nothing in our example.
     *
     * @param array $data
     * @return array
     */
    public function modifyData(array $data)
    {
        return $data;
    }

    /**
     * Meta-data modifier: adds ours fieldset
     *
     * @param array $meta
     * @return array
     */
    public function modifyMeta(array $meta)
    {
        $this->meta = $meta;
        $this->addCustomFieldset();

        return $this->meta;
    }

    /**
     * Merge existing meta-data with our meta-data (do not overwrite it!)
     *
     * @return void
     */
    protected function addCustomFieldset()
    {
        $this->meta = array_merge_recursive(
            $this->meta,
            [
                static::CUSTOM_FIELDSET_INDEX => $this->getFieldsetConfig(),
            ]
        );
    }

    /**
     * Declare ours fieldset config
     *
     * @return array
     */
    protected function getFieldsetConfig()
    {
        return [
            'arguments' => [
                'data' => [
                    'config' => [
                        'label' => __('Fieldset Title'),
                        'componentType' => Fieldset::NAME,
                        'dataScope' => static::DATA_SCOPE_PRODUCT, // save data in the product data
                        'provider' => static::DATA_SCOPE_PRODUCT . '_data_source',
                        'ns' => static::FORM_NAME,
                        'collapsible' => true,
                        'sortOrder' => 10,
                        'opened' => true,
                    ],
                ],
            ],
            'children' => [
                static::CONTAINER_HEADER_NAME => $this->getHeaderContainerConfig(10),
                static::FIELD_NAME_TEXT => $this->getTextFieldConfig(20),
                static::FIELD_NAME_SELECT => $this->getSelectFieldConfig(30),
                static::FIELD_NAME_MULTISELECT => $this->getMultiSelectFieldConfig(40),
            ],
        ];
    }

    /**
     * Get config for header container
     *
     * @param int $sortOrder
     * @return array
     */
    protected function getHeaderContainerConfig($sortOrder)
    {
        return [
            'arguments' => [
                'data' => [
                    'config' => [
                        'label' => null,
                        'formElement' => Container::NAME,
                        'componentType' => Container::NAME,
                        'template' => 'ui/form/components/complex',
                        'sortOrder' => $sortOrder,
                        'content' => __('You can write any text here'),
                    ],
                ],
            ],
            'children' => [],
        ];
    }

    /**
     * Example text field config
     *
     * @param $sortOrder
     * @return array
     */
    protected function getTextFieldConfig($sortOrder)
    {
        return [
            'arguments' => [
                'data' => [
                    'config' => [
                        'label' => __('Example Text Field'),
                        'formElement' => Field::NAME,
                        'componentType' => Input::NAME,
                        'dataScope' => static::FIELD_NAME_TEXT,
                        'dataType' => Number::NAME,
                        'sortOrder' => $sortOrder,
                    ],
                ],
            ],
        ];
    }

    /**
     * Example select field config
     *
     * @param $sortOrder
     * @return array
     */
    protected function getSelectFieldConfig($sortOrder)
    {
        return [
            'arguments' => [
                'data' => [
                    'config' => [
                        'label' => __('Options Select'),
                        'componentType' => Field::NAME,
                        'formElement' => Select::NAME,
                        'dataScope' => static::FIELD_NAME_SELECT,
                        'dataType' => Text::NAME,
                        'sortOrder' => $sortOrder,
                        'options' => $this->_getOptions(),
                        'visible' => true,
                        'disabled' => false,
                    ],
                ],
            ],
        ];
    }

    /**
     * Example multi-select field config
     *
     * @param $sortOrder
     * @return array
     */
    protected function getMultiSelectFieldConfig($sortOrder)
    {
        return [
            'arguments' => [
                'data' => [
                    'config' => [
                        'label' => __('Options Multiselect'),
                        'componentType' => Field::NAME,
                        'formElement' => MultiSelect::NAME,
                        'dataScope' => static::FIELD_NAME_MULTISELECT,
                        'dataType' => Text::NAME,
                        'sortOrder' => $sortOrder,
                        'options' => $this->_getOptions(),
                        'visible' => true,
                        'disabled' => false,
                    ],
                ],
            ],
        ];
    }

    /**
     * Get example options as an option array:
     *      [
     *          label => string,
     *          value => option_id
     *      ]
     *
     * @return array
     */
    protected function _getOptions()
    {
        $options = [
            1 => [
                'label' => __('Option 1'),
                'value' => 1
            ],
            2 => [
                'label' => __('Option 2'),
                'value' => 2
            ],
            3 => [
                'label' => __('Option 3'),
                'value' => 3
            ],
        ];

        return $options;
    }
}

প্রিভিউ

vendor/magento/module-catalog/Controller/Adminhtml/Product/Save.php মূল সঞ্চালনের পদ্ধতিতে ডেটা সেভিংটি প্রোডাক্ট কন্ট্রোলার ফাইলের ভিতরেই ঘটে । যদি সমস্ত কিছু সঠিক উপায়ে করা হয়ে থাকে তবে আমাদের ডেটা এই পদ্ধতির ইনপুট ডেটাতে সঠিকভাবে প্রদর্শিত হবে:

প্রিভিউ

দ্রষ্টব্য, যদি আপনার পণ্যটির শুরু থেকে এই বৈশিষ্ট্য না থাকে তবে আপনার সেগুলি ম্যানুয়ালি সংরক্ষণ করা উচিত। আপনি পর্যবেক্ষক এটি করতে পারেন।

প্রথমে এটি app/code/Vendor/Product/etc/adminhtml/events.xmlফাইলটিতে ঘোষণা করুন (আমরা অ্যাডমিনটিচটিএমএল স্কোপ ব্যবহার করছি কারণ ফর্মটি ফ্রন্ট-এন্ডে বিদ্যমান নেই):

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="catalog_product_save_after">
        <observer name="save_example_data" instance="Vendor\Product\Observer\ProductSaveAfter" />
    </event>
</config>

তারপরে, পর্যবেক্ষকের শ্রেণি তৈরি করুন যা আমরা উদাহরণের বৈশিষ্ট্যে উল্লেখ করেছি - app/code/Vendor/Product/Observer/ProductSaveAfter.php:

<?php
namespace Vendor\Product\Observer;

use \Magento\Framework\Event\ObserverInterface;
use \Magento\Framework\Event\Observer as EventObserver;
use Vendor\Product\Ui\DataProvider\Product\Form\Modifier\CustomFieldset;

class ProductSaveAfter implements ObserverInterface
{

    /**
     * @param EventObserver $observer
     */
    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        /** @var \Magento\Catalog\Model\Product $product */
        $product = $observer->getEvent()->getProduct();
        if (!$product) {
            return;
        }

        $exampleTextField = $product->getData(CustomFieldset::FIELD_NAME_TEXT);
        $exampleSelectField = $product->getData(CustomFieldset::FIELD_NAME_SELECT);
        $exampleMultiSelectField = $product->getData(CustomFieldset::FIELD_NAME_MULTISELECT);

        // Manipulate data here
    }
}

পর্যবেক্ষকের মধ্যে ডেটা:

প্রিভিউ

এখন, আপনি আপনার নিজের মডেলটি পর্যবেক্ষকের কাছ থেকে কল করতে পারেন এবং এতে ডেটা সংরক্ষণ করতে পারেন বা আপনার ইচ্ছামত পরিবর্তন করতে পারেন।

সাবধান হও! যদি আপনার মডেলটির সঞ্চয় পণ্য সংরক্ষণের সাথে সংযুক্ত থাকে, তবে এটি পুনরাবৃত্তি হতে পারে।


আপনি কি ইউআই ফর্ম ক্ষেত্র যুক্ত করতে পারেন তা আপনি পরামর্শ দিতে পারেন?

1
@ হাংরিডিবি আমরা উপরের উত্তরটি আপডেট করেছি এবং আমাদের ব্লগ থেকে নিবন্ধটির লিঙ্কটি যুক্ত করেছি। আপনি সেখানে ফিল্ডসেট কীভাবে তৈরি করবেন তা পড়তে পারেন।
MageWorx

3
উত্তরের জন্য ধন্যবাদ। আমি ডেটা বাঁচানোর জন্য এজ্যাক্স ফর্ম পদ্ধতিটি ব্যবহার করার সিদ্ধান্ত নিয়েছি যদিও আমার সময় সীমাবদ্ধতা রয়েছে। আমি সময় পেলে অবশ্যই আপনার পদ্ধতিটি চেষ্টা করব।
হাংরিডিবি

সুতরাং আমি কীভাবে এই ডাটাবেসগুলিতে সংরক্ষণ করব?
চি

উত্তর করার জন্য ধন্যবাদ. এই পদ্ধতিটি কাজ করছে। আমি একটি কাস্টম নির্বাচন ক্ষেত্র যুক্ত করেছি এবং পর্যবেক্ষক ব্যবহার করে মানটি আমার টেবিলে সংরক্ষণ করা হয়। তবে একই পণ্যটি সম্পাদনা করার সময়, আমার মানগুলি নির্বাচিত হিসাবে প্রদর্শিত হয় না। সাহায্য করুন .
বিন্ধুজা

2

কাস্টম সারণিতে পণ্য ক্ষেত্রটি সংরক্ষণ করতে, আপনি স্তর মূল্যের যুক্তি অনুসরণ করতে পারেন। ম্যাজেন্টো স্তরের দামের ব্যাকএন্ড কাস্টম মডেলের সাহায্যে স্তরের দাম সাশ্রয় করবে। আমরা আমাদের কাস্টম ক্ষেত্র / attibute জন্য একই যুক্তি অনুসরণ করতে পারেন। কাস্টম সারণিতে অ্যাটটিবুট সংরক্ষণের জন্য আপনাকে কাস্টম বৈশিষ্ট্য তৈরি করতে হবে এবং এটি ব্যাকএন্ড মডেল সরবরাহ করতে হবে। ব্যাকএন্ড মডেলটি ভালডিয়েট করবে এবং এটিটিউবটি সংরক্ষণ এবং পুনরুদ্ধার করবে। আপনি নীচের পদক্ষেপগুলি অনুসরণ করতে পারেন।

পদক্ষেপ 1. পণ্য বৈশিষ্ট্য তৈরি করুন

<?php 
namespace Magentoins\TestAttribute\Setup; 
use Magento\Eav\Setup\EavSetup;
use Magento\Eav\Setup\EavSetupFactory;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;


class InstallData implements InstallDataInterface

{    
    private $eavSetupFactory; 
    public function __construct(EavSetupFactory $eavSetupFactory)
    {
        $this->eavSetupFactory = $eavSetupFactory;
    }

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

        /**
         * Add attributes to the eav/attribute
         */

        $eavSetup->addAttribute(
            \Magento\Catalog\Model\Product::ENTITY,
            'test_attribute',
            [
                'type' => 'int',
                'backend' => 'Magentoins\TestAttribute\Model\Product\Attribute\Backend\TestAttribute',
                'frontend' => '',
                'label' => 'Test Attribute',
                'input' => '',
                'class' => '',
                'source' => '',
                'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_GLOBAL,
                'visible' => true,
                'required' => false,
                'user_defined' => false,
                'default' => 0,
                'searchable' => false,
                'filterable' => false,
                'comparable' => false,
                'visible_on_front' => false,
                'used_in_product_listing' => true,
                'unique' => false,
                'apply_to' => ''
            ]
        );
    }
}

পদক্ষেপ 2. পণ্য কাস্টম অ্যাট্রিবিউটের জন্য ব্যাকএন্ড মডেল তৈরি করুন যা বৈধতার জন্য সহায়তা করবে এবং বৈশিষ্ট্যটির মান সংরক্ষণ এবং পুনরুদ্ধার করবে

<?php
namespace Magentoins\TestAttribute\Model\Product\Attribute\Backend;

class TestAttribute extends \Magento\Catalog\Model\Product\Attribute\Backend\Tierprice
{
  protected $_productAttributeBackendTestAttribute;
  /**
   * Website currency codes and rates
   *
   * @var array
   */
  protected $_rates;

  protected $_helper;

  protected $eavConfig;

  public function __construct(
      \Magento\Directory\Model\CurrencyFactory $currencyFactory,
      \Magento\Store\Model\StoreManagerInterface $storeManager,
      \Magento\Catalog\Helper\Data $catalogData,
      \Magento\Framework\App\Config\ScopeConfigInterface $config,
      \Magento\Framework\Locale\FormatInterface $localeFormat,
      \Magento\Catalog\Model\Product\Type $catalogProductType,
      \Magento\Customer\Api\GroupManagementInterface $groupManagement,
      \Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Tierprice $productAttributeTierprice,
      \Magentoins\TestAttribute\Model\ResourceModel\Product\Attribute\Backend\TestAttribute $productAttributeBackendFixedprices,
      \Magentoins\TestAttribute\Helper\Data $helperData,
      \Magento\Eav\Model\Config $eavConfig
  ) {
    parent::__construct(
        $currencyFactory,
        $storeManager,
        $catalogData,
        $config,
        $localeFormat,
        $catalogProductType,
        $groupManagement,
        $productAttributeTierprice
    );
    $this->_productAttributeBackendTestAttribute = $productAttributeBackendTestAttribute;    

  }

  /**
   * Retrieve resource instance
   *
   */
  protected function _getResource()
  {
    return $this->_productAttributeBackendTestAttribute;
  }

  public function getAttribute()
  {
    $attribute = $this->eavConfig->getAttribute('catalog_product', 'test_attribute');
    return $attribute;
  }
  /**
   * Validate test_attribute data
   *
   */
  public function validate ($object)
  {
    $attribute = $this->getAttribute();
    $attr = $object->getData($attribute->getName());
    if (empty($attr)) {
      return true;
    }    

    return true;
  }

  /**
   * Assign test_attribute to product data   
   */
  public function afterLoad ($object)
  {
    /*$data is from your custom table*/
    $data = $this->_getResource()->loadTestAttributeData($object->getId(), $websiteId);
    $object->setData($this->getAttribute()->getName(), $data);
    $object->setOrigData($this->getAttribute()->getName(), $data);

    $valueChangedKey = $this->getAttribute()->getName() . '_changed';
    $object->setOrigData($valueChangedKey, 0);
    $object->setData($valueChangedKey, 0);

    return $this;
  }

  /**
   * After Save Attribute manipulation 
   */
  public function afterSave ($object)
  {
    $websiteId = $this->_storeManager->getStore($object->getStoreId())->getWebsiteId();
    $isGlobal = $this->getAttribute()->isScopeGlobal() || $websiteId == 0;

    $testAttribute = $object->getData($this->getAttribute()->getName());

    /*Save attribute value in custom table with the help of resource model*/

    $this->_getResource()->saveTestAttributeData($testAttribute);

    return $this;
  }

  public function beforeSave ($object)
  {
    parent::beforeSave($object);        
  }

}

পদক্ষেপ 2. কাস্টম টেবিল থেকে বৈশিষ্ট্য মান সংরক্ষণ এবং পুনরুদ্ধারের জন্য রিসোর্স মডেল

<?php
namespace Magentoins\TestAttribute\Model\ResourceModel\Product\Attribute\Backend;

use Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Tierprice;

/**
 * @author
 */
class TestAttribute extends Tierprice
{
    /**
     * Initialize connection and define main table
     *
     * @return void
     */
    protected function _construct()
    {
        $this->_init('magentoins_product_entity_testAttribute', 'value_id');
    }

    /**
     * Load Fixed Prices for product
     *
     * @param int $productId
     * @return Designnbuy_Fixedprices_Model_Mysql4_fixedprices
     */
    public function loadTestAttributeData($productId, $websiteId = null)
    {
        $connection = $this->getConnection();
        $columns = array (
            'test_attribute' => $this->getIdFieldName()            
        );
        $select = $connection->select()
            ->from($this->getMainTable(), $columns)
            ->where('entity_id=?', $productId)
            ->order('order');

        if (!is_null($websiteId)) {
            if ($websiteId == '0') {
                $select->where('website_id=?', $websiteId);
            } else {
                $select->where('website_id IN(?)', array ('0', $websiteId
                ));
            }
        }

        return $connection->fetchAll($select);
    }

    public function saveTestAttributeData(\Magento\Framework\DataObject $attributeObject)
    {
        $connection = $this->getConnection();
        $data = $this->_prepareDataForTable($attributeObject, $this->getMainTable());

        if (!empty($data[$this->getIdFieldName()])) {
            $where = $connection->quoteInto($this->getIdFieldName() . ' = ?', $data[$this->getIdFieldName()]);
            unset($data[$this->getIdFieldName()]);
            $connection->update($this->getMainTable(), $data, $where);
        } else {
            $connection->insert($this->getMainTable(), $data);
        }
        return $this;
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.