উত্তর:
আমি মনে করি আপনি নিজের কন্ট্রোলারে কাজ করেছেন এমনটি হতে পারে আপনি____ কাঠামো পদ্ধতিতে কনটেক্সট ক্লাস ব্যবহার করে অবজেক্ট ম্যানেজারকে আরম্ভ করতে পারেন।
আপনার যদি Magento2 তে আইডির বিভাগটি প্রয়োজন হয় তবে নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করে মানগুলি পেতে পারেন
1. Magento\Framework\Registry
আপনার ক্লাস ফাইলে ব্যবহার অন্তর্ভুক্ত করুন।
<?php
/**
* class file
*/
namespace Vendor\Module\Model;
use Magento\Framework\Registry;
...
২. অবজেক্ট ম্যানেজারটি ব্যবহার করে এর জন্য কোনও বস্তু তৈরি করুন বা অন্যথায় যদি আপনি এটি নিয়ামক ব্যবহার করে থাকেন তবে আপনার __construct()
ফাংশনটি নিম্নরূপ নির্ধারণ করুন \Magento\Framework\Registry $registry
:
...
/**
* @var Registry
*/
class BlueLine
{
...
private $registry;
...
public function __construct(Registry $registry)
{
$this->registry = $registry;
}
...
3.তখন আপনি ক্লাসের সাথে কেবল এটি ব্যবহার করতে পারেন:
$category = $this->registry->registry('current_category');
echo $category->getId();
এই ধারণাটির Magento2 বাস্তবায়নের আরও রেফারেন্সের জন্য ক্লাস ফাইল এবং ফাংশনটিকে পাবলিক ফাংশন বলে _initCategory()
। এই পদ্ধতিতে তারা বর্তমান বিভাগটি নিবন্ধভুক্ত করছে।
এই কোড ব্যবহার করে দেখুন। এটি অবশ্যই আপনাকে সাহায্য করবে।
<?php
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$category = $objectManager->get('Magento\Framework\Registry')->registry('current_category');//get current category
echo $category->getId();
echo $category->getName();
?>
উপরের অংশটি সঠিক বলে মনে হচ্ছে তবে আমি মনে করি যে রেজিস্ট্রিটিতে সরাসরি লাফিয়ে পড়া সবচেয়ে ভাল পদ্ধতির নয়। ম্যাজেন্টো একটি স্তর পুনর্নবীকরণ সরবরাহ করে যা ইতিমধ্যে সেই কার্যকারিতাটি আবদ্ধ করে। (ক্যাটালগ প্লাগিনগুলির টপমেনু ব্লক দেখুন)
আমি প্রস্তাব দিচ্ছি nto ম্যাজেন্টো \ ক্যাটালগ \ মডেল \ স্তর class সমাধানকারী শ্রেণি এবং এটি ব্যবহার করে বর্তমান বিভাগটি পেতে। কোডটি এখানে:
<?php
namespace FooBar\Demo\Block;
class Demo extends \Magento\Framework\View\Element\Template
{
private $layerResolver;
public function __construct(
\Magento\Framework\View\Element\Template\Context $context,
\Magento\Catalog\Model\Layer\Resolver $layerResolver,
array $data = []
) {
parent::__construct($context, $data);
$this->layerResolver = $layerResolver;
}
public function getCurrentCategory()
{
return $this->layerResolver->get()->getCurrentCategory();
}
public function getCurrentCategoryId()
{
return $this->getCurrentCategory()->getId();
}
}
রিসলভার ক্লাসে আসল getCurrentCategory () পদ্ধতিটি কী করে তা এখানে ।
public function getCurrentCategory()
{
$category = $this->getData('current_category');
if ($category === null) {
$category = $this->registry->registry('current_category');
if ($category) {
$this->setData('current_category', $category);
} else {
$category = $this->categoryRepository->get($this->getCurrentStore()->getRootCategoryId());
$this->setData('current_category', $category);
}
}
return $category;
}
আপনি দেখতে পাচ্ছেন, এটি এখনও রেজিস্ট্রি ব্যবহার করে তবে এটি ব্যর্থ হলে ফ্যালব্যাক সরবরাহ করে।