Professional Documents
Culture Documents
DESARROLLAR COMPONENTE
EN JOOMLA
Versión 1.0
Contenido
1 REQUISITOS. .................................................................................................................................. 4
2 INTRODUCCIÓN. ............................................................................................................................ 4
3 MODELO-VISTA-CONTROLADOR. .................................................................................................. 4
3.1 Introducción .......................................................................................................................... 5
3.2 Estableciendo el controlador ................................................................................................ 7
3.3 Ajustando la vista .................................................................................................................. 8
4 Añadir un tipo de elemento de menú ......................................................................................... 10
5 Añadiendo un modelo ................................................................................................................. 10
6 Añadir una petición de variable en el tipo de menu ................................................................... 12
7 Usar la base de datos .................................................................................................................. 13
7.1 Añadir un nuevo tipo de campo .......................................................................................... 13
7.2 Mostrar el mensaje elegido................................................................................................. 16
8 Lado de administrador básico ..................................................................................................... 18
8.1 Crear el controlador general ............................................................................................... 19
8.2 Crear la vista ........................................................................................................................ 20
8.3 Crear el modelo ................................................................................................................... 24
9 Traducciones ............................................................................................................................... 25
9.1 Introducción ........................................................................................................................ 25
9.2 Añadir una traducción al lado público ................................................................................ 26
9.3 Añadir una traducción a la gestión del componente .......................................................... 26
9.4 Opciones para la localización de los ficheros de idiomas ................................................... 26
9.5 Añadir traducciones a la instalación del componente ........................................................ 27
10 Añadir una barra de herramientas .......................................................................................... 27
10.1 Añadir controladores específicos ........................................................................................ 30
10.2 Añadir una vista de edición ................................................................................................. 32
10.3 Añadir un modelo y modificar el existente ......................................................................... 33
11 Añadir adornos en el back-end ............................................................................................... 35
11.1 Añadir algunos iconos ......................................................................................................... 36
11.2 Modificar las vistas .............................................................................................................. 36
11.3 Modificar el archivo principal de entrada ........................................................................... 39
11.4 Añadir algunas cadenas de palabras en el archivo de idioma ............................................ 40
12 Añadir verificaciones de formulario ........................................................................................ 40
2
Desarrollar componente en Joomla Jesús García Pérez
3
Desarrollar componente en Joomla Jesús García Pérez
1 REQUISITOS.
Necesita Joomla 1.6 o una versión posterior para seguir este tutorial.
2 INTRODUCCIÓN.
Este manual pretende mostrar algunas nociones básicas sobre creación de componentes en Joomla.
Ha sido desarrollado siguiendo la bibliografía, por tanto, el contenido más extensamente se puede
encontrar en ella.
- Instalación (installation). Para instalar Joomla. Se usa solamente una vez en la primera instalación.
http://localhost/joomla/index.php?option=com_grtic
http://localhost/joomla/administrator/index.php?option=com_grtic
El archivo grtic.xml contendrá información del componente y la descripción de los archivos que
forman el portal.
3 MODELO-VISTA-CONTROLADOR.
4
Desarrollar componente en Joomla Jesús García Pérez
En el Framework (marco de trabajo) de Joomla 1.6, los componentes de terceros dividen su código
en tres partes principales:
3.1 Introducción
5
Desarrollar componente en Joomla Jesús García Pérez
grtic.php
Este va a ser el punto de entrada de nuestro componente.
controller.php
Este archivo contiene nuestro controlador base.
views/grtic/view.html.php
Este archivo recupera los datos necesarios y coloca sobre la plantilla.
views/grtic/tmpl/default.php
Esta es la plantilla donde nuestro proyecto.
grtic.xml
Este fichero XML que le dice a Joomla cómo instalar nuestro documento.
Joomla sabe qué componente tiene que cargar porque busca en la cadena de consulta de la
petición el parámetro option, del cual obtiene el nombre del componente a cargar. Es decir,
nosotros para llamar a nuestro componente Grtic, introduciremos en joomla la URL acabada
con index.php?option=com_grtic. Esto muestra la página principal de nuestro componente,
que por defecto carga la vista con el mismo nombre del componente, es decir, la vista con
nombre Grtic.
Resumiendo en cuanto el nombre del archivo para el punto de entrada debe de ser el mismo
que el del componente. En nuestro caso como nuestro componente se llama Grtic durante la
instalación Joomla creará una carpeta llamada com_grtic y el punto de entrada debe
denominarse como grtic.php.
6
Desarrollar componente en Joomla Jesús García Pérez
Crearemos una instancia de nuestro componente, en nuestro caso los llamamos botanic,
por lo tanto la clase intanciada será grticController como veremos en el siguiente apartado.
Una vez instanciada ejecutaremos la tarea (task) solicitada.
En los siguientes apartados describiremos de forma más detallada cada uno de los archivos
básicos que compondrán nuestro componente.
Como hemos visto anteriormente es en el punto de entrada donde se creará una instancia del
controlador añadiéndole el prefijo de grtic:$controller = JController::getInstance(grtic);.
7
Desarrollar componente en Joomla Jesús García Pérez
El nombre de la carpeta de la vista por defecto es el nombre del componente. En nuestro caso la ruta
es component/com_grtic/views/grtic/.
El archivo que contendrá el código de la vista se llama view.[view_mode].php. El modo de vista por
defecto, y probablemente el único modo de vista por defecto que puede necesitar es html. Así que
nosotros damos el nombre a la vista view.html.php.
8
Desarrollar componente en Joomla Jesús García Pérez
El método display de la clase Jview es llamado con la tarea display de la clase JController. En
nuestro caso, este método mostrará datos usando el archivo tmpl/default.php.
Este archivo de plantilla se incluirá en la clase JView. Por lo tanto, aquí $this hace referencia a la
clase grticViewgrtic
9
Desarrollar componente en Joomla Jesús García Pérez
En el marco de trabajo de Joomla 1.6, los componentes se ejecutan usando elementos de menú
(menuitems). Si vas al gestor de menús de tu instalación de Joomla, este elemento del menú no
existe. Añadir esta funcionalidad es fácil en Joomla. Simplemente con el archivo
site/views/grtic/tmpl/default.xml.
Por el momento la cadena no se traducirá en el lado del administrador. Veremos en otro artículo
posterior como se llevan a cabo las traducciones.
5 Añadiendo un modelo
En el marco de trabajo de Joomla 1.6, los modelos son los responsables de gestionar los datos.
10
Desarrollar componente en Joomla Jesús García Pérez
La primera función que se tiene que escribir para un modelo es la función get. Esta devuelve los
datos a quien los llama (return $this->msg;). En nuestro caso, los llamará la vista grticViewgrtic. Por
defecto, el modelo llamado grticModelgrtic es el modelo principal asociado a esta vista.
Ahora la clase grticViewgrtic le pide al modelo los datos usando la función get de la clase JView.
También se ha añadido una comprobación de errores.
11
Desarrollar componente en Joomla Jesús García Pérez
site/models/grtic.phpEl modelo tiene que ser modificado para poder elegir entre los dos mensajes
diferentes (que son elegidos por el usuario con el campo definido abajo):
12
Desarrollar componente en Joomla Jesús García Pérez
Los componentes suelen gestionar sus datos usando la base de datos. Durante la fase de
Instalación/Desinstalación/Actualización de un componente, usted puede ejecutar peticiones SQL a
través del uso de archivos de texto SQL.
DROPTABLEIFEXISTS`#__gritic`;
13
Desarrollar componente en Joomla Jesús García Pérez
Hard-code, término del mundo de la informática, hace referencia a una mala práctica en el desarrollo
de software que consiste en incrustar datos directamente en el código fuente del programa, en lugar
de obtener esos datos de una fuente externa como un fichero de configuración o parámetros de la
línea de comandos, o un archivo de recursos.Considerada como un antipatrón de diseño, se trata de
una práctica por abandonar, ya que requiere la modificación del código fuente cada vez que cambian
los datos, cuando lo conveniente sería que el usuario final pudiera cambiar estos detalles fuera del
código fuente del programa.
Esto introduce un nuevo tipo de campo y le dice a Joomla que busque la definición del campo en la
carpeta /administrator/components/com_grtic/models/fields
14
Desarrollar componente en Joomla Jesús García Pérez
El nuevo tipo de campo muestra una lista desplegable de mensajes de la cual elegir. Puedes ver el
resultado de este cambio en el gestor de menús. Hay que mirar en los tipos de elementos grtic.
15
Desarrollar componente en Joomla Jesús García Pérez
16
Desarrollar componente en Joomla Jesús García Pérez
El modelo ahora le pide a la clase tabla Tablegrtic que le proporcione el mensaje. Esta clase de tabla
tiene que ser definida en el archivo admin/tables/grtic.php.
17
Desarrollar componente en Joomla Jesús García Pérez
No debería notar ninguna diferencia, pero si accede a la base de datos debería ver una tabla llamada
jos_grtic con dos columnas: id y titulo.
Diseñar una interfaz básica del lado del administrador nos lleva a crear, al menos, un tríptico
Modelo-Vista-Controlador. Tenemos que modificar el punto de entrada a la administración de
nuestro componente, el archivo admin/grtic.php
18
Desarrollar componente en Joomla Jesús García Pérez
19
Desarrollar componente en Joomla Jesús García Pérez
20
Desarrollar componente en Joomla Jesús García Pérez
Las vistas se muestran usando layouts o plantillas (templates), que se encuentran en el directorio
tmpl. La vista por defecto: admin/views/grtics/tmpl/default.php
21
Desarrollar componente en Joomla Jesús García Pérez
En Joomla, las vistas muestran datos usando posiciones.Esta posición llama a varias subposiciones
(head, foot y body). Cada subposición corresponde a un archivo prefijado con el nombre de la
posición principal (default), y un guión bajo.
- checkAll es una función javascript definida en el núcleo de Joomla que marcará todos los
checkboxes con un sólo click.
22
Desarrollar componente en Joomla Jesús García Pérez
- JHtml::_ es una función de ayuda (helper) que mostrará el HTML. En este caso mostrará una
casilla de verificación para cada elemento.
23
Desarrollar componente en Joomla Jesús García Pérez
La vista grtics le pide al modelo los datos. En Joomla, existe una clase capaz de gestionar una lista
de datos: JModelList. La clase JModelList y sus clases herederas necesitan solamente un método:
y dos mandatos:
Los métodos getItems y getPagination se definen en la clase JModelList. Estos métodos no necesitan
ser definidos en la clase grticModelgrtic.
Grtic almacena su contenido en la base de datos, por tanto es ahí de donde obtendremos la
información que mostraremos en la vista. En Joomla hay una clase para gestionar la
información de la base de datos: JModelList. Esta clase tiene un metodo llamado
getListQuery, que nos devolvera un listado de objetos, es decir, un listado con la
información que en la vista hemos pedido.
24
Desarrollar componente en Joomla Jesús García Pérez
Ahora puede ver en su componente grticuna tabla con dos columnas, dos filas y cajas de
verificación. Puedes hacer click en las cajas de verificación con el fin de seleccionar las diferentes
opciones que quiera.
9 Traducciones
9.1 Introducción
Joomla gestiona los idiomas para componentes en 4 situaciones diferentes:
25
Desarrollar componente en Joomla Jesús García Pérez
Por lo tanto, una extensiónpuede incluir unacarpeta de idiomacon un.sys.ini. diferente ala
instaladaen las carpetas de idiomas del núcleojoomla(este último no estáincluido en esacarpeta de
idioma, pero en la raízo cualquier otra carpetaque noestá instalado).Esto permite mostrar 2
descripcionesdiferentes: la sys.inien la carpeta "lenguaje" que se utiliza como mensaje que aparece
cuandola instalaciónse ha hecho, y el otro (del .ini) se utiliza para funcionamiento "normal", por
ejemplo, cuando la extensiónse edita en elback-end. Esto puede ser extremadamenteútil cuando
intalando también usa algunos scriptsy requiereun valor diferente parala descripción.
26
Desarrollar componente en Joomla Jesús García Pérez
En Joomla, el administrador interactúa generalmente con los componentes a través de una barra de
herramientas. En el archivo admin/views/grtics/view.html.phpse creará una barra de herramientas
básica y un título para el componente.
27
Desarrollar componente en Joomla Jesús García Pérez
28
Desarrollar componente en Joomla Jesús García Pérez
Ya que la vista puede realizar algunas acciones, tenemos que añadir algunos datos de entrada en la
vista por defecto.
admin/views/grtisc/tmpl/default.phpLa vista por defecto. Muestra la tabla con los datos de entrada
y se le han añadido algunos datos de entrada.
29
Desarrollar componente en Joomla Jesús García Pérez
Estas son las tareas de composición (controller.task). Por tanto hay que codificar 2 nuevos
controladores grticControllergrtics y grticControllergrtic. Para ello crearemos tareas en el
controlador específico para después poder llamarlas de la manera controller.tarea
admin/controllers/grtics.phpclasegrticControllergrticsqueextiendeJControllerAdmin
30
Desarrollar componente en Joomla Jesús García Pérez
admin/controllers/grtic.phpclasegrticControllergrticqueextiendeJControllerForm.
31
Desarrollar componente en Joomla Jesús García Pérez
32
Desarrollar componente en Joomla Jesús García Pérez
33
Desarrollar componente en Joomla Jesús García Pérez
La vista grticViewgrtic pide formularios y datos a un modelo. Este modelo tiene que proveer los
métodos getTable, getForm y loadData (llamados desde el controlador JModelAdmin).
34
Desarrollar componente en Joomla Jesús García Pérez
Este modelo hereda de la clase JModelAdmin y usa su método loadForm. Este método busca los
formularios en la carpeta forms. Además tendremos que crear un archivo XML que nos permitira
definir los diferentes campos del formulario. Esto lo ha incorporado el nuevo Joomla! 1.6.
Para poder gestionar nuestro programa necesitamos ejecutar acciones. Donde colocar estas
acciones es decisión de cada uno. Joomla nos pone a su disposición una clase que no
ayudará a este propósito:JToolBarHelper.
Por ahora sólo vamos a dedicarnos a mostrar esta barra de herramientas y cambiar los iconos
de nuestro componenente. Más adelante investigaremos como realizar las solicitudes de la
aplicación y como responder a éstas.
JToolBarHelper::title(JText::_('COM_GRTIC_MANAGER_GRTICS'),'grtic');
35
Desarrollar componente en Joomla Jesús García Pérez
36
Desarrollar componente en Joomla Jesús García Pérez
Esta vista usa un segundo parámetro para la función JToolBarHelper::title. Se usará para construir
una clase CSS para el título. El método _setDocument establece el título en el navegador.
37
Desarrollar componente en Joomla Jesús García Pérez
38
Desarrollar componente en Joomla Jesús García Pérez
Esta vista también usa el segundo parámetro de la función JToolBarHelper::title para establecer el
título en el navegador.
39
Desarrollar componente en Joomla Jesús García Pérez
40
Desarrollar componente en Joomla Jesús García Pérez
41
Desarrollar componente en Joomla Jesús García Pérez
Nótese que ahora la clase CSS es "inputboxvalidate-titulo" y que el atributo requiredesta definido
como true. Esto significa que este campo es obligatorio y que tiene que ser verificado por el
encargado de la validacion de formularios del marco de trabajo de Joomla.
Esto añade un encargado al validador de formularios de Joomla para todos los campos que contengan
la clase de CSS "validate-titulo". Cada vez que el campo titulo se modifique, el encargado se
ejecutara para verificar su validación (no dígitos).
42
Desarrollar componente en Joomla Jesús García Pérez
Esta función verificara que todos los formularios con la clase de CSS "form-validate" sean válidos.
Nótese que esto mostrará un mensaje de alerta traducido por el marco de trabajo de Joomla.
43
Desarrollar componente en Joomla Jesús García Pérez
44
Desarrollar componente en Joomla Jesús García Pérez
45
Desarrollar componente en Joomla Jesús García Pérez
46
Desarrollar componente en Joomla Jesús García Pérez
47
Desarrollar componente en Joomla Jesús García Pérez
13 Añadir categorías
13.1 Introducción
El marco de trabajo de Joomla ha implementado el uso de categorías para todos los componentes.
Añadir la capacidad de categorizar a un componente es bastante simple.
yadmin/sql/updates/mysql/0.0.12.sql
ALTER TABLE `#__grtic` ADD `catid` int(11) NOT NULL DEFAULT '0'
48
Desarrollar componente en Joomla Jesús García Pérez
49
Desarrollar componente en Joomla Jesús García Pérez
50
Desarrollar componente en Joomla Jesús García Pérez
Esta función se llamará automáticamente por el componente com_categories. Nótese que esto
cambiará:
* elsubmenu
* algunas propiedades CSS (para mostrar iconos)
* el título del navegador si el submenú está categorizado
* el título y añade un botón de preferencias
Tenemos que cambiar el controlador general para llamar a esta función y modificar el punto de
entrada del componente (la clase CSS .icon-48-grticesta ahora establecida en la función
addSubmenu)
51
Desarrollar componente en Joomla Jesús García Pérez
52
Desarrollar componente en Joomla Jesús García Pérez
53
Desarrollar componente en Joomla Jesús García Pérez
Este archivo será leído por el componente com_config del núcleo de Joomla. Por el momento hemos
definido solamente un parámetro: ¿se muestra o no se muestra el título de la categoría en el lado
público?
54
Desarrollar componente en Joomla Jesús García Pérez
Definimos el mismo parámetro para cada mensaje con un valor adicional: Use global (Usar Global).
ALTERTABLE`#__helloworld`ADD`params`VARCHAR(1024)NOTNULLDEFAULT'';
Admin/tables/grtic.phpLa función Tablegrtic debe modificarse para que coordine con estos
parámetros: se almacenarán en un formato JSON y se obtendrán en una clase JParameter. Tenemos
que sobrecargar los métodos bind y load.
56
Desarrollar componente en Joomla Jesús García Pérez
57
Desarrollar componente en Joomla Jesús García Pérez
admin/views/grtic/tmpl/edit.php
58
Desarrollar componente en Joomla Jesús García Pérez
site/models/grtic.php
59
Desarrollar componente en Joomla Jesús García Pérez
60
Desarrollar componente en Joomla Jesús García Pérez
61
Desarrollar componente en Joomla Jesús García Pérez
COM_GRTIC="GRTIC"
COM_GRTIC_ADMINISTRATION="GRTIC - Administración"
62
Desarrollar componente en Joomla Jesús García Pérez
COM_HELLOWORLD_ADMINISTRATION_CATEGORIES="GRTIC - Gategorías"
COM_GRTIC_GRTIC_CREATING="GRTIC - Creación"
COM_GRTIC_GRTIC_DETAILS="Detalles"
COM_GRTIC_GRTIC_EDITING="GRTIC - Edición"
COM_GRTIC_GRTIC_ERROR_UNACCEPTABLE="Algunos valorea son inaceptables"
COM_GRTIC_GRTIC_FIELD_CATID_DESC="Los mensajes pertenecen a la categoría"
COM_GRTIC_GRTIC_FIELD_CATID_LABEL="Categoría"
COM_GRTIC_GRTIC_FIELD_TITULO_DESC="Este mensaje ser´ mostrado"
COM_GRTIC_GRTIC_FIELD_TITULO_LABEL="Mensaje"
COM_GRTIC_GRTIC_FIELD_SHOW_CATEGORY_LABEL="Mostrarcategoría"
COM_GRTIC_GRTIC_FIELD_SHOW_CATEGORY_DESC="si se configura para mostrar, el título de la
categoría de los mensajes se mostrarán."
COM_GRTIC_GRTIC_HEADING_TITULO="Título"
COM_GRTIC_GRTIC_HEADING_ID="Id"
COM_GRTIC_MANAGER_GRTIC_EDIT="GRTIC gestor: Editarmensaje"
COM_GRTIC_MANAGER_GRTIC_NEW="GRTIC gestor: Nuevo mensaje"
COM_GRTIC_MANAGER_GRTICS="GRTIC gestor"
COM_GRTIC_N_ITEMS_DELETED_1="Un mensaje eliminado"
COM_GRTIC_N_ITEMS_DELETED_MORE="%d mensajes eliminados"
COM_GRTIC_SUBMENU_MESSAGES="Mensajes"
COM_GRTIC_SUBMENU_CATEGORIES="Categorías"
COM_GRTIC_CONFIG_TITULO_SETTINGS_LABEL="Configuración de los mensajes"
COM_GRTIC_CONFIG_TITULO_SETTINGS_DESC="Configuraciones que se aplicarán a todos los mensajes por
defecto"allmessagesby default"
Cada componente tiene su propio ACL (Lista de control de acceso. Se pueden especificar en el
archivo access.xml ubicado en la raíz de la carpeta del administrador. Este archivo describe el ACL
para el componente com_grtic en una sección diferente. En este ejemplo hemos elegido separar los
diferentes ACL en dos secciones: componentes y mensajes.
admin/access.xml
63
Desarrollar componente en Joomla Jesús García Pérez
64
Desarrollar componente en Joomla Jesús García Pérez
65
Desarrollar componente en Joomla Jesús García Pérez
Estos dos archivos usan el método getActions definido en el archivo admin/helpers/grtic.php. Vamos
a modificarlo.
admin/config.xml
66
Desarrollar componente en Joomla Jesús García Pérez
Primero, el 'core.edit' ACL "right" se coge del mensaje en sí mismo, después del componente.
admin/models/grtic.php
67
Desarrollar componente en Joomla Jesús García Pérez
admin/tables/grtic.php
68
Desarrollar componente en Joomla Jesús García Pérez
69
Desarrollar componente en Joomla Jesús García Pérez
70
Desarrollar componente en Joomla Jesús García Pérez
nueva propuesta para solventar este problema. Consiste en usar un archivo de scripts PHP que
contenga una clase que use cinco métodos:
Escribir un script de extensión consiste en declarar una clase cuyo nombre sea
com_ComponentNameInstallerScript y que tenga 5 métodos.
script.php
71
Desarrollar componente en Joomla Jesús García Pérez
Este archivo de script redirigiráal usuario al componente com_grtic cuando esté instalado y mostrará
mensajes cuando esté actualizado o desinstalado.
72
Desarrollar componente en Joomla Jesús García Pérez
Para añadir la funcionalidad de un servidor para actualizaciones ajuste el archivo grtic.xml para que
se parezca a este:
grtic.xml
73
Desarrollar componente en Joomla Jesús García Pérez
También tienes que poner un archivo XML en tu servidor que contenga toda la información de
actualizaciones.
grtic-update.xml
74
Desarrollar componente en Joomla Jesús García Pérez
Necesitas añadir un nuevo update-node (nodo de actualización) cada vez que se publique una nueva
versión.
Aquí concluye el tutorial sobre la creación de componentes para Joomla. Esperamos que les haya
sido de utilidad.
18 Bibliografía
- http://www.infosol.es/es/tutoriales.html
- http://www.webferrol.com/index.php/es/articulos-es/joomla-es/20-creacion-de-un-
componente-en-joomla-es
- http://ayudajoomla.com/joomla/programacion/356-desarrollo-de-componentes-para-joomla-
16.html
75