जवाबों:
मुझे लगता है कि आपने अपने नियंत्रक में किया है हो सकता है कि आपको ऑब्जेक्ट मैनेजर को __construct पद्धति में संदर्भ वर्ग के उपयोग से आरंभ किया जाए।
यदि आपको Magento2 में श्रेणी आईडी की आवश्यकता है, तो आप निम्नलिखित चरणों का उपयोग करके मूल्यों को प्राप्त कर सकते हैं
1. Magento\Framework\Registry
अपनी कक्षा फ़ाइल में उपयोग को शामिल करें।
<?php
/**
* class file
*/
namespace Vendor\Module\Model;
use Magento\Framework\Registry;
...
2. उस वस्तु के लिए एक वस्तु का उपयोग करें जो वस्तु प्रबंधक का उपयोग करता है या फिर यदि आपका नियंत्रक में इसका उपयोग करता है तो अपने __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();
मैगेंटो 2 के आगे के संदर्भ के लिए इस अवधारणा का कार्यान्वयन क्लास फाइल और फ़ंक्शन को संदर्भित करता है जिसे सार्वजनिक फ़ंक्शन कहा जाता है _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();
?>
उपरोक्त सही प्रतीत होता है, लेकिन मुझे लगता है कि रजिस्ट्री में सीधे कूदना सबसे अच्छा तरीका नहीं है। Magento एक Layer Resolver प्रदान करता है जो पहले से ही उस कार्यक्षमता को एनक्रिप्ट कर देता है। (कैटलॉग प्लगइन्स में TopMenu ब्लॉक देखें)
मेरा सुझाव है कि वर्तमान श्रेणी प्राप्त करने के लिए \ Magento \ कैटलॉग \ Model \ Layer \ Resolver वर्ग का उपयोग करना और उसका उपयोग करना। यहाँ कोड है:
<?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 () विधि Resolver Class में करती है।
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;
}
जैसा कि आप देख सकते हैं, यह अभी भी रजिस्ट्री का उपयोग करता है, लेकिन यह विफल होने की स्थिति में एक वापसी प्रदान करता है।