Magento – create custom category attributes dynamically in admin

attributescategorymagento-1.7

I want to create custom category attributes dynamically in admin. I mean, how can I create custom category attributes in my Model class? Please suggest me proper solution to resolve this issue.

Best Answer

create a module Yournamespace_CategoryAttribute.

in app/etc/Yournamespace_CategoryAttribute.xml

<config>
  <modules>
    <Yournamespace_CategoryAttribute>
      <active>true</active>
      <codePool>local</codePool>
    </Yournamespace_CategoryAttribute>
 </modules>
</config>

===========================================

now if you want to use form, in the same module:

in config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Yournamespace_CategoryAttribute>
            <version>0.1.1</version>
        </Yournamespace_CategoryAttribute>
    </modules>
    <global>
        <models>
            <categoryattribute>
                 <classYournamespace_CategoryAttribute_Model</class>
            </categoryattribute>
            <!-- removed eav_entity_setup rewrite -->
        </models>
        <blocks>
            <categoryattribute>
                <class>Yournamespace_CategoryAttribute_Block</class>
            </categoryattribute>
        </blocks>
    </global>
    <frontend>
        <routers>
            <categoryattribute>
                <use>standard</use>
                <args>
                    <module>Yournamespace_CategoryAttribute</module>
                    <frontName>categoryattribute</frontName>
                </args>
            </categoryattribute>
        </routers>
        <layout>
            <updates>
                <yournamespace_categoryattribute>
                    <file>yournamespace_categoryattribute.xml</file>
                </yournamespace_categoryattribute>
            </updates>
        </layout>
    </frontend>
</config>

in YourNamespace/CategoryAttribute/Model/Setup.php

<?php
class Yournamespace_CategoryAttribute_Model_Setup{

    public function setAdminAttribute($params){
        $setup = new Mage_Eav_Model_Entity_Setup('core_setup');
        $setup->startSetup();

        $setup->addAttribute('catalog_category', $params['attr_code'], array(
            'group'         => $params['section'],
            'input'         => $params['input_type'],
            'type'          => $params['db_type'],
            'label'         => $params['attr_label'],
            'backend'       => '',
            'visible'       => 1,
            'required'      => 0,
            'user_defined' => 1,
            'global'        => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
        ));

        $setup->endSetup();
    }

}

in your controllers/IndexController.php

<?php
class Yournamespace_CategoryAttribute_IndexController extends Mage_Core_Controller_Front_Action{

    public function indexAction(){
         $this->loadLayout();             
        $this->renderLayout(); 
    }
    public function createAction(){
        $formParams = $this->getRequest()->getParams();
        Mage::getModel('categoryattribute/setup')->setAdminAttribute($formParams);
    }

}

in Yournamspace/CategoryAttribute/Block/CategoryAttribute.php

<?php
class Yournamespace_CategoryAttribute_Block_CategoryAttribute extends Mage_Core_Block_Template
{

}

in app/design/frontend/your_theme/default/layout/yournamespace_categoryattribute.xml

<?xml version="1.0"?>
<layout version="0.1.0">
    <categoryattribute_index_index>
        <reference name="content">
            <block type="categoryattribute/categoryattribute" name="categoryattribute" template="categoryattribute/categoryattribute.phtml" />
        </reference>
    </categoryattribute_index_index>
</layout>

in app/design/frontend/your_theme/default/template/categoryattribute/categoryattribute.phtml

put your form and the form-action should be $baseurl/categoryattribute/

Note: This can be organised from Admin panel, by adding a admin grid and post these from admin form.

Related Topic