Magento CE 1.8.0.0
Sometimes we want to retrieve a list of all categories on site to populate a select input field in admin. Here’s one way this can be achieved.
I’m assuming we have a custom module called My_Module in the community folder.
File: app/code/community/My/Module/Helper/Data.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | ... public function getAllCategoriesArray($optionList = false) { $categoriesArray = Mage::getModel('catalog/category') ->getCollection() ->addAttributeToSelect('name') ->addAttributeToSelect('url_path') ->addAttributeToSort('path', 'asc') ->addFieldToFilter('is_active', array('eq'=>'1')) ->load() ->toArray(); if (!$optionList) { return $categoriesArray; } foreach ($categoriesArray as $categoryId => $category) { if (isset($category['name'])) { $categories[] = array( 'value' => $category['url_path'], 'label' => Mage::helper('my_module')->__($category['name']) ); } } return $categories; } ... |
Now that we have our public function available from the helper, we can use this to get a list of the categories, or just return an array of the values.
For this article, we’re creating a select input field in an admin form, so have the following usage.
File: app/code/community/My/Module/Block/Adminhtml/Module/Edit/Tab/Main.php
1 2 3 4 5 6 7 8 9 10 11 12 | protected function _prepareForm() { ... $fieldset->addField('categories', 'select', array( 'name' => 'categories', 'label' => Mage::helper('my_module')->__('Categories'), 'title' => Mage::helper('my_module')->__('Categories'), 'required' => false, 'values' => Mage::helper('my_module')->getAllCategoriesArray(true) )); ... } |
Obviously there’s more to these files than I’ve shown, this is just to illustrate the use of the function.
Hope that helps someone!