2

I want a custom category attribute for my categories, so I have created a module with all the necessary files and code, in admin, I am able to see the custom field but when I am trying to save it the value doesn't save. For reference I am pasting my code, please suggest me where I am getting wrong or missing something.

/app/code/Belong/Categoryattrs/Setup/InstallData.php

namespace Belong\Categoryattrs\Setup;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
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,
 'alfasi_category_id',
 [
 'type' => 'varchar',
 'label' => 'Alfasi Category Id',
 'input' => 'text',
 'sort_order' => 100,
 'source' => '',
 'global' => 1,
 'visible' => true,
 'required' => false,
 'user_defined' => false,
 'default' => null,
 'group' => '',
 'backend' => ''
 ]
 );
}

}

app/code/Belong/Categoryattrs/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="alfasi_category_id">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="required" xsi:type="boolean">true</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">Alfasi Category Id</item>
 </item>
 </argument>
 </field>
 </fieldset>
 </form>

2 Answers 2

0

Please try below code:

app/code/Belong/Categoryattrs/Setup/InstallData.php

<?php
namespace Belong\Categoryattrs\Setup;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Catalog\Setup\CategorySetupFactory;
class InstallData
 implements InstallDataInterface
{
 /**
 * Category setup factory
 *
 * @var CategorySetupFactory
 */
 private $categorySetupFactory;
 /**
 * Init
 *
 * @param CategorySetupFactory $categorySetupFactory
 */
 public function __construct(
 CategorySetupFactory $categorySetupFactory
 ) {
 $this->categorySetupFactory = $categorySetupFactory;
 }
 /**
 * {@inheritdoc}
 */
 public function install(
 ModuleDataSetupInterface $setup,
 ModuleContextInterface $context
 ) {
 $setup->startSetup();
 /** @var \Magento\Catalog\Setup\CategorySetup $categorySetup */
 $categorySetup = $this->categorySetupFactory->create(['setup' => $setup]);
 $categorySetup->addAttribute(
 'catalog_category',
 'alfasi_category_id',
 [
 'type' => 'varchar',
 'label' => 'Alfasi Category Id',
 'input' => 'text',
 'required' => false,
 'sort_order' => 100,
 'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_STORE,
 'group' => 'General Information',
 ]
 );
 $setup->endSetup();
 }
}

app/code/Belong/Categoryattrs/view/adminhtml/ui_component/category_form.xml

<?xml version="1.0" encoding="UTF-8"?>
<form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
 <fieldset name="alfasi_category_id">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="label" xsi:type="string" translate="true">Additional Tab</item>
 <item name="collapsible" xsi:type="boolean">true</item>
 <item name="sortOrder" xsi:type="string">1000</item>
 </item>
 </argument>
 <field name="alfasi_category_id">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="dataType" xsi:type="string">string</item>
 <item name="source" xsi:type="string">category</item>
 <item name="label" xsi:type="string" translate="true">Alfasi Category Id</item>
 <item name="visible" xsi:type="boolean">true</item>
 <item name="required" xsi:type="boolean">false</item>
 <item name="sortOrder" xsi:type="number">10</item>
 <item name="validation" xsi:type="array">
 <item name="required-entry" xsi:type="boolean">false</item>
 </item>
 </item>
 </argument>
 </field>
 </fieldset>
</form>
answered Mar 23, 2018 at 13:47
1
  • Thanks for the answer, your solution resolved my issue. I had to add an extra line of code to your answer to get this working. I have pasted my updated code. Commented Mar 24, 2018 at 8:44
0

In the end I added a line of code to

 <?xml version="1.0" encoding="UTF-8"?>
 <form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
 <fieldset name="alfasi_category_id">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="label" xsi:type="string" translate="true">Additional Tab</item>
 <item name="collapsible" xsi:type="boolean">true</item>
 <item name="sortOrder" xsi:type="string">1000</item>
 </item>
 </argument>
 <field name="alfasi_category_id">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="dataType" xsi:type="string">string</item>
 <item name="source" xsi:type="string">category</item>
 <item name="label" xsi:type="string" translate="true">Alfasi Category Id</item>
 <item name="formElement" xsi:type="string">text</item>
 <item name="visible" xsi:type="boolean">true</item>
 <item name="required" xsi:type="boolean">false</item>
 <item name="sortOrder" xsi:type="number">10</item>
 <item name="validation" xsi:type="array">
 <item name="required-entry" xsi:type="boolean">false</item>
 </item>
 </item>
 </argument>
 </field>
 </fieldset>
 </form> 

I added this line:

 <item name="formElement" xsi:type="string">text</item> 
General Grievance
4531 gold badge7 silver badges12 bronze badges
answered Mar 24, 2018 at 8:37

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.