Programación para Joomla

Tutoriales y manuales de programación para Joomla 2.5 y 3. Aprende con nosotros a desarrollar tus propiar componentes para Joomla 2.5 y 3.x. Además podrás encontrar trozos de códigos útiles para tus desarrollos Joomla.

Bloquear el uso de tp=1

Hace ya tiempo os contabamos en Ayuda Joomla como podíais conocer la posición de un módulo en Joomla. De esta forma a la hora de trabajar en nuestro sitio web se podía conocer facilmente donde estaba definido cada zona de módulos, pero además cualquier persona podría ver estas posiciones en nuestra web o nosotros podríamos verlas en otros sitios web.

En Joomla Argentina han publicado el siguiente método paara evitar que puedan conocer la posición de los módulos de Joomla. Para ello solo hay que colocar la siguiente línea de código en archivo index.php de vuestra plantilla.


JRequest::setVar('tp', 0);

Esta linea tiene que ser colocada despues de:


// no direct access defined('_JEXEC') or die('Restricted access');

Vía | Joomla Argentina

Pasar parámetros a un wrapper en Joomla

La semana pasada estuve desarrollando una aplicación que accedía a la base datos de joomla y  a unas bases de datos externas, para ello pensé en crear un script en php que hacía todo el trabajo y utilizar el componente wrapper para mostrar todo el resultado dentro de un portal Joomla. Desarrollé toda la aplicación como si de una aplicación web normal se tratase y cuando llego la hora de usar el wrapper me di cuenta que no permitía pasar parámetros en la URL.

 

San Google bendito vino al rescate con una interesante solución de Thomas Kahl. Esta solución se basa en la modificación del componente com_wrapper, este componente pertenece al core, por lo que si actualizáis vuestra versión de Joomla y este componente es actualizados deberéis volver a realizar la modificación.

 

  •  Haz una copia de seguridad del archivo /components/com_wrapper/wrapper.php
  • Abre el archivo en el editor de textos y ve a la línea 35.
  • Busca el siguiente texto:   $url = $params->def( 'url', '' );
  • Inserta el siguiente bloque de texto a continuación:

 foreach ($_GET as $key => $value) { 
     if ($key<>"option" && $key<>"Itemid") { 
          $url.=(strpos($url,"?")) ? "&" : "?";
          $url.="$key=$value"; 
     }
}

  •  Guarda el archivo y prueba que funciona.

Para probar el funcionamiento me imagino que tendréis que utilizar una cadena similar a esta:
http://wwww.tudominio.com/index.php?option=com_wrapper&view=wrapper&Itemid=XX¶m1=AA¶m2=BB....
 
Donde XX será el ID del Wrapper y param1=AA será el primer parámetro que reciba el script, param2=BB el segundo parámetro y así sucesivamente hasta utilizar todos los parámetros necesarios para el script. 

 

Esquema de la base de datos de Joomla 1.5

Esta semana he estado profundizando un poco en el funcionamiento interno de Joomla. Concretamente he estado indagando un poco como se almacena internamente los artículos.

Al principio estaba utilizando las aplicaciones que ofrece Mysql Tools para estudiar como se relacionaba cada tabla, pero resultaba un poco tedioso estar visualizando las tablas para ver como se relacionaban las claves.

Usando google llegué a un enlace en el sitio web oficial para los developers de Joomla que tenía este fantástico esquema en el que podéis ver todos los campos de cada tabla del core de Joomla y como se relaciona entre sí. Este esquema fue creado por Torkil Johnsen sobre la versión de Joomla 1.5 alpha 2, no es que sea la última versión de Joomla, pero no viene nada mal. En su sitio web podéis encontrar  el diagrama descargable para FabFORCE DBDesigner4.

Espero que os sea tan útil como lo ha sido para mi. Pulsad sobre la imagen para verlo más grande.

 

 

Base de datos de Joomla 1.5

Configurar php.ini para Joomla

Para poder utilizar el gestor de contenidos Joomla es necesario tener configurado correctamente el archivo php.ini. En este artículo se comentan las líneas de configuración del archivo php.ini que se deben modificar, ya que la instalación por defecto no suele cumplir los requisitos de Joomla.

Usando un editor de texto se debe abrir el archivo php.ini de configuración y modificar las siguientes lineas:

  • Buscar la línea Magic_quotes_gpc = on; y sustituirla por Magic_quotes_gpc = off;
  • Buscar la línea Display errors = off;y sustituirla por Display errors = on;
  • Buscar la línea Extension_dir = ”./” y sustituirla por Extension_dir = ”c:\php5\ext”. Esta suele ser la ruta por defecto donde suelen estar instaladas las extensiones dentro de la carpeta de instalación de php. Si no tienes instalado PHP puedes ver como se hace en este articulo
  • Buscar la línea Session.save_path = “n:\tmp” y sustituirla por session.save_path="c:\tmp". En realidad se puede emplear cualquier otra carpeta para guardar la sesiónes, es muy importante tener en cuenta que la carpeta debe estar creada y que tenga los permisos correspondientes para que pueda ser escrita la variable de sesión.
  • Descomentar las siguientes líneas (para descomentar una linea en php quitar el ; inicial)
    1. Extension = php_mysql.dll
    2. extension = php_mysqli.dll
  • Para que los cambios efectuados al archivo php.ini tenga efecto es necesario reiniciar el servidor web.

Una vez se haya configurado el archivo php.ini y se debe reiniciar el servidor web para que acepte la nueva configuración de php.

Personalizar módulos y componentes con Template Override

Template override es una técnica para redefinir la forma de representación en pantalla de un componente o módulo de Joomla. Esta funcionalidad se incluyó a partir del Joomla 1.5. El objetivo principal de esta técnica es permitir actualizar Joomla sin tener que preocuparse de que se vean afectados los cambios realizados previamente para personalizar el portal. Un ejemplo de posible aplicación de esta técnica consiste en personalizar la salida de un determinado módulo  o componente para conseguir cumplir los niveles de accesibilidad o el estándar XHTML.

¿Cómo funciona template override?

Cada vez que Joomla genera una página web mira en la plantilla que está usando el sitio web para ver si tiene un redefinición de algunos de los componentes o módulos empleados. Si encuentra que se ha redefinido un componente o modulo se usa su redefinición, en caso contrario usa el que está definido en el core.

Un ejemplo de template override

El módulo de búsqueda de Joomla mod_search no cumple la accesibilidad cuando se establece que el botón que se pulsa para iniciar la búsqueda sea una imagen. Esto se debe a que el diseñador de este módulo olvidó incluir la etiqueta ALT=”Descripción de la imagen”. Para hacer que este módulo de Joomla cumpla la accesibilidad y que no se vea afectado en futuras actualizaciones se utiliza template override. Para usar esta técnica en la plantilla se debe crear una carpeta con el nombre “html”. La ruta de esa carpeta debe ser de la forma ..\templates\nombreplantilla\html\ , en ella se guardan las redefiniciones de los módulos y componentes.

Para redefinir un módulo o componente se debe copiar el contenido de su carpeta tmpl. Pegar esos archivos en ..\templates\nombreplantilla\html\XXX , siendo XXX el nombre del módulo o componente. Ahora solo queda modificar esos archivos para obtener el comportamiento deseado.

En el caso de mod_search se copian los archivos default.php e index.html en la ..\templates\nombreplantilla\html\mod_search. Para que cumpla la accesibilidad la línea 10 se debe añadir la etiqueta ALT, como se muestra a continuación:

 

10
11
$button = '<input type="image" value="'.$button_text.'"
class="button'
.$moduleclass_sfx.'" alt="botón buscar" src="'.$img.'"/>';

Si visualizamos en el navegador se puede observar que el código del core se ha reemplazado por el código que se ha redefinido empleando template override.