Magento2 - আইডি অনুসারে বিভাগের URL পান


11

আমি আইডি সহ যে কোনও বিভাগের ইউআরএল কী পাওয়ার চেষ্টা করছি। আমি এই আছে;

$categoryId = 3;
$_objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$object_manager = $_objectManager->create('Magento\Catalog\Model\Category')->load($categoryId);
print_r($object_manager->getData());

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

ম্যাজেন্টো 1.x এ আমি এটি করতাম: Mage::getModel('catalog/category')->load($catID)->getUrl()এবং এটি কাজ করেছিল।

টি এল; ডিআর: এই কোড, কাজ করে (সঠিক) বিভাগ আইডি এবং পরিবর্তনের আইডি পরিবর্তন getData()করতে getUrl()সম্পূর্ণ বিভাগ URL এর জন্য, অথবা getName()এর CATEGORY নাম।

উত্তর:


29

বিভাগটি ইউআরএল পেতে আপনার এই জাতীয় \Magento\Catalog\Model\Categoryফাংশনটি ব্যবহার করতে হবে getUrl():

$category->getUrl()

এছাড়াও, আপনি এর মাধ্যমে url পেতে পারেন CategoryRepositoryInterface

nameSpace ['Your_nameSpace'] 
use Magento\Catalog\Api\CategoryRepositoryInterface;
class ['Your_Class_name']
    protected $_storeManager;
    protected $categoryRepository;
    public function __construct(
        \Magento\Store\Model\StoreManagerInterface $storeManager,
        \Magento\Catalog\Model\CategoryRepository $categoryRepository,
    ) {
        .........
        $this->_storeManager = $storeManager;
        $this->categoryRepository = $categoryRepository;
    }

     public  function getCategory()
    {
            $category = $this->categoryRepository->get($categoryId, $this->_storeManager->getStore()->getId());

        return $category->getUrl();
    }
} 

ধন্যবাদ :) getData কে getUrl এ পরিবর্তন করা সঠিক কল ছিল।
অ্যালেক্স টিমমার

ঠিকঠাক কাজ করে আপ আপনার পক্ষে ভোট দিয়েছিল
পুষ্পেন্দ্র সিং

ভাল উত্তর, খুব সহায়ক। +1
শোয়েব মুনির

12

সর্বদা সংগ্রহস্থল ব্যবহার করার চেষ্টা করুন। আপনাকে নিম্নলিখিত উপায়ে ইনজেকশনের প্রয়োজন:

/ **
 * @var \ Magento \ ক্যাটালগ \ সহায়তাকারী \ বিভাগ
 * /
সুরক্ষিত $ বিভাগ হেল্পার;

/ **
 * @var \ Magento \ ক্যাটালগ \ মডেল \ ক্যাটাগরি রিপোসিটোরি
 * /
সুরক্ষিত $ বিভাগের রিপোসিটোরি;


পাবলিক ফাংশন __ কনস্ট্রাক্ট (
    Age ম্যাজেন্টো \ ক্যাটালগ \ সহায়তাকারী \ বিভাগ $ বিভাগ হেল্পার,
    \ ম্যাজেন্টো \ ক্যাটালগ \ মডেল \ বিভাগীয় রেপোসিটরি $ বিভাগের রিপোসিটোরি

) {
    $ এটি-> বিভাগ হেল্পার = $ বিভাগ হেল্পার;
    $ এটি-> বিভাগের রিপোসিটোরি = $ বিভাগের রিপোসিটোরি;
}

বিভাগ ইউআরএল জন্য

$ বিভাগআইড = 3;
$ বিভাগ ওবজ = $ এই-> বিভাগের রিপোসিটোরি-> পান ($ বিভাগীয় আইডি);
প্রতিধ্বনি $ এটি-> বিভাগ হেল্পার-> getCategoryUll ($ বিভাগ ওবিজে);

দুর্দান্ত, আপনাকে ধন্যবাদ। আমি ক্যাটাগরিমডেলের আইডিগুলির মাধ্যমে লুপ করার চেষ্টা করছিলাম যা পুনরাবৃত্তির মাধ্যমে একই ডেটা পুনরায় লোড করছিল। একগুচ্ছ মাথা চুলকানোর পরে তুমি আমাকে বাঁচিয়েছ!
ডোমডামব্রোগিয়া

6

আপনি কোড নীচে চেষ্টা করতে পারেন।

$categoryId = 5;
$_objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$object_manager = $_objectManager->create('Magento\Catalog\Model\Category')->load($categoryId);
echo "<pre>";
print_r($object_manager->getData());

আপনি কোনও বিভাগ আইডি ব্যবহার করার আগে আপনার প্রশাসনের ক্যাটাগরির আইডি উপস্থিত রয়েছে বা এটি একটি ফাঁকা অ্যারে প্রদান করবে।

যদি আপনার কোন প্রশ্ন থাকে তাহলে আমার জানতে দিন।


ওহ, হ্যাঁ, আমি ওপিতে ঠিক কোড লিখেছি। তবে আপনি সঠিক, আমি কিছু আইডির চেষ্টা করেছি যা আমার মনে হয়েছিল যে এটি বিদ্যমান আছে, তবে তা নেই।
অ্যালেক্স টিমমার

1

আমি দেখতে পেয়েছি যে যখন আমার বিভিন্ন ডোমেইন (স্টোর ভিউ) থেকে বিভাগের ইউআরএলগুলি দরকার তখন আমাকে প্রতি স্টোর ভিউতে একটি নতুন url অবজেক্ট তৈরি করতে হবে।

use Magento\Catalog\Model\Category;
use Magento\Catalog\Model\ResourceModel\Category\CollectionFactory;
use Magento\Framework\UrlFactory;

class CacheWarmer
{
    /** @var CollectionFactory */
    protected $categoryCollectionFactory;

    /** @var \Magento\Store\Model\StoreManagerInterface */
    protected $storeManager;

    /** @var UrlFactory */
    protected $urlFactory;

    public function __construct(
        CollectionFactory $categoryCollectionFactory,
        \Magento\Store\Model\StoreManagerInterface $storeManager,
        UrlFactory $urlFactory
    )
    {
        $this->categoryCollectionFactory = $categoryCollectionFactory;
        $this->storeManager = $storeManager;
        $this->urlFactory = $urlFactory;
    }

    /**
     * @throws \Magento\Framework\Exception\LocalizedException
     */
    public function execute()
    {
        $stores = $this->storeManager->getStores();

        foreach ($stores as $store) {

            $this->storeManager->setCurrentStore($store);

            $collection = $this->categoryCollectionFactory->create();
            $collection->addUrlRewriteToResult();
            $collection->addIsActiveFilter();

            $urlCreator = $this->urlFactory->create();

            /** @var Category $category */
            foreach ($collection as $category) {

                $requestPath = $category->getRequestPath();
                if (!$requestPath) {
                    continue;
                }

                $url = $urlCreator->getDirectUrl($category->getRequestPath());

                $result = @file_get_contents($url);
            }
        }
    }
}

0

এটি আমার কাস্টম ব্লকে (বিভাগের সংগ্রহশালা এবং ডিআই ব্যবহার করে) ভাল কাজ করে:

/**
 * Constructor
 */
public function __construct(
  \Magento\Catalog\Model\CategoryRepository $categoryRepository,
  // ...
) 
{
  $this->_categoryRepository = $categoryRepository;
  // ...
}


/**
 * Return the category object by its id.
 * 
 * @param categoryId (Integer)
 */
public function getCategory($categoryId)
{
  return $this->getCategoryRepository()->get($categoryId);
}


/**
 * Category repository object
 */
protected $_categoryRepository;

অবশেষে, একটি টেম্পলেট ফাইলের মধ্যে আমি কেবল ব্যবহার করি:

$this->getCategory(3)->getUrl()

0

@ অ্যান্ড্রিয়া দয়া করে getCategory পদ্ধতি আপডেট করুন। হয় এটি ভাল কাজ করে।

/**
 * Return the category object by its id.
 * 
 * @param categoryId (Integer)
 */
public function getCategory($categoryId)
{
  return $this->_categoryRepository->get($categoryId);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.