ম্যাজেন্টো 2 রেজিস্ট্রি ব্যবহার করে বর্তমান বিভাগের আইডি পান


13

যে কেউ জানেন যে আমি কীভাবে Magento 2 এ বর্তমান বিভাগ রেজিস্ট্রি ব্যবহার করে বিভাগ আইডি পেতে পারি?


উত্তর:


0

আমি মনে করি আপনি নিজের কন্ট্রোলারে কাজ করেছেন এমনটি হতে পারে আপনি____ কাঠামো পদ্ধতিতে কনটেক্সট ক্লাস ব্যবহার করে অবজেক্ট ম্যানেজারকে আরম্ভ করতে পারেন।


হাই আমি ইতিমধ্যে আমার ব্লক ক্লাসের ফাইলটিতে কনস্ট্রাক্ট পদ্ধতিটি কল করেছি দয়া করে আরও বিশদে কোডবিউটিফটি.আর . / বিলেডিটার / বিবি 796 এ জন্য নীচের লিঙ্কটি দেখুন এবং সহায়তার জন্য ধন্যবাদ।
প্রতীক

এটি গ্রহণযোগ্য উত্তর হওয়া উচিত নয়। বর্ণিত পদ্ধতিতে আপনার অবজেক্টম্যানার ব্যবহার করা উচিত নয়।
সীনব্রিডেন

22

আপনার যদি 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()। এই পদ্ধতিতে তারা বর্তমান বিভাগটি নিবন্ধভুক্ত করছে।


হাই আমি পদক্ষেপটি অনুসরণ করি এবং ফলাফলটি পরীক্ষা করে দেখায় আপনার অনুরোধটি প্রক্রিয়াকরণে একটি ত্রুটি হয়েছে ऑজেক্ট ডমডকুমেন্টটি তৈরি করা উচিত।
প্রতীক

আপনার ব্যক্তিগত সম্পত্তি ভুল জায়গায় আছে।
এলএম_ ফিল্ডিং

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/existance-dev-guide/…
ড্রইউ 7721

তালিকা পৃষ্ঠাতে বিভাগের নাম কীভাবে পাবেন? অবজেক্টম্যানেজার ব্যবহার না করে?
জাফর পিনজার

3

উপরের অংশটি সঠিক বলে মনে হচ্ছে তবে আমি মনে করি যে রেজিস্ট্রিটিতে সরাসরি লাফিয়ে পড়া সবচেয়ে ভাল পদ্ধতির নয়। ম্যাজেন্টো একটি স্তর পুনর্নবীকরণ সরবরাহ করে যা ইতিমধ্যে সেই কার্যকারিতাটি আবদ্ধ করে। (ক্যাটালগ প্লাগিনগুলির টপমেনু ব্লক দেখুন)

আমি প্রস্তাব দিচ্ছি 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;
}

আপনি দেখতে পাচ্ছেন, এটি এখনও রেজিস্ট্রি ব্যবহার করে তবে এটি ব্যর্থ হলে ফ্যালব্যাক সরবরাহ করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.