Extensión de un Componente
Los componentes tienen comportamientos genéricos predefinidos, es probable que, en mayor o menor medida, la aplicación necesite adaptar este comportamiento a sus necesidades en situaciones específicas, para eso existe la posibilidad de extender cada uno de los componentes, consumiendo sus ventanas y API pública.
Es posible abrir desde el editor-toba el editor de texto asociado a archivos .php conteniendo la subclase en cuestión. Sólo es necesario como configurar el sistema y hacer uso de los iconos de apertura de archivos
Forma de extensión
La extensión se da en código a través de herencia, creando una subclase del objeto en cuestión y especificándola durante la definición del componente en el editor. Para esto se debe especificar el nombre de la subclase y el archivo donde se localiza. Ya a nivel del código es necesario heredar del tipo de componente base, por ejemplo si estamos construyendo un formulario muy particular se necesita extender el toba_ei_formulario:
<?php
class extension_formulario extends toba_ei_formulario
{
}
?>
Utilizando generación de código es posible generar automáticamente tanto el archivo PHP como la subclase específica. Una vez definido el componente (y sus posibles dependencias) se puede crear la subclase indicando un path del archivo PHP y un nombre de subclase, en el ícono de la definición del componentes se muestran las opciones de creación y análisis de la subclase.
Tipos de extensión
Básicamente hoy se cuenta con dos modos bastante distintos de extensión
Eventos: Los listeners de eventos es la forma de extensión menos intrusiva ya que sólo permite consumir la interface del objeto.
Redefinición: Al heredar de una clase se pueden redefinir ciertos métodos (por ejemplo toba_ei_pantalla::generar_layout modificando radicalmente el comportamiento del objeto mediante su implementación. En la documentación API los métodos recomendados para extender llevan a su lado un ícono de ventana. Otros métodos protegidos son extensibles también, pero si no poseen la ventana no se asegura que en futura versiones del framework será soportado ya que se está cambiando su implementación interna.