Funciones generales para el manejo de temas en Drupal 6

Variables disponibles por defecto para los temas.

  • $db_is_activeTrue si la base de datos se encuentra activa.
  • $directory. Ruta del tema la cual es relativa al directorio de Drupal.
  • $id.  Identificador del tema.
  • $is_adminTrue si el usuario activo es un administrador del sitio.
  • $is_frontTrue si la página actual es la página frontal.
  • $logged_inTrue si el usuario activo se encuentra autenticado.
  • $user.  Contiene la información del usuario activo.
  • $zebra.  Es un diferenciador par/impar para facilitar la presentación de algunos elementos de la interfaz.

Funciones mas comunes del sistema de temas.

  • Sus nombres empiezan siempre por el prefijo theme_.
  • Se ubican en includes/theme.inc e includes/theme.maintenance.inc.

Estas son las funciones de uso mas común para todos los módulos.

  • theme_box (includes/theme.inc).  Crea un contenedor (box) basado en el tema.
  • theme_breadcrumb (includes/theme.inc).  Maneja el rastro de la ubicación (breadcrumb).
  • theme_closure (includes/theme.inc).  Define el formato de hook_footer() al final de la página.
  • theme_feed_icon (includes/theme.inc).  Activa el ícono del alimentador RSS.
  • theme_image (includes/theme.inc).  Aplica el tema a una imagen.
  • theme_indentation (includes/theme.inc).  Provee un DIV para la estandarización de la identación.
  • theme_item_list (includes/theme.inc).  Aplica el tema a una lista de elementos.
  • theme_links (includes/theme.inc).  Aplica el tema a una lista de enlaces (como los enlaces primarios y secundarios).
  • theme_mark (includes/theme.inc).  Aplica el tema a un marcador para el contenido.
  • theme_more_help_link (includes/theme.inc).  Genera el enlace para “mas ayuda”.
  • theme_more_link (includes/theme.inc).  Genera el enlace de “mas” que aparece en los bloques.
  • theme_placeholder (includes/theme.inc).  Modifica el formato del texto que se despliega en las marcas (placeholders).
  • theme_progress_bar (includes/theme.inc).  Muestra el porcentaje del estado de una barra de progreso.
  • theme_status_messages (includes/theme.inc).  Modifica el formato de los mensajes de estado y de error.
  • theme_table (includes/theme.inc).  Aplica el tema a una tabla.
  • theme_table_select_header_cell (includes/theme.inc).  Controla la celda de la cabecera de las tablas que tienen la funcionalidad de seleccionar-todo.
  • theme_tablesort_indicator (includes/theme.inc).  Genera el ícono de ordenar.
  • theme_task_list (includes/theme.maintenance.inc).  Aplica el tema a la lista de tareas de mantenimiento.
  • theme_username (includes/theme.inc).  Aplica el tema al nombre de usuario.
  • theme_xml_icon (includes/theme.inc).  Genera el ícono de XML.

Enlaces.

Introducción a PHPTemplate con Drupal 6

Introducción.

PHPTemplate es un motor (engine) de temas desarrollado a la par de Drupal que permite la utilización de código PHP en ellas facilitando la separación entre lo concerniente al programador y lo relacionado con el diseñador web.  En la versión 6 se ubica su núcleo en themes/engines/phptemplate pero además se incluyen a otros archivos en ubicaciones según los módulos y funcionalidades que afectan.  Los nombres de los archivos que utilizan este motor obedecen al patrón *.tpl.php.

Los archivos mínimos requeridos son los siguientes.

  • page.tpl.php: contiene la distribución general de la página del tema.
  • <tema>.info: contiene la información de especificación del tema.

El archivo page.tpl.php.

En este archivo se detalla la estructura básica de la presentación de la página del tema.  Su personalización se realiza mediante la manipulación de clases utilizando CSS, además es posible definir plantillas alternativas que definen la presentación de secciones específicas del contenido: bloques (block.tpl.php), secciones (box.tpl.php), comentarios (comment.tpl.php), nodos (node.tpl.php), etc o a tipos de contenido específicos: noticias, artículos de blog, páginas, etc.

Algunas de las variables que se pueden utilizar en el head de los archivos *.tpl.php son las siguientes.

  • $head_title: título de la página.
  • $head: información de la sección head.
  • $styles: las hojas de estilo a incluírse, definidas en <tema>.info.
  • $scripts: los scripts a incluírse, definidos en <tema>.info.

También se incluyen las regiones (placeholders) que conformarán el contenido del tema.  Estas regiones deben registrarse previamente para poder ser utilizadas como tales.

  • $header: cabecera.
  • $left: columna izquierda.
  • $content: contenido (central).
  • $right: columna derecha.
  • $footer: pies de página.

Frecuentemente estas secciones deberán ser incluídas si se satisfacen ciertas condiciones, como por ejemplo, que se encuentren definidas.

<?php if($left): ?>
<div id="sidebar-left">
    <?php print $left; ?>
</div>
<?php endif; ?>

El archivo <tema>.info.

Su nombre corresponde el nombre del tema y la extensión .info, su función es la de definir la especificación y configuración básica del tema.

Este es el contenido del archivo bluemarine.info asociado con el tema con el mismo nombre incluído por defecto en Drupal.

; $Id: bluemarine.info,v 1.4 2007/06/08 05:50:57 dries Exp $
name = Bluemarine
description = Table-based multi-column theme with a marine and ash color scheme.
version = VERSION
core = 6.x
engine = phptemplate

; Information added by drupal.org packaging script on 2009-05-13
version = “6.12”
project = “drupal”
datestamp = “1242243950”

Es posible consultar mayor información al respecto en el documento Estructura del archivo .info.

Enlaces.

Los archivos de temas en Drupal 6

Introducción.

Los temas (themes) o plantillas (templates) en Drupal se encuentran compuestos por varios archivos: *.theme y *.tpl.php.

La distribución del core incluye seis temas por defecto.

Nombre
Engine Tiene tablas ? Es subtema ?
Bluemarine PHPTemplate Si No
Chamaleon PHP plano Si No
Garland PHPTemplate No No
Marvin PHP plano Si Si
Minnelli PHPTemplate No Si
Pushbutton PHPTemplate Si No

Los temas incluídos por defecto en la distribución se ubican en /themes mientras que los temas implementados por el usuario se deberán ubicar bajo /sites/all/themes.

Archivos utilizados.

Tema basado en PHPTemplate.

  • block.tpl.php – Apariencia de los bloques.
  • <tema>.info – Información básica del módulo como nombre, descripción y versión.
  • box.tpl.php – Apariencia de los contenedores de información.
  • comment.tpl.php – Apariencia de los comentarios.
  • logo.png – Imagen del logo utilizado en el tema.
  • node.tpl.php – Apariencia de los nodos.
  • page.tpl.php – Apariencia y distribución de la página.
  • screenshot.png – Imagen del tema para ilustrar su administración.
  • style-rtl.css – Estilo para temas con textos de derecha a izquierda.
  • style.css – Hoja de estilos principal.

Es posible redefinir partes específicas del tema creando archivos cuyo nombre corresponde al elemento que se desea alterar siguiendo el formato *.tpl.php.

Tema basado en PHP directamente.

  • background.png – Imagen utilizada de fondo.
  • <tema>.infoInformación básica del módulo como nombre, descripción y versión.
  • <tema>.theme Apariencia y distribución de la página.
  • common-rtl.css – Estilo alternativo para los elementos comúnes con textos de derecha a izquierda.
  • common.css – Estilo para los elementos comúnes.
  • logo.png – Imagen del logo utilizado en el tema.
  • style-rtl.css – Estilo para los elementos específicos del tema con textos de derecha a izquierda.
  • style.css Estilo para los elementos específicos del tema.

Es posible especificar archivos *.theme para redefinir la presentación de elementos específicos del tema.

Enlaces.

Creación de contenido traducido en Drupal 6

Introducción.

Este procedimiento permite mantener diferentes tipos de contenido en Drupal 6 traducido en los diferentes idiomas que soporta el Portal.  En esta versión, a diferencia de la versión 5, el módulo que permite esto se incluye en la distribución de core.

Configuración.

Activar el módulo de traducción de contenido.

  • Acceder a http://www.servidor.com/?q=admin/build/modules.
  • Activar el módulo Content translation encontrado en la sección opcional de core.

Asignar los permisos de traducción.

  • Acceder a http://www.servidor.com/?q=admin/user/permissions.
  • Asignar el permiso Translation > traducir contenido a los roles que estarán encargados de realizar la traducción de los contenidos.

Determinar los idiomas soportados por el portal.

  • Acceder a http://www.servidor.com/?q=admin/settings/language.
  • Agregar los idiomas necesarios además del idioma predefinido para el sitio.

Determinar cuales tipos de contenido tendrán traducción.

  • Acceder a http://www.servidor.com/?q=admin/content/types.
  • Elegir los tipos que tendrán contenido traducido.
  • Editar los tipos.
  • En la sección Workflow settings > Multilingual support seleccionar la casilla de verificación Habilitado con traducción.
  • Guardar.

En mi caso personal elegí los siguientes tipos de contenido para tener traducción: Evento, Noticia, Página, Página de grupo, Tema de foro y Enlaces web.

Activar el bloque para cambio de idiomas (opcional).

  • Acceder a http://www.servidor.com/?q=admin/build/block.
  • Activar y ubicar donde se desee al bloque Language switcher.

Utilización.

Después de realizado este el procedimiento de configuración, los tipos de contenido configurados para tal fin tendrán un nuevo campo llamado Idioma el cual permitirá elegir entre Lenguaje neutral y Español (o el idioma predeterminado elgido anteriormente).

Para acceder a la traducción del contenido es necesario editar el contenido inicial y seleccionar a Español como idioma.  Al guardar este contenido aparece una nueva opción llamada Traducción (Translate) a través de la cual es posible seleccionar cualquiera de los demás idiomas configurados para crear la traducción del contenido inicial.

Cuando se consulta un nodo este muestra con enlaces cuales son las traducciones que se encuentran disponibles y permite acceder a ellas, de igual manera es posible modificar el idioma del sitio utilizando el bloque de cambio de idioma.

Enlaces.

Migración de Drupal 5 a la versión 6

Introducción.

Después de utilizar la versión 5 de Drupal por un par de años he decidido que es hora de utilizar la nueva versión; estando relativamente próximos a la versión 7, la estabilidad y disponibilidad de módulos de la versión 6 debe ser suficiente.  Para probar la nueva versión inicié un ejercicio de migración un tanto extraño, quise copiar de la base de datos únicamente las tablas y los registros que fueran necesarios para la instalación fresca.  Al respecto encontré alguna poca información útil pero no lo suficientemente amplia y al incluírse también a los Grupos Orgánicos todos empezó a fallar.

Una segunda aproximación, un tanto mas estándar, fue la de realizar una copia de un sitio versión 5, reemplazar los archivos con la versión 6 y utilizar las facilidades de actualización de la nueva versión.  Con este método no puedo estar seguro de que la base de datos termine con únicamente lo necesario pero es relativamente mas fácil de implementar.

Hasta ahora considero que el producto final de la migración ha sido exitoso aunque no he realizado pruebas exhaustivas, sin embargo hay algo para hacer notas: de todos los módulos utilizados el único inexistente para la versión 6 fue Gallery for Organic Groups lo que me deja algo por definir aún acerca de la idoneidad de su uso en el proyecto que estaba desarrollando.

Procedimiento.

– Realice una copia de seguridad de la base de datos y de los archivos del sitio basado en Drupal 5.

En mi caso, la experimentación la realicé sobre una copia del sitio que establecí a partir de la copia de seguridad.

– Inicie sesión con el usuario administrador (cuyo ID = 1).

– Si la dirección es pública, es recomendable poner el sitio en modo fuera de línea (offline).

– Actualizar Drupal y sus módulos a la última versión disponible.  Ver procedimiento estándar.

– Tome nota de cuales son los módulos que se encuentran instalados y cuales se encuentran activos.

– Remueva los módulos no deseados, tanto desactivándolos como removiendo sus archivos de sites/all/modules o sites/default/modules según sea el caso.

– Desactive los módulos de terceros, es decir, los que no sean de Core.  Verifique especialmente el desactivar el módulo de Update Status.

– Cambie el tema activo a uno incluído en la distribución de Drupal como por ejemplo, Garland.

– Descargue la última distribución disponible de Drupal y de la traducción al español siguiendo estos pasos.

$ mv v2 v2.old
$ wget http://ftp.drupal.org/files/projects/drupal-6.12.tar.gz
$ tar zxvf drupal-6.12.tar.gz
$ mv drupal-6.12 v2

En el experimento realizado el directorio con la versión 5 de Drupal es site/ mientras que directorio objetivo, donde se instalará el nuevo portal con la versión 6 será v2/.  De igual manera, la versión de Drupal disponible en el momento era la 6.12, sin embargo se deberá utilizar la última disponible en el sitio web.

– Descargue la última versión disponible para el paquete de idiomas en español del sitio: http://drupal.org/project/translations?text=spanish.

$ cd v2
$ wget http://ftp.drupal.org/files/projects/es-6.x-1.3.tar.gz
$ tar zxvf es-6.x-1.3.tar.gz
$ rm es-6.x-1.3.tar.gz

– Establezca el archivo base de la configuración.

$ cp ./sites/default/default.settings.php ./sites/default/settings.php
$ chmod 777 ./sites/default/settings.php

– Acceda al sitio web en instalación para iniciar la configuración del nuevo sitio a través de la siguiente dirección: http://www.servidor.com/v2.

Choose language = Spanish (Español)

– Establezca la configuración de la base de datos.

Nombre de la base de datos: <DATABASE NAME>
Usuario de la base de datos: <DATABASE USERNAME>
Contraseña de la base de datos: <DATABASE PASSWORD>
Servidor de la base de datos: <DATABASE HOST>
Prefijo de las tablas: <DATABASE TABLE PREFIX>

– En este punto se deben generar muchos errores de la base de datos debido a que la estructura de las tablas corresponde a la versión anterior, por este motivo se debe realizar el siguiente proceso tantas veces como sea necesario hasta que ya no se generen errores.

Para actualizar la base de datos visitar la siguiente ubicación: http://www.servidor.com/v2/update.php.

– Active desde http://www.servidor.com/v2/?q=admin/build/modules los módulos de Core requeridos.  En caso eran: Comment, Contact, Database logging, Forum, Help, Locale, Menu, PHP Filter, Profile, Search, Statistics, Taxonomy, Update Status y Upload.

– Copie los archivos del sitio.

$ cp -rf ../site/files/* ./files

– Cree el directorio para el almacenamiento de los módulos de terceros.

$ cd sites/all
$ mkdir modules
$ cd modules

– Instale los módulos de terceros que considere convenientes.

Cuando se instalen módulos para la versión 6 que estaban presentes en el portal con la versión 5 es conveniente realizar la actualización de base de datos en la siguiente ubicación: http://www.servidor.com/v2/update.php.  Muy probablemente sea posible agrupar la instalación de varios módulos y realizar una única o pocas actualizaciones de la base de datos, sin embargo yo prefiero hacerlo uno a uno para verificar que no existan problemas específicos.

En mi caso particular se instalaron los siguientes módulos.

Vistas (http://drupal.org/project/views).

$ wget http://ftp.drupal.org/files/projects/views-6.x-2.6.tar.gz
$ tar zxvf views-6.x-2.6.tar.gz
$ rm views-6.x-2.6.tar.gz

Activar los módulos Views, Views Exporter y Views UI, y realizar la actualización de la base de datos.

Grupos orgánicos (http://drupal.org/project/og).

$ wget http://ftp.drupal.org/files/projects/og-6.x-1.3.tar.gz
$ tar zxvf og-6.x-1.3.tar.gz
$ rm og-6.x-1.3.tar.gz

Activar los módulos Organic Groups, Organic Groups Access Control y Organic Groups Views Integration, y realizar la actualización de la base de datos.

Integración con Piwik (http://drupal.org/project/piwik).

$ wget http://ftp.drupal.org/files/projects/piwik-6.x-1.1.tar.gz
$ tar zxvf piwik-6.x-1.1.tar.gz
$ rm piwik-6.x-1.1.tar.gz

Activar los módulos Piwik web analytics y piwik – reports, y realizar la actualización de la base de datos.

Mapa del sitio XML (http://drupal.org/project/xmlsitemap).

$ wget http://ftp.drupal.org/files/projects/xmlsitemap-6.x-1.0-beta5.tar.gz
$ tar zxvf xmlsitemap-6.x-1.0-beta5.tar.gz
$ rm xmlsitemap-6.x-1.0-beta5.tar.gz

Activar los módulos XML Sitemap, XML Sitemap engines y XML Sitemap node, y realizar la actualización de la base de datos.

Web File Manager (http://drupal.org/project/webfm).

$ wget http://ftp.drupal.org/files/projects/webfm-6.x-2.10-rc4.tar.gz
$ tar zxvf webfm-6.x-2.10-rc4.tar.gz
$ rm webfm-6.x-2.10-rc4.tar.gz

Activar los módulos Web File Manager, WebFM Image y WebFM Popup, y realizar la actualización de la base de datos.

En mis sitios he notado que este módulo falla para encontrar las imágenes cuando este se instala en sites/all/modules (como se debería hacer) en lugar de modules (como no se debería hacer).  Este problema se soluciona creando un enlace para este módulo.

$ ln -s <RUTA ABSOLUTA>/v2/sites/all/modules/webfm <RUTA ABSOLUTA>/v2/modules/webfm

Poormans Cron (http://drupal.org/project/poormanscron).

$ wget http://ftp.drupal.org/files/projects/poormanscron-6.x-1.0.tar.gz
$ tar zxvf poormanscron-6.x-1.0.tar.gz
$ rm poormanscron-6.x-1.0.tar.gz

Activar el módulo Poormanscron y realizar la actualización de la base de datos.

Mapa del sitio (http://drupal.org/project/site_map).

$ wget http://ftp.drupal.org/files/projects/site_map-6.x-1.0.tar.gz
$ tar zxvf site_map-6.x-1.0.tar.gz
$ rm site_map-6.x-1.0.tar.gz

Activar el módulo Site map y realizar la actualización de la base de datos.

Integración con Google Analytics (http://drupal.org/project/google_analytics).

$ wget http://ftp.drupal.org/files/projects/google_analytics-6.x-2.2.tar.gz
$ tar zxvf google_analytics-6.x-2.2.tar.gz
$ rm google_analytics-6.x-2.2.tar.gz

Activar el módulo Google Analytics y realizar la actualización de la base de datos.

Auto Logout (http://drupal.org/project/autologout).

$ wget http://ftp.drupal.org/files/projects/autologout-6.x-1.5.tar.gz
$ tar zxvf autologout-6.x-1.5.tar.gz
$ rm autologout-6.x-1.5.tar.gz

Activar el módulo Autologout y realizar la actualización de la base de datos.

Integración con TinyMCE.

Instalación de TinyMCE (http://tinymce.moxiecode.com/download.php).

$ mkdir -p v2/sites/all/libraries/tinymce
$ cd v2/sites/all/libraries/tinymce
$ wget http://prdownloads.sourceforge.net/tinymce/tinymce_3_2_4_1.zip?download
$ unzip tinymce_3_2_4_1.zip
$ rm tinymce_3_2_4_1.zip

Instalación del paquete de idiomas de TinyMCE (http://tinymce.moxiecode.com/download_i18n.php).

Descargar tinymce_lang_pack.zip con el idioma requerido.

$ cd jscripts/tiny_mce/
$ unzip ../../tinymce_lang_pack.zip
$ cd ../..
$ rm tinymce_lang_pack.zip

API del módulo WYSIWYG (http://drupal.org/project/wysiwyg).

$ wget http://ftp.drupal.org/files/projects/wysiwyg-6.x-2.0.tar.gz
$ tar zxvf wysiwyg-6.x-2.0.tar.gz
$ rm wysiwyg-6.x-2.0.tar.gz

Activar el módulo Wysiwyg.

Configuración del módulo Wysiwyg: Asociación con los formatos de entrada.

Visite http://www.servidor.com/v2/?q=admin/settings/wysiwyg.

Filtered HTML: TinyMCE
PHP code: No editor
Full HTML: TinyMCE

$ cd <RUTA ABSOLUTA>/v2/sites/all/modules

Captcha (http://drupal.org/project/captcha).

$ wget http://ftp.drupal.org/files/projects/captcha-6.x-1.0-rc2.tar.gz
$ tar zxvf captcha-6.x-1.0-rc2.tar.gz
$ rm captcha-6.x-1.0-rc2.tar.gz

Activar los módulos Captcha, Image Captcha, y realizar la actualización de la base de datos.

Realizar la configuración del módulo en http://www.servidor.com/v2/?q=admin/user/captcha.

Nombre real (http://drupal.org/project/realname).

$ wget http://ftp.drupal.org/files/projects/realname-6.x-1.2.tar.gz
$ tar zxvf realname-6.x-1.2.tar.gz
$ rm realname-6.x-1.2.tar.gz

Activar el módulo RealName.

Módulo de soporte para imágenes (http://drupal.org/project/image).

$ wget http://ftp.drupal.org/files/projects/image-6.x-1.0-alpha4.tar.gz
$ tar zxvf image-6.x-1.0-alpha4.tar.gz
$ rm image-6.x-1.0-alpha4.tar.gz

Activar el módulo Image.

Image Assistant for Wysiwyg  (http://drupal.org/project/img_assist).

$ wget http://ftp.drupal.org/files/projects/img_assist-6.x-2.0-alpha3.tar.gz
$ tar zxvf img_assist-6.x-2.0-alpha3.tar.gz
$ rm img_assist-6.x-2.0-alpha3.tar.gz

Activar el módulo Image assist.

Modificar el filtro de HTML restringido para permitir el uso de etiquetas de imagen.

Visitar http://www.servidor.com/v2/?q=admin/settings/filters.

Filtered HTML > Configurar
Configurar
Etiquetas HTML Permitidas += <span> <img>
Guardar la configuración

Configurar los permisos de acceso al módulo en http://www.servidor.com/v2/?q=admin/user/permissions.

IMCE for TinyMCE (http://drupal.org/project/imce).

$ wget http://ftp.drupal.org/files/projects/imce-6.x-1.2.tar.gz
$ tar zxvf imce-6.x-1.2.tar.gz
$ rm imce-6.x-1.2.tar.gz

Activar el módulo IMCE y realizar la actualización de la base de datos.

Puente IMCE para Wysiwyg (http://drupal.org/project/imce_wysiwyg).

$ wget http://ftp.drupal.org/files/projects/imce_wysiwyg-6.x-1.0.tar.gz
$ tar zxvf imce_wysiwyg-6.x-1.0.tar.gz
$ rm imce_wysiwyg-6.x-1.0.tar.gz

Activar el módulo IMCE Wysiwyg API bridge.

Enlaces web (http://drupal.org/project/weblinks).

$ wget http://ftp.drupal.org/files/projects/weblinks-6.x-2.0.tar.gz
$ tar zxvf weblinks-6.x-2.0.tar.gz
$ rm weblinks-6.x-2.0.tar.gz

Activar los módulos Web Links y Web Links Checker, y realizar la actualización de la base de datos.

Content Construction Kit (http://drupal.org/project/cck).

$ wget http://ftp.drupal.org/files/projects/cck-6.x-2.4.tar.gz
$ tar zxvf cck-6.x-2.4.tar.gz
$ rm cck-6.x-2.4.tar.gz

Activar los módulos Content y Text, y realizar la actualización de la base de datos.

Javascript tools (http://drupal.org/project/jstools).

$ wget http://ftp.drupal.org/files/projects/jstools-6.x-1.0.tar.gz
$ tar zxvf jstools-6.x-1.0.tar.gz
$ rm jstools-6.x-1.0.tar.gz

Activar el módulo Javascript tools y realizar la actualización de la base de datos.

Menúes activos – depende de jstools (http://drupal.org/project/activemenu).

$ wget http://ftp.drupal.org/files/projects/activemenu-6.x-1.x-dev.tar.gz
$ tar zxvf activemenu-6.x-1.x-dev.tar.gz
$ rm activemenu-6.x-1.x-dev.tar.gz

Activar el módulo Active menu y realizar la actualización de la base de datos.

Módulo de soporte para eventos (http://drupal.org/project/event).

$ wget http://ftp.drupal.org/files/projects/event-6.x-2.x-dev.tar.gz
$ tar zxvf event-6.x-2.x-dev.tar.gz
$ rm event-6.x-2.x-dev.tar.gz

Activar el módulo Event y realizar la actualización de la base de datos.

Organic Groups Calendar (http://drupal.org/project/og_calendar).

$ wget http://ftp.drupal.org/files/projects/og_calendar-6.x-1.0.tar.gz
$ tar zxvf og_calendar-6.x-1.0.tar.gz
$ rm og_calendar-6.x-1.0.tar.gz

Activar el módulo OG Calendar y realizar la actualización de la base de datos.

Organic Groups User Roles (http://drupal.org/project/og_user_roles).

$ wget http://ftp.drupal.org/files/projects/og_user_roles-6.x-1.5.tar.gz
$ tar zxvf og_user_roles-6.x-1.5.tar.gz
$ rm og_user_roles-6.x-1.5.tar.gz

Activar el módulo OG User Roles y realizar la actualización de la base de datos.

Realice la reconstrucción de los permisos en la nueva versión de Drupal visitando el siguiente enlace: http://www.servidor.com/v2/?q=admin/content/node-settings/rebuild.

Problemas con los foros de Drupal 5

Identificación del problema.

Desde hace varios días había detectado un problema con el módulo de foros de Drupal, el cual permitía ingresar nuevas colaboraciones (forum posts) al foro pero estas no eran asociadas a ningún tema o contenedor siendo imposible consultarlas posteriormente a través de la página del módulo (?q=forum) pero visibles como nodos de contenido (?q=admin/content/node).

Implementación de la solución.

Después de muchas pruebas infructuosas concluí que el problema no parecía ser de mis datos o de la configuración de los módulos, tenía que ser del core de Drupal.  Verifiqué tres sitios mas y estaban en iguales condiciones.

Gracias a un artículo que publicó NZ WebHosting en su blog, pude determinar que el problema se originaba en un conflicto del vocabulario.

En condiciones normales la tabla cms_vocabulary tiene una entrada para la categoría de los foros.  Su llave primaria es el vid el cual es un valor entero específico que debe coincidir con el esperado por Drupal.

INSERT INTO `cms_vocabulary` (`vid`, `name`, `description`, `help`, `relations`, `hierarchy`, `multiple`, `required`, `tags`, `module`, `weight`) VALUES (vid, ‘Forums’, ”, ”, 0, 1, 0, 1, 0, ‘forum’, -10);

Si no se tiene este registro y es necesario crearlo, antes se debe consultar cual es el valor de vid que se debe utilizar.  Para esto es necesario ejecutar el siguiente código PHP que puede ser inmerso en una página temporalmente.

<?php
$vid = _forum_get_vid();
print 'vid = ' . $vid;
$vid = variable_get('forum_nav_vocabulary', '');
print '<br /> variable_get("forum_nav_vocabulary", "") = ' . $vid;
?>

La ejecución de este código debe mostrar algo similar a lo siguiente.

vid = XXX
variable_get(“forum_nav_vocabulary”, “”) = XXX

Donde XXX deberá ser el valor del vid.  Si no aparece un valor para forum_nav_vocabulary significa que es necesario realizar el siguiente paso tal y como fue mi caso.

Así como en la tabla cms_vocabulary debe existir un registro para la categoría, en la tabla cms_vocabulary_node_types deberá existir un registro para el término asociado mediante el mismo vid.

INSERT INTO `cms_vocabulary_node_types` (`vid`, `type`) VALUES (vid, ‘forum’);

Teniendo estos dos registros asociados el formulario de creación de contenido para los foros empieza a incluír un campo Foros, antes inexistente, para la selección del foro (contenedor o tema) al que va dirigida la participación.  De igual manera, los artículos empiezan a aparecer correctamente desde la página principal de los foros.

Crear contenido > Tema del foro
Crear contenido > Tema del foro

Enlaces.

Actualización de portales web basados en Drupal a la versión 5.9

En los primeros días del mes de julio del presente año se liberaron las versiones 5.9 y 6.3 de Drupal.  Su actualización es altamente recomendada.

A pesar de que no he variado los pasos requeridos para realizar la actualización desde artículos anteriores, agregué un paso adicional para remover completamente los módulos de core antígüos y evitar con esto cualquier tipo de incompatibilidad por mezcla de versiones.

Con respecto a los siguientes pasos de actualización se debe tener en cuenta que el directorio donde se ubican los archivos del portal basado en Drupal se encuentran en site localizado en el directorio actual.  El paquete con la nueva distribución de Drupal ha sido descargado y copiado también en la ubicación actual.

Al final del proceso de actualización el directorio site contendrá la versión actualizada del sitio y el directorio site.old la copia de seguridad de la versión anterior.

Realizar una copia de seguridad de la base de datos.

Renombrar el sitio actual para conservarlo como una copia de seguridad previa a la actualización.

$ mv site site.old

Descomprimir la última versión de la distribución de Drupal.

$ tar zxvf drupal-5.9.tar.gz

Renombrar el directorio recién extraído para ser el nuevo portal web.

$ mv drupal-5.9/ site

Mueve los módulos de la nueva versión a una ubicación temporal para evitar cualquier tipo de sobreescritura con los módulos antígüos.

$ mv site/modules/ site/modules.new

Restaura los archivos del sitio y de los usuarios.

$ cp -rf site.old/files site

Restaura la información de configuración del sitio.

$ cp -rf site.old/sites site

Restaura los archivos del tema del sitio.  Reemplazar MITEMA por el nombre del tema (directorio) a restaurar.

$ cp -rf site.old/themes/MITEMA site/themes/

Restaura la totalidad de los módulos instalados en la versión anterior.

$ cp -rf site.old/modules site

De los módulos recién restaurados remueve los del grupo core para utilizar únicamente las últimas versiones.

$ rm -rf site/modules/aggregator site/modules/blog site/modules/book site/modules/comment site/modules/drupal site/modules/forum site/modules/legacy site/modules/menu site/modules/path site/modules/poll

$ rm -rf site/modules/search site/modules/system site/modules/throttle site/modules/upload site/modules/watchdog site/modules/block site/modules/blogapi site/modules/color site/modules/contact site/modules/filter

$ rm -rf site/modules/help site/modules/locale site/modules/node site/modules/ping site/modules/profile site/modules/statistics site/modules/taxonomy site/modules/tracker site/modules/user

Restaura los módulos de core de la última versión.

$ cp -rf site/modules.new/* site/modules

Remueve la copia de seguridad de los módulos de core de la última versión.

$ rm -rf site/modules.new

Ejecute el script de actualización de la base de datos si es necesario.

(web) $URL/apps/site/update.php

Utilizando el módulo update-status verifique si existen módulos con versiones nuevas, suceptibles de ser actualizados.

(web) $URL?q=admin/logs/updates

Actualice los módulos reemplazando sus directorios con las nuevas versiones bajo el directorio /site/modules y ejecute nuevamente el script de actualización de la base de datos.

(web) $URL/apps/site/update.php

Para terminar el proceso de actualización, remueva la copia del paquete de distribución de la última versión de Drupal.

$ rm drupal-5.9.tar.gz

Actualización de portales web basados en Drupal (versión 5.7)

El día de hoy actualicé cuatro de los cinco portales web que tengo desarrollados con Drupal a la versión 5.7.

No encontré ninguna novedad en el protocolo de actualización frente a los pasos de actualización que establecí con las otras versiones.

Lo único particular fue que el módulo Localizer que permite mantener veriones de los nodos en varios idiomas pidió que le agregara la siguiente línea al final del archivo sites/default/settings.php.

include_once('sites/all/modules/localizer/localizer_settings.php');

Sin embargo ese archivo incluido no existe en esa ubicación. Yo realicé la modificación con la siguiente línea.

include_once('modules/localizer/localizer_settings.php');

Plugin CodeHighlighterPlugin de wordpress

Esta semana instalé el plugin CodeHighlighterPlugin para WordPress el cual está basado en GeSHi como su motor genérico para resaltar la sintaxis.

El código fuente a resaltarse se debe encerrar entre etiquetas <pre> las cuales aceptan los siguientes parámetros.

Lenguaje del código fuente (lang=”XXX”). Es obligatoria e indica en que lenguaje se encuentra el snippet de código fuente inscrito. Su valor debe ser una de las siguientes cadenas.

actionscript, ada, apache, asm, asp, bash, c, c_mac, caddcl, cadlisp, cdfg, cpp, csharp, css, delphi, html4strict, java, javascript, lisp, lua, mpasm, nsis, objc, oobas, oracle8, pascal, perl, php, python, qbasic, sas, smarty, vb, vbnet, visualfoxpro, xml

Número de línea (lineno[=d]). Es opcional, si está presente hace que las líneas de código se presenten numeradas. Adicionalmente es posible especificar un valor a partir del cual se numerarán las lineas.

#include < stdio.h >

int main(void)
{
	printf ("Hola Mundo");
}

Otro ejemplo.

function hola($nombre)
{
    return "Hola " . $nombre;
}