2

Is it possible to create the custom attribute for a category called is_featuted category as 'Yes/No' attribute?

I am looking for code how to create the custom attribute for category and get all the categories where the attribute value is 'Yes'.

Can we get all the category collection where is_featured is "Yes"?

Here is the code i used in InstallData.php

 <?php
 namespace Vendor\Module\Setup;
 use Magento\Framework\Setup\{
 ModuleContextInterface,
 ModuleDataSetupInterface,
 InstallDataInterface
};
use Magento\Eav\Setup\EavSetup;
use Magento\Eav\Setup\EavSetupFactory;
class InstallData implements InstallDataInterface
{
private $eavSetupFactory;
public function __construct(EavSetupFactory $eavSetupFactory) {
 $this->eavSetupFactory = $eavSetupFactory;
}
public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
{
 $eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);
 $eavSetup->addAttribute(\Magento\Catalog\Model\Category::ENTITY, 'is_featured', [
 'type' => 'int',
 'label' => 'Is Home Category',
 'input' => 'boolean',
 'source' => 'Magento\Eav\Model\Entity\Attribute\Source\Boolean',
 'visible' => true,
 'default' => '0',
 'required' => false,
 'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
 'group' => 'Display Settings',
 ]);
 }
}
asked Nov 6, 2018 at 9:27

3 Answers 3

4

enter image description here

Setup/InstallData.php

<?php
namespace Vendor\Module\Setup;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Eav\Setup\EavSetup;
use Magento\Eav\Setup\EavSetupFactory;
class InstallData implements InstallDataInterface
{
 private $eavSetupFactory;
 /**
 * Constructor
 *
 * @param \Magento\Eav\Setup\EavSetupFactory $eavSetupFactory
 */
 public function __construct(EavSetupFactory $eavSetupFactory)
 {
 $this->eavSetupFactory = $eavSetupFactory;
 }
 /**
 * {@inheritdoc}
 */
 public function install(
 ModuleDataSetupInterface $setup,
 ModuleContextInterface $context
 ) {
 $eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);
 $eavSetup->addAttribute(
 \Magento\Catalog\Model\Category::ENTITY,
 'is_featured',
 [
 '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' => null,
 'group' => 'General Information',
 'backend' => ''
 ]
 );
 }
}

view/adminhtml/ui_component/category_form.xml

 <?xml version="1.0" ?>
 <form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
 <fieldset name="general">
 <field name="is_featured">
 <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">input</item>
 <item name="label" translate="true" xsi:type="string">Is Home Category</item>
 </item>
 </argument>
 </field>
 </fieldset>
 </form>
answered Nov 9, 2018 at 7:28
10
  • hi, @Hassan It is showing in admin now, but as a textbox not as yes/no, i created yes/no attribute through InstallData Commented Nov 9, 2018 at 7:35
  • you need dropdown ? Commented Nov 9, 2018 at 7:42
  • yes, dropdown or switcher Commented Nov 9, 2018 at 7:43
  • updated my answer added: <item name="options" xsi:type="object">Magento\Eav\Model\Entity\Attribute\Source\Boolean</item> Commented Nov 9, 2018 at 7:47
  • No, still it is showing as textbox. flushed cache and checked Commented Nov 9, 2018 at 7:49
10

Add Following Code in ui_component xml file to Add Yes/No Toggle Option in Your admin Category Attribute. File Path :view/adminhtml/ui_component/category_form.xml

<?xml version="1.0" ?>
<form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
 <fieldset name="general">
<field name="your_attribute" sortOrder="100" formElement="checkbox">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="source" xsi:type="string">category</item>
 <item name="default" xsi:type="number">0</item>
 </item>
 </argument>
 <settings>
 <validation>
 <rule name="required-entry" xsi:type="boolean">false</rule>
 </validation>
 <dataType>boolean</dataType>
 <label translate="true">Your Attriute</label>
 </settings>
 <formElements>
 <checkbox>
 <settings>
 <valueMap>
 <map name="false" xsi:type="string">0</map>
 <map name="true" xsi:type="string">1</map>
 </valueMap>
 <prefer>toggle</prefer>
 </settings>
 </checkbox>
 </formElements>
 </field>
</fieldset>
</form>
answered Mar 2, 2019 at 11:37
1
  • this is the correct answer for the yes/no toggle Commented Apr 13, 2019 at 14:07
1

You can follow below tutorial. It will add boolean custom attribute to category.

https://devdocs.magento.com/guides/v2.2/ui_comp_guide/howto/add_category_attribute.html

Change

 'label' => 'Your Category Attribute Name',

to your required label like

 'label' => 'Is Featured',

To filter category collection by this custom attribute, you can use below code.

use Magento\Catalog\Model\ResourceModel\Category\CollectionFactory;
protected $collectionFactory;
public function __construct(
 .....
 $this->collectionFactory = $collectionFactory;
 .....
}
$categories = $this->collectionFactory->create()
 ->addAttributeToFilter('is_featured',1)->load();
answered Nov 6, 2018 at 9:29
10
  • can i use this code for existing module? please update me code of InstallData.php Commented Nov 6, 2018 at 9:36
  • In my given link, there is already InstallData.php file. Commented Nov 6, 2018 at 9:39
  • where to add the attribute code? $eavSetup->addAttribute(\Magento\Catalog\Model\Category::ENTITY, 'is_featured', [ ? Commented Nov 6, 2018 at 12:02
  • I have used your code, but attribute is not created for categories? I have posted my InstallData.php file to question Commented Nov 6, 2018 at 12:15
  • Its created now, but i can't see it in admin panel inside category view Commented Nov 6, 2018 at 14:12

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.