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;
}