Select oder Multiselect mit eigenen Optionen im Magento Admin Panel

Kategorie: Magento
Verfasst: 3. Juli 2011 von Matthias

Ziel ist es, im Magento Admin Panel ein Select oder Multiselect mit frei definierbaren Optionen zur Verfügung zu stellen. Die Optionen können beispielsweise noch über ein Resource Model aus der Datenbank geladen werden.

Magento Backend Options

De typische Verzeichnisstruktur eines Magento Moduls

magento
`-- app
    `-- code
        |-- community
        |-- core
        `-- local
            `-- Mbtec
                |-- Test
                |-- etc
                |   |-- config.xml
                |   `-- system.xml
                |-- Helper
                |   `-- Data.php
                `-- Model
                    `-- Adminhtml
                        `-- System
                            `-- Config
                                `-- Source
                                    `-- Options.php

 

Die Modulkonfiguration
Datei etc/config.xml
<?xml version="1.0"?>
<config>
  <modules>
    <mbtec_test>
      <version>0.0.1</version>
    </mbtec_test>
  </modules>
  <global>
    <models>
      <mbtec_test>
        <class>Mbtec_Test_Model</class>
      </mbtec_test>
    </models>
    <helpers>
      <mbtec_test>
        <class>Mbtec_Test_Helper</class>
      </mbtec_test>
    </helpers>
  </global>
  <adminhtml>
    <acl>
      <resources>
        <admin>
          <children>
            <system>
              <children>
                <config>
                  <children>
                    <mbtec_test>
                      <title>Test</title>
                    </mbtec_test>
                  </children>
                </config>
              </children>
            </system>
          </children>
        </admin>
      </resources>
    </acl>
  </adminhtml>
</config>

Die Systemkonfiguration mit der die Selects zum Admin Panel hinzugefügt werden.
Datei etc/system.xml

<?xml version="1.0"?>
<config>
  <tabs>
    <mbtec translate="label" module="mbtec_test">
      <label>Mbtec</label>
      <sort_order>450</sort_order>
    </mbtec>
  </tabs>
  <sections>
    <mbtec_test translate="label" module="mbtec_test">
      <label>Test</label>
      <tab>mbtec</tab>
      <sort_order>100</sort_order>
      <show_in_default>1</show_in_default>
      <show_in_website>1</show_in_website>
      <show_in_store>1</show_in_store>
      <groups>
        <settings translate="label">
          <label>Settings</label>
          <frontend_type>text</frontend_type>
          <sort_order>100</sort_order>
          <show_in_default>1</show_in_default>
          <show_in_website>0</show_in_website>
          <show_in_store>0</show_in_store>
          <fields>
            <optionselect translate="label,comment">
              <label>Options</label>
              <comment>
                <![CDATA[Please select one option.]]>
              </comment>
              <frontend_type>select</frontend_type>
              <source_model>
                mbtec_test/adminhtml_system_config_source_options
              </source_model>
              <sort_order>10</sort_order>
              <show_in_default>1</show_in_default>
              <show_in_website>0</show_in_website>
              <show_in_store>0</show_in_store>
            </optionselect>
            <optionmultiselect translate="label,comment">
              <label>Options</label>
              <comment>
                <![CDATA[Please select one option.]]>
              </comment>
              <frontend_type>multiselect</frontend_type>
              <source_model>
                mbtec_test/adminhtml_system_config_source_options
              </source_model>
              <sort_order>20</sort_order>
              <show_in_default>1</show_in_default>
              <show_in_website>0</show_in_website>
              <show_in_store>0</show_in_store>
            </optionmultiselect>
          </fields>
        </settings>
      </groups>
    </mbtec_test>
  </sections>
</config>

Der leere Helper-Stub welcher für die Translations notwendig ist.
Datei Helper/Data.php

<?php

class Mbtec_Test_Helper_Data extends Mage_Core_Helper_Abstract
{

}

Die Datenquelle für die Selects.
Datei: Models/Adminhtml/System/Config/Source/Options

<?php

class Mbtec_Test_Model_Adminhtml_System_Config_Source_Options
{
    /**
     * Options getter
     *
     * @return array
     */
    public function toOptionArray()
    {
        $helper = Mage::helper('mbtec_test');
        return array(
            array(
                'value' => 'foo',
                'label'=> $helper->__('Foo')
            ),
            array(
                'value' => 'bar',
                'label'=> $helper->__('Bar')
            ),
            array(
                'value' => 'baz',
                'label'=> $helper->__('Baz')
            )
        );
    }
}

Die Konfigurationswerte können dann ausgelesen werden mit

$option = Mage::getStoreConfig(
    'mbtec_test/settings/optionselect'
);

$multioption = Mage::getStoreConfig(
    'mbtec_test/settings/optionmultiselect'
);

Hinweis: Cache löschen nicht vergessen :)

Tags: , , , ,

Leave a Reply