El CMS está pensado para ser rápido, incluso a la hora de desarrollar nuestras propias extensiones.
Desde su instalación, contiene herramientas que permiten crear y distribuir extensiones de manera sencilla.
A continuación, se listan algunas de estas herramientas, y se explica su funcionamiento.
El Modo desarrollador es una configuración del sistema, que permite habilitar distintas herramientas que facilitan el trabajo de los desarrolladores.
En nuestro caso, permitirá la administración completa de los desarrolladores y de las extensiones.
Para activar el modo desarrollador, en la administración debemos dirigirnos a Configuraciones > Configuraciones > Sistema > General.

Una vez activo el modo desarrollador, si nos dirigimos a Configuraciones > Extensiones, allí podemos acceder a la administración de los desarrolladores. Para ello, presione el botón:

El formulario para crear un desarrollador requiere los siguientes datos:
El nombre del desarrollador.
Con este nombre, las distribuciones identificarán las extensiones que le pertenecen. Si en algún momento es modificado, se perderá todo vínculo con las extensiones distribuidas.
Un sitio web de referencia. Este valor puede ser modificado sin problemas.
El punto de acceso a las distribuciones, tanto para consultar la lista de aplicaciones, como para descargarlas o actualizarlas.
También, es posible utilizar la direccón para distribuir actualizaciones.
Se utiliza para distribuir extensiones. El token se gestiona en la tienda en línea.
Estos valores se utilizan, de forma predeterminada, al crear nuevas extensiones.
Los créditos de las extensiones desarrolladas.
La licencia legal con que serán distribuidas las extensiones.
En Administración > Configuraciones > Extensiones, tenemos la administración de las extensiones.
Allí podrás ver todas las extensiones instaladas y, activado el modo desarrollador, crear y administrar nuevas extensiones.
El formulario para crear una extensión tiene cuatro bloques:
El nombre con el que será identificada internamente la extensión. Todas las convenciones del CMS utilizan este identificador.
El nombre de la extensión. Su uso es meramente descriptivo.
Un texto descriptivo, un poco más extenso que el nombre.
El desarrollador bajo el cual será distribuida la extensión.
Los créditos del desarrollo de la aplicación. Este valor puede coincidir con el desarrollador, pero también se pude ampliar a librerías de terceros.
Las licencias de uso del código.
Cuando se dejan vacíos estos valores, serán completados con los predeterminados para el desarrollador seleccionado.
Las extensiones y versiones que requiere para su instalación en otros sitios. El formato deberá ser extension1:version;extension2:version2....
Si solo se declara un valor de versión, se entiende que se está refiriendo a system.
Si se activa, la extensión puede ser compilada y distribuida por sí misma. De lo contrario, solo puede ser distribuida anexa a otra extensión.
Si declaramos una extensión como un paquete, queda disponible para ser compilada y distribuida.
Para compilar, debemos seleccionar una o más extensiones:

y presionar el botón:

También, es posible compilar presionando el botón:

En algunas ocasiones, se desplegarán modales que irán preguntando si deseamos actualizar versiones. Por último, obtendremos el siguiente formulario:

Los valores por defecto serán los necesarios para distribuir.
Cuando una extensión se compila, se tienen en cuenta tres procesos: copiar los archivos, exportar la estructura de la base de datos y recolectar datos. Para ello, se utilizan tres sistemas: components, db_queries y xdata, respectivamente.
Copiar archivos es sencillo si los tenemos bien organizados. Para ello, utilizamos el concepto de componentes, los componentes serán carpetas con el nombre del alias de la extensión. El compilador sólo tendrá que buscar estas carpetas en los siguientes espacios:
app/
cms/libraries/
cms/plugins/
cms/scripts/
cms/snippets/
media/
vendor/
La estructura de la base de datos incluirá tablas, funciones, procedimientos y disparadores.
Se exportarán de dos modos: como un archivo sql y como uno json. Este último modo, permite modificar las bases de datos de las distribuciones, incluido renombrar tablas y campos.
El compilador va a exportar todas las tablas cuyo nombre comience con el nombre del alias. Por ejemplo, si tenemos la extensión con el alias de nombre posts, exportará la tabla posts y todas las que se llamen posts_*.
A su vez, serán exportadas las funciones y los procedimientos cuyo nombre esté escrito en camelCase y su segundo texto sea el alias. Para el mismo ejemplo anterior, el compilador exportará createPosts o removePostsTags.
Todos los datos serán distribuidos a través de archivos json, ya sea que provengan de la base de datos o de archivos. Esto se hace para agregar capas de procesamiento de datos y seguridad.
Los datos pueden ser: configuraciones, menús, permisos de ususarios, activos, etc.
El sistema que los recolecta y los distribuye se llama xdata.
Un proceso de datos de los más importantes de xdata es el que permite combinar, en la instalación de actualizaciones, los datos existentes, con los datos que trae el paquete de actualización.
Para distribuir una extensión, primero se debe compilar y luego presionar el botón:

Para distribuir una extensión, se debe tener configurada la url de la tienda en línea y el token de acceso del desarrollador.
El registro de cambios (changelog) permite, a la hora de compilar una extensión, calcular automáticamente su número de versión.
En la Administración, debe dirigirse a Configuraciones > Extensiones, seleccionar un registro y presionar el botón:

Se desplegará la lista de cambios de la extensión:

El formulario para tal fin requiere dos campos:
Descripción del cambio.
Informa si el cambio es compatible con las versiones anteriores. De ser compatible, se incrementará la versión menor, de lo contrario, la versión mayor.
El historial de cambios permite renombrar, en las ditribuciones, las tablas y/o campos.
Si modificamos el nombre de una tabla o de un campo, debemos dirigirnos aquí, y registrar ese cambio. Al momento de compilar la extensión, este registro de cambios será exportado junto con la base de datos.
Para realizar esta tarea, se debe seleccionar una extensión, y presionar el botón:

Se desplegará un formulario con todas las tablas y campos de la extensión. A continuación, mostramos por ejemplo la extensión extensions:

*1 En Historia, se puede registrar el cambio de nombre de la tabla a renombrar.
Es posible registrar varios nombres de tablas y campos a renombrar, separándolos por una coma.
Cuando, a partir de una extensión, creamos un paquete, es posible anexar otras extensiones.
Para realizar esta tarea, se debe seleccionar una extensión definida como un paquete, y presionar el botón:

Se desplegará un formulario que permite seleccionar otras extensiones.