I have created custom Drop down attribute for category with attribute_code is "is_homecategory"
Used below methods to create it.
Setup/InstallData.php
public function install(
ModuleDataSetupInterface $setup,
ModuleContextInterface $context
) {
$eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);
$eavSetup->addAttribute(
\Magento\Catalog\Model\Category::ENTITY,
'is_homecategory',
[
'type' => 'int',
'label' => 'Is Home Category',
'input' => 'select',
'sort_order' => 333,
'source' => 'Magento\Eav\Model\Entity\Attribute\Source\Boolean',
'global' => 1,
'visible' => true,
'required' => false,
'user_defined' => false,
'default' => '0',
'group' => 'General Information',
'backend' => ''
]
);
}
and view/adminhtml/ui_component/category_from.xml
<fieldset name="general">
<field name="is_homecategory">
<argument name="data" xsi:type="array">
<item name="options" xsi:type="object">Magento\Eav\Model\Entity\Attribute\Source\Boolean</item>
<item name="config" xsi:type="array">
<item name="required" xsi:type="boolean">false</item>
<item name="validation" xsi:type="array">
<item name="required-entry" xsi:type="boolean">false</item>
</item>
<item name="sortOrder" xsi:type="number">333</item>
<item name="dataType" xsi:type="string">string</item>
<item name="formElement" xsi:type="string">select</item>
<item name="label" translate="true" xsi:type="string">Is Home Category</item>
</item>
</argument>
</field>
</fieldset>
That is created with Yes/No drop down in admin.
I am getting collection like below in by block file.
class Index extends \Magento\Framework\View\Element\Template {
protected $collectionFactory;
public function __construct(
\Magento\Catalog\Block\Product\Context $context,
\Magento\Catalog\Model\ResourceModel\Category $collectionFactory,
array $data = []) {
parent::__construct($context, $data);
$this->collectionFactory = $collectionFactory;
}
public function getCategoryData(){
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$category = $objectManager->create('Magento\Catalog\Model\ResourceModel\Category\Collection');
$category->addAttributeToSelect('*')
->setPageSize(1)
->addAttributeToFilter('is_homecategory',['eq'=>1]
->setOrder('updated_at', 'desc')
);
return $category;
/* $categories = $this->collectionFactory->create()
->addAttributeToFilter('is_homecategory',1)->load();
return categories; */
}
}
Which is not returning any results to me.
All i am looking is I need to get only one category recently set as is_homecategory as 'Yes'.
Can i filter category collection in that way?
Please anyone check it and help me. Thanks in Advance.
Best Answer
You need to complete addAttributeToFilter() bracket. Use this below code :
Use default argument in config for default set value