El Codificador es una herramienta para desarrolladores que permite:
Es importante comprender que la herramienta permite generar una base de código lo suficiente robusta para comenzar cualquier proyecto. Sin perjuicio de ello, siempre será necesario modificar y completar el código generado.
Una aplicación es un programa informático, diseñado como una herramienta para realizar tareas o funciones específicas.
La aplicación esta compuesta de una o varias extensiones, que facilitan la lógica y optimizan la resolución de los problemas propios de la tarea encomendada.
La extensión es el primer nivel de desglose de una aplicación y agrupa regiones comunes de ésta. Por ejemplo, una Tienda Virtual puede dividirse en varias extensiones, cada una de ellas estará, por separado, encargada de: los productos, los clientes, las ordenes, la facturación, la logística, etc.
El componente es una parte más pequeña de la extensión. El componente debe servir a una sola tarea y en un único ámbito, por ejemplo, administrar una tabla de la base de datos, o, como habitualmente se lo conoce, realizar un CRUD.
A su vez, los componentes tienen sus propios elementos comunes. Estos elementos pueden ser: controlador, modelo, vista y javascript.
La ruta para acceder al gestor de código es Administración > Herramientas > Coder.
Una vez en en él, se mostrará la lista de todas las extensiones instaladas, por ejemplo:

Un registro de la lista contiene los siguientes datos:
Nombre de la extensión.
El nombre del desarrollador de la extensión.
Una vista rápida de los componentes que contiene.
Para filtrar la lista, y mostrar sólo una parte de los registros, presione sobre el botón:

Se mostrarán todas las opciones de filtros:

La caja de texto busca en el nombre de la extensión.
Para reestablecer los filtros, presione el botón:

Con la instalación inicial del CMS, se incluyen muchas herramientas para la administración y el desarrollo. Por ejemplo, por defecto el CMS trae las herramientas necesarias para crear y distribuir extensiones, menús, configuraciones, permisos, activos, temas, etc.
En cambio, Coder tiene como finalidad crear y eliminar código, lo que hace a partir de la estructura del CMS, y sus convenciones.
Dicho esto, tenemos:
Muestra información relevante para el desarrollo de una extensión, junto a enlaces a diferentes administraciones, como ser: configuraciones, activos, menús, etc..
Gestiona gran parte de la carpeta app/, basándose en la idea de componentes y su estructura de controladores, modelos y vistas. Si bien, hay una conexión entre está carpeta y el concepto de aplicación, en lo concreto, no son exactamente lo mismo.
Lista los archivos donde se definen las rutas de una o varias extensiones.
Lista las librerías php de una extensión.
Lista los middlewares de una o varias extensiones, y realiza gestiones mínimas.
Lista las notificaciones de una o varias extensiones, y realiza gestiones mínimas.
Lista los plugins de una o varias extensiones, y realiza gestiones mínimas.
Lista los fragmentos de una o varias extensiones, y realiza gestiones mínimas.
Clona una extensión en otra.
Lista los íconos de una o varias extensiones. Como sabrán, la fuente de íconos utilizada por el CMS es fontawesome.
Lista las configuraciones de una extensión, y evalúa sus estados.
Verifica que todas las carpetas de una o varias extensiones contengan el archivo index.html, lo que significa una capa más de seguridad en muchos servidores web.
En el Resumen encontramos accesos directos e información básica de una extensión.
Para acceder, seleccione un registro y presione el botón:

Se desplegará un modal similar a:

Para el framework, un componente será todo aquello que pueda ser agrupado bajo un mismo concepto. Es decir, el framework no tiene un sólo criterio para agrupar componentes, y su uso depende únicamente del contexto y las implementaciones.
Por ejemplo, como regla general el framework tiene carpetas donde se guarda su código (libraries, plugins, scripts, etc.). Cada una de ellas será un componente en la compilación. Ahora bien, los middlewares, los enums o las notificaciones tienen sus propias reglas, y, por lo tanto, serán considerados componentes en el contexto de las librerías.
Gestiona gran parte de la carpeta app/, basándose en la idea de componentes y su estructura de controladores, modelos y vistas.
Para acceder, debe seleccionar un registro y presionar el botón:

A continuación, se abrirá un modal mostrando el contenido de la carpeta, por ejemplo:

Un registro de la lista contiene los siguientes datos:
Nombre del componente.
El punto de acceso.
Los elementos de componente que utiliza. Estos pueden ser: modelo, vista, controlador y javascript.
Una vista rápida a los puntos de entrada o endpoints que contiene el controlador.
Para filtrar la lista presione el botón:

El filtro de lista contiene:
El selector permite mostrar métodos públicos de los modelos que, según las convenciones del framework, no se corresponden con ningún punto de entrada del controlador.
Esta opción crea un controlador vacío. Si el controlador existe, no realiza ninguna acción.

El formulario será similar a:

El nombre del controlador consta de 3 partes:
El punto de acceso al controlador. Las opciones son las del enrutador, y pueden modificarse desde las configuraciones.
El alias de la extensión, esta no puede ser modificada.
El sub-componente permite ampliar las posibilidades de controladores en una misma extensión.
Esta opción intenta eliminar todo lo referido al componente.
Es decir, si el componente tiene punto de acceso, entonces eliminará: controlador, sub-modelo, vistas y javascript. De lo contrario, solo eliminará el modelo.

La opción permite gestionar los puntos de entrada que ejecuta el controlador y todos los elementos vinculados a los mismos: modelo, sub-modelo y vista.

Presionando sobre el nombre del componente, también podrá acceder a los puntos de entrada.
Podrá descargar todos los elementos del componente de aplicación.
En caso de tener un punto de acceso, esto es: controlador, sub-modelo, vistas y javascript. De lo contrario, será solo el modelo.

Los componentes pueden ser importados desde plugins.
Para ello, existen plugins que contienen componentes "universales", en los que se les reemplazó cualquier texto significativo por un token. Esto permite importarlos a cualquier otra extensión.
Un ejemplo práctico de la utilidad de importar un componente es la de crear un CRUD completo sin necesidad de programar.

Los componentes pueden ser exportados a plugins (Véase Importar componentes).

A la hora de exportar, es posible crear un nuevo plugin, o editar uno ya existente.
Si elegimos crear un nuevo componente "universal", debemos ingresar la extensión a la que pertenecerá y, opcionalmente, un nombre alternativo.

Para editar, debemos seleccionar un componente existente.

Un punto de entrada o endpoint es un método público del controlador. A través de un punto de entrada es posible asociar una url con un recurso o acción del servidor.
Para gestionar los puntos de entrada, debemos acceder a través de la opción «Puntos de entrada» de un componente de aplicación.
Una vez que accedemos, se mostrará una lista como la siguiente:

Un registro contiene los siguientes datos:
Éste permite una identificación rápida del tipo de tarea. Esta clasificación es interna, pertenece a la herramienta, y sirve solo como un modo de agrupar puntos de entrada.
El nombre del punto de entrada, tal y como se encuentra en el controlador.
Una lista de los elementos que el framework asocia al punto de entrada.
El filtro de lista contiene:

El selector permite mostrar elementos que, según las conversaciones del framework, no se corresponden con ninguno de los puntos de entrada.
Para crear un punto de entrada, precione el botón:

Se desplegará un modal con varias opciones para crear, cada una de ellas con una descripción. También, cuenta con etiquetas que ayudan a entender todo lo que se va a crear. Las posibilidades de creación de código son: Modelos, Vistas, Controlador (Puntos de entrada), Rutas, Javascript (Controles), Botones y Configuraciones.
Para selecciona una de las opciones, presione el botón:

Una vez seleccionada una opción, el formulario que se despliega varía según la opción.
Algunos de los formularios requieren que, previamente, se hayan completado las Preferencias.
Para eliminar un punto de entrada, seleccione un registro y precione el botón:

Se desplegará un modal para confirmar la acción.
La herramienta intentará eliminar todos los elementos asociados: modelos, vistas, controlador, rutas, javascript y botones. Aunque no siempre encuentra a estos elementos, y es posible que tenga que eliminarlos de modo manual.
Reordena todos los métodos del controlador y de los modelos, según la clasificación interna que realiza la herramienta.

Se utiliza internamente para declarar valores que se utilizan para crear código. Por ejemplo, el nombre de la tabla que es administrada por el controlador.
Varias de las opciones para crear puntos de entrada, requieren de estas preferencias.

El archivo de rutas permite modificar las convenciones de enrutamiento del framework.
Las rutas estarán siempre acotadas a un punto de acceso de una extensión. Esto mejora el rendimiento y facilita la organización.
Para acceder a los archivos de rutas, seleccione una o varias extensiones y presione el botón:

A continuación, se abrirá un modal con la lista de rutas, por ejemplo:

Un registro de la lista contiene los siguientes datos:
El ámbito o punto de entrada de las rutas.
La extensión de las rutas.

El filtro de la lista contiene:
La caja de texto busca en el nombre de la librería.
Esta opción crea un archivo de rutas. Para ello, presione el botón:

El formulario será similar a:

El nombre de la librería a crear.está compuesto por el punto de acceso y el alias de la extensión.
Esta opción reescribirá cualquier archivo de rutas existente.
El apartado permite completar el archivo de rutas con las rutas para crear una Api.
Activa la opción.
Para eliminar un archivo de rutas, debe seleccionarlo y presionar el botón:

Para gestionar las librerías php, debe seleccionar un registro y presionar el botón:

A continuación, se abrirá un modal mostrando el contenido de la carpeta, por ejemplo:

Un registro de la lista contiene los siguientes datos:
Nombre de la librería.
El filtro de lista contiene:

La caja de texto busca en el nombre de la librería.
Esta opción crea una librería vacía. Para ello, debe presionar el botón:

El formulario será similar a:

El nombre de la librería a crear.
Esta opción reescribirá cualquier librería existente.
Para eliminar una librería, debe seleccionarla y presionar el botón:

Está herramienta lee una librería, extrae datos relevantes y los devuelve en un formato que solemos utilizar para la documentación.

Para gestionar los middlewares, debe seleccionar una extensión y presionar el botón:

A continuación, se abrirá un modal mostrando el contenido de la carpeta, por ejemplo:

Un registro de la lista contiene los siguientes datos:
Nombre del middleware.
Alias de la extensión propietaria del middleware.
El filtro de lista contiene:

La caja de texto busca en el nombre del middleware.
Esta opción crea el esqueleto de un middleware. Para ello, debe presionar el botón:

El formulario será similar a:

El nombre del middleware a crear.
Esta opción reescribirá cualquier middleware existente.
Para eliminar un middleware, debe seleccionar el middleware a eliminar y presionar el botón:

Para gestionar las enums, debe seleccionar una extensión y presionar el botón:

A continuación, se abrirá un modal mostrando el contenido de la carpeta, por ejemplo:

Un registro de la lista contiene los siguientes datos:
Nombre del enum.
Alias de la extensión propietaria del enum.
El filtro de lista contiene:

La caja de texto busca en el nombre del enum.
Esta opción crea el esqueleto de un enum. Para ello, debe presionar el botón:

El formulario será similar a:

El nombre del enum a crear.
Esta opción reescribirá cualquier enum existente.
Una lista separada por coma de los casos para el enum. Puede ser con o sin comillas.
Incluye algunos de los métodos más utilizados en los enums del framework.
Para eliminar un enum, debe seleccionar un registro y presionar el botón:

Para gestionar las notificaciones, debe seleccionar una extensión y presionar el botón:

A continuación, se abrirá un modal mostrando el contenido de la carpeta, por ejemplo:

Un registro de la lista contiene los siguientes datos:
Nombre de la notificación.
Alias de la extensión propietaria de la notificación.
El filtro de lista contiene:

La caja de texto busca en el nombre de la notificación.
Esta opción crea el esqueleto de una notificación. Para ello, debe presionar el botón:

El formulario será similar a:

El nombre de la notificación a crear.
Esta opción reescribirá cualquier notificación existente.
Para eliminar una notificación, debe seleccionar la notificación a eliminar y presionar el botón:

Esta opción permite gestionar los plugins de una o varias extensiones.
Para ello, puede seleccionar una o varias extensiones y presionar el botón:

Si no se selecciona ninguna extensión, se mostrará la lista completa de plugins.
A continuación, se abrirá un modal mostrando el contenido de la carpeta, por ejemplo:

Un registro de la lista contiene los siguientes datos:
El alias de la extensión que contiene el plugin.
Nombre del plugin.
El filtro de lista contiene:

La caja de texto busca en el nombre del plugin.
La aplicación pone a disposición plantillas para crear los plugins más frecuentes.
Para crear un plugin, debe seleccionar una de las opciones disponibles:

El formulario será similar a:

Ingrese un nombre alternativo al plugin por defecto.
Esta opción reescribirá cualquier archivo existente.
Cada hook es una función del plugin y, por lo tanto, un archivo en particular. Cada plugin tendrá una lista de hook a crear.
Para eliminar un plugin, debe seleccionar un registro y presionar el botón:

Se desplegará un modal para confirmar la acción.
Esta opción permite gestionar los fragmentos (snippets) de una o varias extensiones.
Para ello, puede seleccionar una o varias extensiones y presionar el botón:

Si no se selecciona ninguna extensión, se mostrará la lista completa de fragmentos.
A continuación, se abrirá un modal mostrando el contenido de la carpeta, por ejemplo:

Un registro de la lista contiene los siguientes datos:
El alias de la extensión que contiene el fragmento.
Nombre del fragmento.
El filtro de lista contiene:

La caja de texto busca en el nombre del fragmento.
Para eliminar un fragmento, debe seleccionar el fragmento a eliminar y presionar el botón:

Se desplegará un modal para confirmar la acción.
Como el título lo menciona, en este apartado encontrará algunas herramientas útiles para el desarrollo.
La herramienta copia una extensión en otra.
La acción requiere modificar el alias de la extensión original por el alias de la extensión copia. La modificación debe realizarse en el nombre de los archivos y en el contenido de los mismos, en las tablas, los campos y los registros de la base de datos.
Para copiar una extensión, debe seleccionarla y presionar el botón:

Se desplegará un modal con un formulario para seleccionar la extensión de destino. El formulario será similar a:

A continuación se desplegará un segundo modal:

En la primera parte del formulario, deberá ingresar los nombres de ambas extensiones en número singular.
En la segunda parte del formulario, hay una lista de componentes y datos que serán copiados. Seleccione los que realmente desea copiar.
En el punto (1) de la imagen anterior, hay una casilla desmarcada por defecto y con un asterisco en su etiqueta. Eso significa que la nueva extensión ya tiene elementos de ese tipo, aunque el sistema no determina con precisión si serán o no reescritos, y depende de usted correr el riesgo de sobrescritura.
Esta opción permite ver los íconos de una o varias extensiones.
Para ello, puede seleccionar una o varias extensiones y presionar el botón:

Si no se selecciona ninguna extensión, se mostrará la lista completa de íconos del CMS.
La fuente de íconos utilizada por el CMS es fontawesome.
A continuación, se abrirá un modal mostrando una tabla con todos los íconos utilizados, por ejemplo:

Esta herramienta intenta buscar las configuraciones utilizadas en una extensión y las compara con las declaradas.
Para acceder, seleccione un registro y presione el botón:

Se desplegará un modal con la lista de configuraciones halladas. Por ejmplo:

Un registro de la lista contiene los siguientes datos:
La clave con la que se registra la configuración.
La lista de archivos donde es utilizada la configuración.
Un estado, el cual puede ser:
Esta herramienta se asegura que todas las carpetas expuestas de una o varias extensiones contengan el archivo index.html.
Esta es una medida de seguridad para muchos de los servidores web actuales.
Para acceder, seleccione una o varias extensiones y presione el botón:

Si no se selecciona ninguna extensión, se verificarán todas.
A continuación, se desplegará un modal para que, en el caso de ser necesario, se confirme la acción de agregar los archivos index.html en las carpetas que lo requieran.
