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.
-
are you specific you want to do that with Model? if yes why? if no it's so simple to do this.– ShathishSep 26, 2013 at 10:53
-
Thanks for your response. As I specified I want to create custom attributes dynamically. so I think Model or Controller class is the best way to create attributes (sorry I forgot to mention controller class in my question). If it's possible through other simple way, please suggest.– Lalit KaushikSep 26, 2013 at 10:53
-
what do you mean by the word "dynamically"? do you want to create it from a form or what?– ShathishSep 26, 2013 at 11:05
-
Yes, exactly I want to create attributes through form.– Lalit KaushikSep 26, 2013 at 11:08
-
now I've posted answer which will create it programatically. I'll post the answer using form later :)– ShathishSep 26, 2013 at 11:25
2 Answers
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.
-
I am getting this error in Setup.php Model file: "Fatal error: Call to a member function startSetup() on a non-object" Sep 26, 2013 at 13:15
-
-
Can you please suggest me how can I resolve this error "Fatal error: Call to a member function select() on a non-object"? I am getting this error in Setup.php Model file. Sep 27, 2013 at 5:23
-
-
"Fatal error: Call to a member function select() on a non-object in app\code\core\Mage\Core\Model\Resource\Setup.php on line 734 " Sep 27, 2013 at 8:43
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();
?>