Magento 2如何通过url_key获取类别

时间:2016-01-28 10:01:00

标签: php magento2

我试图通过它url_key在Magento 2.0中获得一个类别。

现在我有了:

        $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
        $categoryFactory = $objectManager->create('Magento\Catalog\Model\CategoryFactory');
        $category = $categoryFactory->create()
            ->addAttributeToFilter('url_key','my_category_url_key');

它返回给我这个错误:

  

错误过滤模板:无效的方法   Magento的\目录\型号\目录\拦截:: addAttributeToFilter(阵列   ([0] => url_key [1] => my_category_url_key))

感谢。

5 个答案:

答案 0 :(得分:4)

Application.MainPage

答案 1 :(得分:0)

addAttributeToFilter是一种收藏方法 您应该在类别集合上执行,而不是在类别实例上执行。

答案 2 :(得分:0)

根据您的代码,您错过了正确的方法,以便通过url_key获取类别。 现在我们可以使用方法 loadByAttribute ,所以你的代码应该是这样的:

$objectManager   = \Magento\Framework\App\ObjectManager::getInstance();
$categoryFactory = $objectManager->create('Magento\Catalog\Model\CategoryFactory');
$category        = $categoryFactory->create()->loadByAttribute('url_key','my_category_url_key');

答案 3 :(得分:0)

我知道这是一个古老的问题,但是如果有人怀疑...

这里的所有答案都使用ObjectManager。那是不好的做法。实现此目的的正确方法如下:

namespace Vendor\Module\Model;

use Magento\Catalog\Model\CategoryFactory;

class MyClass {

private $categoryFactory;

public function __construct(
    CategoryFactory $categoryFactory
} {
    $this->categoryFactory = $categoryFactory;
}

public function MyFunction() {
    $categoryFactory = $this->categoryFactory->create();
    $category = $categoryFactory->loadByAttribute('url_key', 'my_category_key');
    $categoryId = $category->getId(); // E.g. if you want the ID.
}

这将返回带有URL键“ my_category_key”的类别的对象。

答案 4 :(得分:-1)

请尝试以下代码,希望您能得到结果。

<?php
$objectManagerr = \Magento\Framework\App\ObjectManager::getInstance();
$categoryFactory = $objectManagerr->create('Magento\Catalog\Model\ResourceModel\Category\CollectionFactory');
$categoryy = $categoryFactory->create()
            ->addAttributeToFilter('url_key','your_category_url_key')
            ->addAttributeToSelect('*');

foreach ($categoryy as $productt){

    echo $productt->getName().'<br>';
    echo $productt->getId();
}
?>