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.
The wysiwyg editor is available on the textarea
type input. So if you are using the installer script to add your attribute for example use these options. Don't forget to append the other options you might need there like label
.
$installer->addAttribute(Mage_Catalog_Model_Category::ENTITY, 'your_attribute', array(
[...]
'type' => 'text',
'input' => 'textarea',
'wysiwyg_enabled' => true,
[...]
));
Best Answer
You'll need to keep in mind that your 'source_model' needs to match a data type that makes sense for your attribute. The other values below do various things that need to be looked into for your implementation. The first parameter in the 'addAttribute' call is 'catalog_category' this maps out to a value from the database table eav_entity_type. For more information on EAV attributes see: Advanced ORM - by Alan Storm