Magento 2 रजिस्ट्री का उपयोग करके वर्तमान श्रेणी आईडी प्राप्त करें


13

किसी को पता है कि मैं Magento 2 में वर्तमान श्रेणी रजिस्ट्री का उपयोग करके श्रेणी आईडी कैसे प्राप्त कर सकता हूं?


जवाबों:


0

मुझे लगता है कि आपने अपने नियंत्रक में किया है हो सकता है कि आपको ऑब्जेक्ट मैनेजर को __construct पद्धति में संदर्भ वर्ग के उपयोग से आरंभ किया जाए।


नमस्ते, मैं पहले से ही अपने ब्लॉक क्लास फ़ाइल में निर्माण विधि को कॉल करता हूं कृपया अधिक विस्तार के लिए नीचे दिए गए लिंक की जांच करें codebeautify.org/alleditor/0b796a और मदद के लिए धन्यवाद।
प्रत्यूष

यह स्वीकृत उत्तर नहीं होना चाहिए। आपको बताए गए तरीके से Objectmanager का उपयोग नहीं करना चाहिए।
शॉनब्रेडन

22

यदि आपको 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()। इस पद्धति में वे वर्तमान श्रेणी का पंजीकरण कर रहे हैं।


नमस्ते, मैं कदम का पालन करता हूं और इसके परिणाम की जांच करता हूं कि आपके अनुरोध को संसाधित करने में त्रुटि हुई है ऑब्जेक्ट DOMDocument बनाया जाना चाहिए।
प्रतीक

आपकी निजी संपत्ति गलत जगह पर है।
LM_Fielding

10

इस कोड को आज़माएं। यह निश्चित रूप से आपकी मदद करेगा।

<?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();
?>

4
आपको अपने कोड में ऑब्जेक्ट मैनेजर का उपयोग उस तरह नहीं करना चाहिए। devdocs.magento.com/guides/v2.0/extension-dev-guide/…
drew7721

सूची पृष्ठ में श्रेणी का नाम कैसे प्राप्त करें? ऑब्जेक्टमैन का उपयोग किए बिना?
जफ़र पिंजर

3

उपरोक्त सही प्रतीत होता है, लेकिन मुझे लगता है कि रजिस्ट्री में सीधे कूदना सबसे अच्छा तरीका नहीं है। 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;
}

जैसा कि आप देख सकते हैं, यह अभी भी रजिस्ट्री का उपयोग करता है, लेकिन यह विफल होने की स्थिति में एक वापसी प्रदान करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.