lunes, 1 de diciembre de 2008

Sitios Rapidos y escalables con Joomla

Hace casi tres años, nos encomendaron la tarea de desarrollar de manera rápida unos cuantos sitios web de diversas índoles. Para ello analisamos varias herramientas y una de las mas completas resultó ser el sistema de manejador de contenidos (o CMS) Joomla!.

Instalación:

De forma casi inmediata descargamos el .zip de la págnia oficial descargas y lo descomprimimos dentro de la carpeta pública de nuestro servidor web.

Un requisito fundamentales para no tener problemas durante la instalación, administración y el posterior manteniminto es contar con la famosa arquitectura LAMP (Linux, Apache, MySQL y Php).

La instalación del Joomla! se realiza mediante un acceso de la url desde un explorador web. El mismo nos redireccionará a /instalation desde donde tendremos que completar una serie de datos básicos como el nombre del sitio, la url registrada, ubicación, usuario y password de la base de datos, password del usuario administrador del site, y si queremos instalar un paquete de datos de ejemplo.

Luego de finalizar se nos exigirá eliminar la carpeta /instalation y la próxima vez que accedamos al site podremos ver el Joomla! en marcha.

Administración:

La configuración y administración del Joomla! se realiza integramente desde el explorador web vía la url www.misitioweb.com/administrator . Una vez logueado con el usuario "admin" y la password seteada en el paso anterior, vemos un menú superior desplegable que describimos muy por arriba de la siguiente forma:

  • Site: Configuración Global del CMS, usuarios, templates, lenguajes y recursos multimedia.
  • Menu: ABM de grupos y elementos de cada menú del site.
  • Content: Todo lo referente al contenido estático, categorias, secciones y elementos del sitio web.
  • Components: Administración de los componentes que conforman la funcionalidad del sitio.
  • Modules: Configuración de los módulos, parte visual de cada componente.
  • Installers: Apartado de instalación y desinstalación de los templates, idiomas, componentes, extensiones y módulos del Joomla!.
Los nombres de cada menú y sobre todo su orden varian según la versión de Joomla! utilizada (1.x o 1.5x).

Extensiones:
Por medio de las extensiones (componentes o módulos) que se pueden agregar al Joomla!, el sitio puede nomar funcionalidades especiales que no están incluidas en la instalación básica. Por ejemplo existen componentes para agregar foros, chats, comentarios a las notas, manejo de comunidades de usuarios, administración de notas por niveles o grupos de usuarios, etc.
Como se instalan? Fácil, fácil, fácil. Buscamos la extension que queremos implementar, la mayoría están registradas y categorizadas en http://extensions.joomla.org. Recordemos que un componente es una funcionalidad que realizará nuestro sitio web y un módulo la parte activa que se visualizará en el mismo. Una vez que ubicamos la extensión, descargamos el paquete, generalmente comprimido en un .zip. La única diferencia para su instalación es que en la versión 1.x de Joomla! se diferencian los módulos de los componentes dentro del menú, en cambio en las versiones 1.5x las instalaciones se realizan desde un único acceso en el menú. En definitiva el Joomla! subirá el .zip desde nuestra ubicación local y procederá a instalarlo. Si todo va bien nos devolverá un success!.

Extensiones Utilizadas:
  • AkoComment: Comentarios en notas publicadas.
  • OpenSef: Urls amigables y generación de sitemaps de google.
  • zOOm Media Gallery: Para administrar galerias de imágenes.
  • Juga: Administrador permiso de acceso a elementos organizados por grupos.
  • Joomulus: Nube de tags desarrollado con flash.
  • Blocklist: Bloqueo de acceso por IP
Alguas recomendaciones:

La extensión AkoComment es utilizada para permitir el uso de comentarios en cada una de las noticias del sitio. Se recomienda elevar el tiempo entre comentarios (timeout) y activar el captcha.

El componente OpenSef es un componente que tiene dos funciones fundamentales: una es traducir las url a un nombre amigable (transforma el titulo de la nota en la url de la misma), y además genera de manera casi automática el sitemap del sitio para que google lo indexe. Este componente tiene un bug importantisimo que se hace notar cuando el sitio comprende muchas noticias. Su performance explota por dos motivos. La primera es una falla en el código fuente que fué corregida después de su última versión. Solo hay que reemplazar el código de abajo:

en el archivo sef.class.php

function lookupOutgoing(  $site_id, $url ) {
global $opensef_aliases, $database;

$returnaliases = array();
/*
if ($site_id == null) $site_id = -1;
if (count($opensef_aliases) > 0) {
foreach($opensef_aliases as $aliases){
if ( $aliases->internal == $url ) {
$returnaliases[] = $aliases;
}
}
}
*/
if (!count($returnaliases))
{
$query = "SELECT * FROM #__opensef_sef
WHERE published = '1'
AND valid = '1'
AND (direction IS NULL OR direction = '' OR
direction = 'o')
AND internal='$url'
ORDER BY site_id DESC, published DESC,
valid DESC, LENGTH(direction) DESC
LIMIT 1";


$database->setQuery( $query );
if ($database->loadResult())
{
$aliases = $database->loadObjectList();
foreach($aliases as $k=>$val)
{
$returnaliases[] = $val;
}
}
}

if (is_array( $returnaliases ) && count( $returnaliases ))
{

$returnaliases = xclCastObjectList( $returnaliases,
'JosOpenSEFAlias' );

return $returnaliases[0];
}
$null = null;
return $null;
}


y en el sef.php
if ($sefSite->id == null) $sefSite->id = -1;
$query = "SELECT * FROM #__opensef_sef
WHERE published = '1' AND valid = '1'
AND (direction IS NULL OR direction = ''
OR direction = 'o') AND (site_id IS NULL
($sefSite->id ? ' OR site_id = ' .
$sefSite->id : '') . ')
AND (external='{$_SERVER['REQUEST_URI']}'
ORDER BY site_id DESC, published DESC,
valid DESC, LENGTH(direction) DESC";
$database->setQuery( $query );
if ($database->loadResult()) {
$opensef_aliases = $database->loadObjectList();
}

Además hay que agregar indices a los campos "internal" y "external" de la tabla "jos_opensef_sef".

Acá les dejo un par de scripts para ejecutar en la base de datos (si comparten notas con editores usuarios de Mac) ya que el "omitir caracter" del openSef no funciona del todo bien con estas comillas.

UPDATE `mos_content` SET `title`=REPLACE(`title`,'“','"')
WHERE `title` like "%“%"

UPDATE `mos_content` SET `title`=REPLACE(`title`,'”','"')
WHERE `title` like "%”%"


Links:


Sitios basados en Joomla:

No hay comentarios: