Referencias:
El archivo system.xml es un mecanismo que permite fácilmente introducir campos de configuración editables en el panel de administración (Panel > System > Configuration).
Para ello se estructura en Tabs, Sections, Groups y Fields. Los Tabs contiene Sections, las Sections contiene Groups (fieldsets), y los grupos contienen los campos.
Ejemplo:
<?xml version="1.0" ?> <config> <tabs> <mycustom_tab module="[module_name]" translate="label"> <label>My Configuration Tab</label> <sort_order>100</sort_order> </mycustom_tab> </tabs> <sections> <mycustom_section module="[module_name]" translate="label"> <label>My Custom Section</label> <sort_order>200</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>1</show_in_store> <tab>mycustom_tab</tab> <groups> <mycustom_group translate="label"> <label>My Custom Group</label> <comment>Some comment about my group</comment> <sort_order>10</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>1</show_in_store> <fields> <mycustom_field translate="label tooltip comment"> <label>My Custom Field</label> <comment>Some comment about my field</comment> <tooltip>Field ToolTip</tooltip> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>1</show_in_store> <frontend_type>text</frontend_type> </mycustom_field> </fields> </mycustom_group> </groups> </mycustom_section> </sections> </config>
Tabs
<tabs> <mycustom_tab module="[module_name]" translate="label"> <label>My Configuration Tab</label> <sort_order>100</sort_order> </mycustom_tab> </tabs>
- mycustom_tab – Nombre del nodo tab, debe ser un identificador único.
- module – específica el módulo desde el que se obtendrán las traducciones
- translate – específica los nodos hijo que serán traducibles (si existen multiples valores se separan por comas)
- Hijos del nodo:
- label – es el texto que será mostrado en el renderizado
- sort_order – identifica la posición del Tab con respecto a otros Tabs
- class – es la clase css aplicable al Tab
Sections
<sections> <mycustom_section module="[module_name]" translate="label"> <label>My Custom Section</label> <sort_order>200</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>1</show_in_store> <tab>mycustom_tab</tab> <mycustom_section> <sections>
- mycustom_section – Nombre del nodo Section, debe ser un identificador único
- module – específica el módulo desde el que se obtendrán las traducciones
- translate – específica los nodos hijo que serán traducibles (si existen multiples valores se separan por comas)
- Hijos del nodo:
- label – es el texto que será mostrado en el renderizado
- sort_order – identifica la posición del Tab con respecto a otros Tabs
- class – es la clase css aplicable al Tab (se puede utilizar para mostrar una imagen reemplazando el texto, como en el caso de Paypal)
- header_css – clase css que se aplica cuando se esta editando la Section actual
- show_in_default – indica si la sección será mostrada cuando el alcance sea global (1 es mostrada, 0 no se muestra)
- show_in_website – indica si la sección será mostrada cuando el alcance sea website (1 es mostrada, 0 no se muestra)
- show_in_store – indica si la sección será mostrada cuando el alcance sea StoreView (1 es mostrada, 0 no se muestra)
- groups – contiene la definición de los grupos contenidos en la Section
Groups
<sections> <mycustom_section module="[module_name]" translate="label"> <!-- ... --> <groups> <mycustom_group translate="label"> <label>My Custom Group</label> <comment>Some comment about my group</comment> <sort_order>10</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>1</show_in_store> </mycustom_group> </groups> </sections> </mycustom_section>
- mycustom_group – Nombre del nodo Group, debe ser un identificador único dentro de la Section
- module – específica el módulo desde el que se obtendrán las traducciones. El valor module puede ser omitido y heredara el especificado para el Section.
- translate – específica los nodos hijo que serán traducibles (si existen multiples valores se separan por comas)
- Hijos del nodo:
- label – es el texto que será mostrado en el renderizado
- sort_order – identifica la posición del Tab con respecto a otros Tabs
- show_in_default – indica si la sección será mostrada cuando el alcance sea global (1 es mostrada, 0 no se muestra)
- show_in_website – indica si la sección será mostrada cuando el alcance sea website (1 es mostrada, 0 no se muestra)
- show_in_store – indica si la sección será mostrada cuando el alcance sea StoreView (1 es mostrada, 0 no se muestra)
- frontend_model – clase block que será utilizada para renderizar el grupo de campos. Por defecto usa adminhtml/system_config_form_fieldset
- comment – Texto mostrado antes de los campos del fieldset y que suele contener información o advertencias sobre los campos a configurar.
- expanded – define si el Group aparecerá expandido por defecto y hasta que el usuario lo contraiga. El valor por defecto es contraído.
- sort_fields – este nodo se utiliza para definir el mecanismo de organización del grupo reemplazando a la ordenación por defecto (sort_order). En caso de definir una ordenación distinta existen dos nodos hijo:
- by – nombre del campo del nodo hijo por el que se van a ordenar los valores
- direction_desc – si el valor es 1 la ordenación será inversa
- fields – contiene la definición de los campos contenidos en el Group
Fields
<sections> <mycustom_section module="[module_name]" translate="label"> <!-- ... --> <groups> <mycustom_group translate="label"> <!-- ... --> <fields> <mycustom_field translate="label tooltip comment"> <label>My Custom Field</label> <comment>Some comment about my field</comment> <tooltip>Field ToolTip</tooltip> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>1</show_in_store> <frontend_type>text</frontend_type> </mycustom_field> </fields> </mycustom_group> </groups> </mycustom_section> </sections>
- mycustom_field – Nombre del nodo Group, debe ser un identificador único dentro de la Section
- module – específica el módulo desde el que se obtendrán las traducciones. El valor module puede ser omitido y heredara el especificado para el Section.
- translate – específica los nodos hijo que serán traducibles (si existen multiples valores se separan por comas)
- Hijos del nodo:
- label – es el texto que será mostrado en el renderizado
- sort_order – identifica la posición del Tab con respecto a otros Tabs
- config_path – identifica el nodo en el que el valor será guardado. Si no se específica el path será el ([section_name]/[group_name]/[field_name]) en el que se anida. Se almacena el valor en la tabla core_config_data de la BD.
- show_in_default – indica si la sección será mostrada cuando el alcance sea global (1 es mostrada, 0 no se muestra)
- show_in_website – indica si la sección será mostrada cuando el alcance sea website (1 es mostrada, 0 no se muestra)
- show_in_store – indica si la sección será mostrada cuando el alcance sea StoreView (1 es mostrada, 0 no se muestra)
- frontend_model – clase block que será utilizada para renderizar el grupo de campos. Por defecto usa adminhtml/system_config_form_field
- frontend_type – tipo de campo a mostrar. Posibles valores:
- text
- textarea
- select – las opciones serán cargadas desde source_model
- multiselect – las opciones serán cargadas desde source_model
- import
- export
- allowspecific
- image
- y cualquier tipo de campo presente en Varien_Data_Form_Element_*
- can_be_empty – indica si el campo multiselect puede guardarse sin seleccionar un valor
source_model – especifica la clase del modelo o el callback de un modelo desde el que se obtienen las opciones del select y multiselect. Si se específica la clase del modelo, deberá contener el método toOptionArray($isMultiselect), que retornará un array preparado para cargar las opciones del elemento. Ejemplo de un modelo (deberá cargarse desde config.xml) “Curso_CargaModulo_Model_Adminhtml_System_Config_Source_Color” (será necesario cargar este modelo de datos (esto se verá más adelante)class Curso_CargaModulo_Model_Adminhtml_System_Config_Source_Color { public function toOptionArray() { $themes = array( array('value' => 'green', 'label' => 'Green'), array('value' => 'blue', 'label' => 'Blue'), array('value' => 'beige', 'label' => 'Beige'), ); return $themes; } }
Si se específica el callback de un modelo mediante la estructura “module_name/model_name::methodName”, este deberá devolver un array asociativo con el par value-label. Lista de modelos usados frecuentemente:
- adminhtml/system_config_source_admin_page – returns list of all the items in Magento Admin menu
- adminhtml/system_config_source_cms_page – returns list of CMS Pages
- adminhtml/system_config_source_customer_group – returns list of customer groups
- adminhtml/system_config_source_date_short – returns list of available short date formats
- adminhtml/system_config_source_email_identity – returns list of email sending identities (General Contact, Sales Representative, etc)
- adminhtml/system_config_source_email_template – returns list of transactional email templates
- adminhtml/system_config_source_locale_country – returns list of localized country names
- adminhtml/system_config_source_locale_currency – returns list of localized currency names
- adminhtml/system_config_source_locale_timezone – returns list of localized timezone names
- adminhtml/system_config_source_locale_weekdays – returns list of localized weekday names
- adminhtml/system_config_source_order_status – returns list of available order statuses except pending payment
- adminhtml/system_config_source_payment_allmethods – returns list of all payment methods
- adminhtml/system_config_source_shipping_allmethods – returns list of all shipping methods
- adminhtml/system_config_source_country – returns list of all countries from directory module
- adminhtml/system_config_source_allregion – returns list of all country regions grouped by country
- adminhtml/system_config_source_enabledisable – return list of two options (“Enable” and “Disable”)
- adminhtml/system_config_source_notoptreq – return list of three options for customer widget mandatory indetificator (“Not”, “Optional”, “Required”).
- adminhtml/system_config_source_yesno – return boolean options (“Yes”, “No”)
- backend_model – específica el model para guarder los datos del campo, deberá ser una extensión del modelo por defecto Mage_Core_Model_Config_Data
- tooltip – texto a mostrar como tooltip, es mostrado cuando el cursor está sobre el campo
- tooltip_block – nombre del block que será usado como tooltip.
- validate – nombre de la clase css aplicada al campo que implica una validación. Algunos valores usuales son:
- requiered-entry – validar que el campo no este vacío
- validate-number – valida que el campo sea numérico
- validate-email – valida que el campo sea una dirección de email
- Todas las reglas de validación que se encuentren en /js/prototype/validation.js
- comment – Texto mostrado antes del field y que suele contener información o advertencias sobre el campo.
- depends – este nodo contiene las dependencias del campo actual con respecto a otros. La estructura es simple, el nombre del nodo hijo será el campo del que dependa, y el valor contenido será el valor que lo hace visible. Por ejemplo:
<depends> <field_name>1</field_name> </depends>