Magento 2获取所有没有产品ID的产品属性


12

我想检索所有可用的产品属性,然后将其转换为“我的选择选项”字段的名称和值。在Magento 1中,我可以这样实现:

public function getMagentoAttributes()
{
    $values[] = array(
        'value' => '',
        'label' => 'Pick Product Attribute'
    );

    $categories = Mage::getResourceModel('catalog/product_attribute_collection')->getItems();

    foreach ($categories as $category) {
        if ($category->getFrontendLabel() != '') {
            $label = $category->getFrontendLabel();
        } else {
            $label = $category->getAttributecode();
        }

        $values[] = array(
            'value' => $category->getAttributecode(),
            'label' => $label
        );
    }
    return $values;
}

magento 2中有没有办法做同样的事情?


我使用了根据“ RonakChauhan”编写的代码,该代码在我的块文件中运行良好,但是我遇到了一些问题,因为我无法根据其可见性过滤属性,因此我需要帮助,即需要状态设置为“ visible = >是”,在管理...中将得到任何帮助...这是我获取产品属性的集合类ProductList的代码,扩展了\ Magento \ Framework \ View \ Element \ Template {protected $ _attributeFactory; 公共函数__construct(\ Magento \ Catalog \ Model \ ResourceModel \ Eav \ Attribute $ attributeFactory){parent :: __ construct($ context); $
this-

Answers:


10
protected $_attributeFactory;

 public function __construct(
    ....
    \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attributeFactory,
    ....
) {
    ....
    $this->_attributeFactory = $attributeFactory;
    ....
}

public function <func_name>()
{
    $attributeInfo = $this->_attributeFactory->getCollection();

   foreach($attributeInfo as $attributes)
   {
        $attributeId = $attributes->getAttributeId();
        // You can get all fields of attribute here
   }
}

在这里,您可以拥有整个属性集合,可以根据需要对其进行过滤。


如何获取属性名称和ID?
简单的家伙

使用foreach您可以获得getAttributeId()以及getAttributeName()
Ronak Chauhan

检查更新的答案
Ronak Chauhan

getAttributeName打印空白
简单的家伙

1
echo "<pre>"; print_r($attributes);exit;在foreach中使用它并进行检查
Ronak Chauhan

8

另一个想法是,我们应该尝试使用Service Contracts Layer

使用Magento\Eav\Api\AttributeRepositoryInterface得到EAV属性。

我已经在这里有了答案:https : //magento.stackexchange.com/a/161426/33057

例如:

    $searchCriteria = $this->searchCriteriaBuilder->create();
    $attributeRepository = $this->attributeRepository->getList(
        'catalog_product',
        $searchCriteria
    );

    foreach ($attributeRepository->getItems() as $items) {
        $items->getAttributeCode();
        $items->getFrontendLabel();
    }

注意:对于方法中的实体类型代码getList,我们可以在eav_entity_type表中找到。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.