Hi,
I am making an admin form includes a select of attribute values. My code is returning an empty select.
<field name="group"> <argument name="data" xsi:type="array"> <item name="options" xsi:type="object">Vendor\Module\Model\Source\Myvalues</item> <item name="config" xsi:type="array"> <item name="dataType" xsi:type="string">text</item> <item name="label" translate="true" xsi:type="string">Attribute</item> <item name="formElement" xsi:type="string">select</item> </item> </argument> </field>
I have created Myvalues.php
<?php namespace Vendor\Module\Model\Source; use Magento\Store\Model\StoreManagerInterface; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory; class Myvalues implements \Magento\Framework\Option\ArrayInterface { public function __construct( CollectionFactory $collectionFactory, \Magento\Framework\ObjectManagerInterface $objectManager ) { $this->_collectionFactory = $collectionFactory; $this->_objectManager = $objectManager; } public function toOptionArray() { $attributes = $this->getAttributes(); return $attributes; } public function getAttributes() { $collection = $this->_collectionFactory->create(); $attr_groups = array(); foreach ($collection as $items) { $attr_groups[] = $items->getData(); } return $attr_groups; } }
I would like to know how to get a collection of attributes in default attribute set.
Hello @tvgarden
<?php /** @var $coll \Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection */ $coll = $this->_objectManager->create(\Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection::class); // add filter by entity type to get product attributes only // '4' is the default type ID for 'catalog_product' entity - see 'eav_entity_type' table) // or skip the next line to get all attributes for all types of entities $coll->addFieldToFilter(\Magento\Eav\Model\Entity\Attribute\Set::KEY_ENTITY_TYPE_ID, 4); $attrAll = $coll->load()->getItems();
hope it will help you.
If works then mark as solution.
HI @Sunil Patel
Thanks I used your code but it's not getting any options.
<?php namespace Vendor\Module\Model\Source; use Magento\Store\Model\StoreManagerInterface; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory; class Myvalues implements \Magento\Framework\Option\ArrayInterface { public function __construct( CollectionFactory $collectionFactory, \Magento\Framework\ObjectManagerInterface $objectManager ) { $this->_collectionFactory = $collectionFactory; $this->_objectManager = $objectManager; } public function toOptionArray() { $categories = $this->getCategoriesTree(); $attributes = $this->getAttributes(); return $attributes; } public function getAttributes() { $collection = $this->_collectionFactory->create(); /** @var $coll \Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection */ $coll = $this->_objectManager->create(\Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection::class); // add filter by entity type to get product attributes only // '4' is the default type ID for 'catalog_product' entity - see 'eav_entity_type' table) // or skip the next line to get all attributes for all types of entities $coll->addFieldToFilter(\Magento\Eav\Model\Entity\Attribute\Set::KEY_ENTITY_TYPE_ID, 4); $attrAll = $coll->load()->getItems(); $attr_groups = array(); foreach ($collection as $items) { $attr_groups[] = $items->getData(); } return $attrAll; //This will give you the collection of all the attributes which are available in that magento instance } public function getCategoriesTree() { $categories = $this->_objectManager->create( 'Magento\Catalog\Ui\Component\Product\Form\Categories\Options' )->toOptionArray(); return $categories; } }
Hi,
I have made it work:
public function getAttributes() { $collection = $this->_collectionFactory->create(); $attr_groups = array(); foreach ($collection as $item) { $attr_groups[] = ['value' => $item->getData()['attribute_id'], 'label' => $item->getData()['frontend_label']]; } return $attr_groups; }