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」に従ってコードを使用しましたが、ブロックファイルでは正常に動作していますが、可視性に応じて属性をフィルタリングできないという問題が発生しています>「はい」の管理...任意のヘルプが評価されます...製品属性のコレクションクラスProductList extends \ Magento \ Framework \ View \ Element \ Template {protected $ _attributeFactory; パブリック関数__construct(\ Magento \ Catalog \ Model \ ResourceModel \ Eav \ Attribute $ attributeFactory){parent :: __ construct($ context); $
this-

回答:


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()
ロナックチャウハン

更新された回答を確認
ロナックチャウハン

getAttributeName印刷空白
単純な男

1
echo "<pre>"; print_r($attributes);exit;これをforeachで使用して確認します
ロナックチャウハン

8

もう1つのアイデアは、Service Contracts Layerを使用することです。

Magento\Eav\Api\AttributeRepositoryInterfaceeav属性を取得するために使用します。

私はすでにここに答えがあります: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表で確認できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.