1

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.

Teja Bhagavan Kollepara
  • 3,816
  • 5
  • 32
  • 69
Lalit Kaushik
  • 813
  • 4
  • 15
  • 31

2 Answers2

4

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.

Shathish
  • 2,689
  • 3
  • 36
  • 55
1

Run this script in your magento root folder to create Attribute

<?php  

require_once('app/Mage.php');
 Mage::app()->setCurrentStore(Mage::getModel('core/store')->load(Mage_Core_Model_App::ADMIN_STORE_ID));

$installer = new Mage_Eav_Model_Entity_Setup('core_setup');
$installer->startSetup();   
$entityTypeId = $installer->getEntityTypeId('catalog_category');
$attributeSetId = $installer->getDefaultAttributeSetId($entityTypeId);

if (!$installer->getAttributeId($entityTypeId, 'shipping_content')) {
    $installer->addAttribute('catalog_category', 'shipping_content', array(
         'type'              => 'text',
'backend'           => '',
'frontend'          => '',
'label'             => 'Short description',
'input'             => 'textarea',
'class'             => '',
'source'            => '',
'global'            => '0',
'visible'           => true,
'required'          => false,
'user_defined'      => true,
'default'           => '',
'searchable'        => false,
'filterable'        => false,
'comparable'        => false,
'visible_on_front'  => true,
'used_in_product_listing' => false,
'unique'            => false,
'wysiwyg_enabled'   => true,
'apply_to'          => '',
'is_configurable'   => true
    ));


    $installer->updateAttribute($entityTypeId, 'shipping_content', 'is_wysiwyg_enabled', 1);
    $installer->updateAttribute($entityTypeId, 'shipping_content', 'is_html_allowed_on_front', 1);


}


$installer->endSetup();

?>

For Remove Category Attribute

<?php  

require_once('app/Mage.php');
 Mage::app()->setCurrentStore(Mage::getModel('core/store')->load(Mage_Core_Model_App::ADMIN_STORE_ID));

 $installer = new Mage_Sales_Model_Mysql4_Setup;
 $installer->startSetup();
 $installer->removeAttribute('catalog_category', 'shipping_content');
 $installer->endSetup();

?>
Ketan Borada
  • 2,603
  • 2
  • 33
  • 77