ইভেন্ট ইভেন্ট পর্যবেক্ষকের কাছ থেকে পণ্য পান - ম্যাজেন্টো 2


10

একটি পণ্য সংরক্ষণ ইভেন্ট অনুসরণ করে আমি ম্যাজেন্টো 2 এর মধ্যে পণ্যটি অ্যাক্সেস করার চেষ্টা করছি।

আমি শ্রোতাদের উপর কনফিগার করেছি:

controller_action_catalog_product_save_entity_after

এক্সএমএল নীচে হিসাবে দেখায়:

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
    <event name="controller_action_catalog_product_save_entity_after">
        <observer name="wire_products_update" instance="TBS\WireProductsHook\Observer\WireProductsUpdate" />
    </event>
</config>

এরপরে পর্যবেক্ষক শ্রেণিকে ডাকা হয় যখন কোনও পণ্য সংরক্ষণ করা হয় তবে আমি যে পণ্যটি সংরক্ষণ করা হয়েছিল সেগুলি কীভাবে অ্যাক্সেস করবেন সে সম্পর্কে কোনও তথ্য পাই না। পর্যবেক্ষক শ্রেণি নিম্নরূপ:

<?php
/**
* Copyright © 2015 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
namespace TBS\WireProductsHook\Observer;

use Magento\Framework\Event\ObserverInterface;

class WireProductsUpdate implements ObserverInterface {

    public function execute( \Magento\Framework\Event\Observer $observer ) {

        // echos name of event: controller_action_catalog_product_save_entity_after
        echo 'name of event: ' . $observer->getEvent()->getName();

        // tried using the same method as the save class: <magento>/module-catalog/Controller/Adminhtml/Product/Save.php on line 76
        $controller = $observer->getData('controller');

        // Fails: Fatal error: Cannot access protected property ...
        $product = $controller->initializationHelper->initialize($controller->productBuilder->build($controller->getRequest()));

    }

}

/ মডুলেট - ক্যাটাগল / নিয়ন্ত্রণকারী / অ্যাডমিনিটিএমটিএল / প্রোডাক্ট / সেভ.এফপি-র মধ্যে ইভেন্টটি 114 লাইনে চালিত হয়:

$this->_eventManager->dispatch(
    'controller_action_catalog_product_save_entity_after',
    ['controller' => $this]
);

এটি আর্গুমেন্ট হিসাবে নিয়ামককে পাস করে। তবে আমি কীভাবে পণ্যটি অ্যাক্সেস করতে পারি তা নিশ্চিত am

আমি পণ্য স্কু পেতে চাই

উত্তর:


25

আপনি যদি $productobjব্যাকেন্ড থেকে পণ্য সঞ্চয় করার পরে চান তবে আপনি সহজেই catalog_product_save_afterইভেন্টটি ব্যবহার করতে পারেন ।

আমি ধরে নিচ্ছি যে আপনি কীভাবে একটি মডিউল তৈরি করবেন তা ইতিমধ্যে আপনি জানেন M2

এটিকে events.xmlনীচে রাখুন

app\code\YOUR_NAMESPACE\YOURMODULE\etc\adminhtml

<?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="test_name" instance="YOUR_NAMESPACE\YOUR_MODULENAME\Observer\Productsaveafter" />
    </event>
</config>

এবং আপনার Productsaveafter.phpনীচের দিকে রাখুন

অ্যাপ্লিকেশন \ কোড \ YOUR_NAMESPACE \ YOURMODULE \ অবজারভার \

<?php

namespace YOURNAMESPACE\YOURMODULENAME\Observer;

use Magento\Framework\Event\ObserverInterface;

class Productsaveafter implements ObserverInterface
{    
    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        $_product = $observer->getProduct();  // you will get product object
        $_sku=$_product->getSku(); // for sku

    }   
}

নিখুঁত, এটি এটি পেয়েছে। আমি কীভাবে জিজ্ঞাসা করতে পারি যে আমি কীভাবে এই ইভেন্টটি সম্পর্কে জানতে পারি? আমি এটি উত্স কোডে তালিকাভুক্ত দেখতে পাচ্ছি না তাই এটির অস্তিত্ব জানেন না।
গাইসি

আপনি এই লিঙ্কগুলি থেকে এই ইভেন্টের রেফারেন্স সেরিলসমাচুমাআকার.মেজ্যান্টো 2- লিস্ট
অফ-সমস্ত-

আমার কাছে সেই তালিকাটি একটি রেফারেন্স হিসাবে ছিল কিন্তু সেখানে এটি দেখতে পেলাম না, সুতরাং আমি ব্যবহার করে শেষ করেছি: কন্ট্রোলার_অ্যাকশন_ক্যাটালগ_প্রডেক্ট_সেভ_েন্টিটি_পরে, এটি কোনও কারণে বাদ দেওয়া যায় কি?
গাইসি

1
দয়া করে নোট করুন যে আপনি যদি আপনার ইভেন্ট.এক্সএমএল ফাইলটি প্রশাসনিক অঞ্চলটিতে রেখে থাকেন তবে আপনার পর্যবেক্ষককে আরএসটি বা এসওএপি যেমন ওয়েব এপিআই উপস্থাপন করে এমন অন্যান্য অঞ্চলে কার্যকর করা হবে না
KAndy

2
@ গুয়াই শেষ পর্যন্ত এটি কোথা থেকে এসেছে তা খুঁজে পেয়েছি। একটি নির্দিষ্ট ইভেন্ট রয়েছে যা সত্তা-নির্দিষ্ট "উপসর্গ" ব্যবহার করে। ম্যাজেন্টোতে, বেশিরভাগ মূল মডেল অভ্যন্তরীণ পরিবর্তনশীল "_eventPrefix" পুনরায় সংজ্ঞায়িত করে, যাতে নির্দিষ্ট মডেলের জন্য কেউ CRUD অপারেশন পর্যবেক্ষণ করতে পারে। কোনও মডেলের জন্য ব্যবহৃত উপসর্গটি নির্ধারণ করতে, আপনাকে মডেল উত্স কোডটি পরীক্ষা করতে হবে। এটি দেখুন: magento.stackexchange.com/questions/184772/…
মেহেদি

0

এটি বেশ পুরানো এবং আমি নিশ্চিত না যে এখন কেউ যত্ন করে তবে আমি এটির সন্ধান করছিলাম:

আমি কখন থেকে নিশ্চিত নই তবে অবশ্যই এম 2.2.x এ সেই ইভেন্টটি এখন এইরকম:

$this->_eventManager->dispatch(
                    'controller_action_catalog_product_save_entity_after',
                    ['controller' => $this, 'product' => $product]
                );

যার অর্থ এটি এখন আপনাকে পণ্যও দিচ্ছে।

আপনার ক্ষেত্রে আপনার এটি করা উচিত ছিল এবং আপনি অ্যারে হিসাবে পণ্য বৈশিষ্ট্যগুলি পেতে পারেন:

$post = $observer->getController();
        $data = $post->getRequest()->getPost();
        $productAsArray = $data['product'];

$ product = $ পর্যবেক্ষক-> getData ('পণ্য'); আপনার পণ্যটি পাওয়া উচিত
শোবেখন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.