Creación de componentes para Joomla 1.0.x

11 Septiembre 2009 Publicado en Blog

Esta artículo explicará como desarrollar un componente a medida para Joomla en la versión 1.0.x, mostrando los archivos y pasos básicos, así como también algunos métodos útiles tales como acceso a la base de datos, paginar resultados, etc. Se recomienda tener conocimientos de PHP y HTML para leer este artículo.

Estuctura de directorio

Joomla tiene una estructura de directorio dividida en 2 grandes grupos. Administrator, en donde se encuentran todos los archivos necesarios para que funcione el backend y los diferentes directorios que se encuentra en el directorio raíz.

Los directorios que nos interesan son los components, tanto dentro del directorio administrator, como en el raíz, pues aquí es donde se encuentran los archivos correspondiente a cada componente, que a su vez están en subdirectorios de la siguiente forma, com_nombreComponente, ejemplo com_users.

Si queremos ver los archivos correspondientes al componente users, debemos buscarlos en:

  • Administrator/components/com_users (backend)
  • Components/com_users (frontend)

Otro directorio importante es el includes, pues dentro de este encontramos archivos que tienen clases que se utilizarán en el componente por ejemplo para la conexión con la base de datos (database.php),  datos para manejar usuario, paginado, etc (joomla.php).

Los componentes se almacenan en la base de datos, más precisamente en la tabla jos_components.

Archivos que componen un componente

Un componente para ser instalado debe estar comprimido en un archivo zip con el siguiente formato com_NombreComponente.zip ejemplo com_users.zip.

Este archivo debe tener al menos 8 archivos que se pasaran a describir en breve:

  • admin.nombreComponente.php (backend)
  • admin.nombreComponente.html.php (backend)
  • toolbar.nombreComponente.php (backend)
  • toolbar.nombreComponente.html.php (backend)
  • nombreComponente.xml (backend)
  • nombreComponente.class.php (opcional)
  • nombreComponente.php (frontend)
  • nombreComponente.html.php (frontend)

A continuación se describirá cada archivo.

Esta artículo explicará como desarrollar un componente a medida para Joomla en la versión 1.0.x, mostrando los archivos y pasos básicos, así como también algunos métodos útiles tales como acceso a la base de datos, paginar resultados, etc. Se recomienda tener conocimientos de PHP y HTML para leer este artículo.

Estuctura de directorio

Joomla tiene una estructura de directorio dividida en 2 grandes grupos. Administrator, en donde se encuentran todos los archivos necesarios para que funcione el backend y los diferentes directorios que se encuentra en el directorio raíz.

Los directorios que nos interesan son los components, tanto dentro del directorio administrator, como en el raíz, pues aquí es donde se encuentran los archivos correspondiente a cada componente, que a su vez están en subdirectorios de la siguiente forma, com_nombreComponente, ejemplo com_users.

Si queremos ver los archivos correspondientes al componente users, debemos buscarlos en:

  • Administrator/components/com_users (backend)
  • Components/com_users (frontend)

Otro directorio importante es el includes, pues dentro de este encontramos archivos que tienen clases que se utilizarán en el componente por ejemplo para la conexión con la base de datos (database.php),  datos para manejar usuario, paginado, etc (joomla.php).

Los componentes se almacenan en la base de datos, más precisamente en la tabla jos_components.

Archivos que componen un componente

Un componente para ser instalado debe estar comprimido en un archivo zip con el siguiente formato com_NombreComponente.zip ejemplo com_users.zip.

Este archivo debe tener al menos 8 archivos que se pasaran a describir en breve:

  • admin.nombreComponente.php (backend)
  • admin.nombreComponente.html.php (backend)
  • toolbar.nombreComponente.php (backend)
  • toolbar.nombreComponente.html.php (backend)
  • nombreComponente.xml (backend)
  • nombreComponente.class.php (opcional)
  • nombreComponente.php (frontend)
  • nombreComponente.html.php (frontend)

A continuación se describirá cada archivo.

nombreComponente.xml (Backend)

Este archivo es el de instalación del componente.

Estructura básica del archivo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

Presentacion
01/10/2008
Serfe
This component in released under the GNU/GPL License
info@serfe.com
www.serfe.com
1.0.0

example.php
example.html.php
example.class.php



 
 CREATE TABLE `#__example` (
 id INT NOT NULL AUTO_INCREMENT,
 title VARCHAR(100) NOT NULL,
 content TEXT NOT NULL,
 published TINYINT(1) NOT NULL,
 date DATETIME NOT NULL,
 PRIMARY KEY (`id`)
 )
 




 
 DROP TABLE IF EXISTS `#__example`;
 



 Example
 
 List
 

 admin.example.php
 admin.example.html.php
 toolbar.example.php
 toolbar.example.html.php


 

admin.nombreComponente.php (Backend):

Es el primer archivo que se va a ejecutar cuando se carga el componente en el backend, y es el encargado de controlar que acción se va a realizar según parámetro act y task.

El parámetro act, identifica que opción del menú del backend se selecciono.

El parámetro task, nos dice que acción se va a ejecutar, ejemplo guardar, borrar, etc.

Ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
getPath( 'admin_html' ) );
require_once( $mainframe->getPath( 'class' ) );
//realiza los includes de los archivos necesarios.
 
$id = mosGetParam( $_REQUEST, 'cid', array(0) );
//Captura la variable pasada por REQUEST.
 
switch($act)
{
	default
	switch($task)
	{
		default:
			list($option);
		break;
		case "save":
			save($option);
		break;
}
	break;
}
break;
 
//función que listara los registros de una tabla en la base de datos.
function list($option)
{
	global $database, $mainframe;
	$limit = $mainframe->getUserStateFromRequest( "viewlistlimit", 'limit', 10 );
	//obtengo la variable limit que es usada para la paginación
	$limitstart = $mainframe->getUserStateFromRequest( "view{$option}limitstart", 'limitstart', 0 );
	//obtengo la variable limitstart especifica desde que registro comenzar a mostrar. 
 
	$query = "SELECT COUNT(id) FROM #__example";
	$database->setQuery($query);
	$total = $database->loadResult();
	//ejecuta la consulta y devuelve el resultado en una variable, esta función se utiliza cuando la consulta devuelve un solo resultado.
	require_once("includes/pageNavigation.php");
	//incluyo el archivo que contiene la clase para realizar el paginado.
	$pageNav = new mosPageNav( $total, $limitstart, $limit );
	//instancio la clase de paginado.
	$query  = "SELECT * FROM #__example";
	$query .= " LIMIT ".$limitstart.", ".$limit;
	$database->setQuery($query);
	$rows = $database->loadObjectList();
	//ejecuta la consulta devolviendo el resultado en un arreglo de objetos.
	HTML_Example::list($option, $rows, $pageNav);
	//llamo al método que me generará el html de la lista, y se le pasa como parámetro, el option que tendrá el componente actual, el arreglo con los registros, y el objeto con el paginado.
}
 
//función que guarda un registro en la base de datos.
function save($option) {
	global $database;
 
	$row = new presentacionTable($database);
	//instacio la clase que se creara en el archivo nombreComponente.class.php
	$row->bind($_POST));
	//Si en el formulario los nombres de los input coinciden con los nombres de los campos en la tabla de la base de datos, este método se encarga de relacionar cada campo del formulario con su respectiva columna en la tabla.
	$row->date = date("Y-m-d H:i");
	// se setae algún campo en particular.
	$row -> store();
	//Guarda los valores en la base de datos.
	mosRedirect("index2.php?option=".$option, "Example saved!");
	//redirige la pagina a una dirección específica, el segundo parámetro es el mensaje a mostrar.
}
?>

 

Este archivo implementa 2 acciones: listar y guardar.

Las primeras líneas incluye los archivos necesarios luego recibimos las variables que vienen por REQUEST. A continuación determinamos que acción vamos a ejecutar según el valor de la variable act y task.

Luego implementamos cada una de las funciones necesarias para realizar las acciones correspondientes.

admin.nombreComponente.html.php (Backend):

Este archivo define la clase que va a contener a los diferentes métodos encargados de generar el html.

La estructura básica del archivo es:

1
2
3
4
5
6
7
 

 

toolbar.nombreComponente.php (Backend):

Este Archivo controla que menú mostrar según el parámetro act y task recibidos.

La estructura básica del archivo es:

1
2
3
4
5
6
7
8
9
10
11
12
13
getPath( 'toolbar_html' ) );
//realiza un include del archivo con el nombre toolbar.nombreComponente.html.php el cual tiene los html del menú a mostrar.
 
switch ( $task ) {
 default:
 menuExample::DEFAULT_MENU();
 //Cargo el menú default de la clase menuExample.
 break;
 }
?>

 

toolbar.nombreComponente.html.php (Backend):

Este Archivo genera el menú a mostrar.

La estructura básica del archivo es:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 

 

nombreComponente.class.php (opcional):

Este archivo se usa para crear una clase que nos facilitará guardar, modificar y borrar un registro de una tabla por medio de los métodos que hereda de la clase mosDBTable.

En el ejemplo del archivo admin.nombreComponente.php hemos utilizado una clase de este tipo, mas específicamente cuando usamos los métodos bind(), store().

Esta clase también nos permite cargar un registro simplemente usando el método load(), al cual se le pasa como parámetro el id del registro.

Estructura básica del archivo:

1
2
3
4
5
6
7
8
9
10
11
12
13
mosDBTable('#__nombreTabla', 'id', $db);
 //A este metodo se le pasan 3 parámetros: nombre de la tabla, campo que contiene el primary key, conector de la base de datos.
 }
}
?>

 

nombreComponente.php y  nombreComponente.html.php (Frontend):

Estos 2 archivos se usa para realizar las acciones del componente en el frontend.

El archivo nombreComponente.php tiene la misma estructura que el admin.nombreComponente.php

El archivo nombreComponente.html.php tiene la misma estructura que el admin.nombreComponente.html.php

Serfe info(at)serfe.com https://www.serfe.com/images/serfe_logo_text.png https://www.serfe.com/images/serfe_logo_text.png FALUCHO 2032, S3016LDB, SANTO TOME, SANTA FE, ARGENTINA 1-305-5375397