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>
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
    <?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 below code.

 <item name="formElement" xsi:type="string">text</item>   

Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.