Search code examples
phpformsmagentoadmin

Magento Admin Edit Form Fields - Custom Model Field(s)


Wanting to add a custom Model to be rendered in a custom Magento admin form. Just cant seem to get the source model to render any of the options. Couldn't really find anything on google as it was mostly to do with system/config source model examples. See code below

Model File (My/Module/Model/MyModel.php)

<?php
class My_Module_Model_MyModel extends Mage_Core_Model_Abstract
{
 static public function getOptionArray()
{

    $allow = array(
       array('value' => '1', 'label' => 'Enable'),
       array('value' => '0', 'label' => 'Disable'),
   );

   return $allow;
}
}

and my form tab file - Tab shows up with multiselect field, but its blank (My/Module/Block/Adminhtml/Module/Edit/Tab/Data.php)

<?php

class My_Module_Block_Adminhtml_Module_Edit_Tab_Data extends Mage_Adminhtml_Block_Widget_Form
{

protected function _prepareForm(){ 


    $form = new Varien_Data_Form();
    $this->setForm($form);
    $fieldset = $form->addFieldset('module_form', array('legend'=>Mage::helper('module')->__('Module Information')));
    $object = Mage::getModel('module/module')->load( $this->getRequest()->getParam('module_id') );
    

    echo $object;
    
    
   
    $fieldset->addField('module_enabled', 'multiselect', array(
      'label'     => Mage::helper('module')->__('Allowed Module'),
      'class'     => 'required-entry',
      'required'  => true,
      'name'      => 'module_enabled',
      'source_model' => 'My_Module_Model_MyModel',
      'after_element_html' => '<small>Select Enable to Allow</small>',
      'tabindex' => 1
    ));
    
    
    if ( Mage::getSingleton('adminhtml/session')->getModuleData() )
    {
          $form->setValues(Mage::getSingleton('adminhtml/session')->getModuleData());
        Mage::getSingleton('adminhtml/session')->setModuleData(null);
    } elseif ( Mage::registry('module_data') ) {
        $form->setValues(Mage::registry('module_data')->getData());
    }
    return parent::_prepareForm();
   }


  }

So I have other fields, tabs that all save the data etc but just cant get the values to render using a custom model inside the multiselect field.


Solution

  • Looks like method name in the source model is incorrect. Also, you probably don't need to extend Mage_Core_Model_Abstract in source models.

    Try this:

    <?php
    class My_Module_Model_MyModel
    {
        public function toOptionArray()
        {
            return array(
                array('value' => '1', 'label' => Mage::helper('module')->__('Enable')),
                array('value' => '0', 'label' => Mage::helper('module')->__('Disable')),
            );
        }
    }