Un sitio en Drupal paso a paso. Parte 6

Un sitio en Drupal paso a paso. (Parte 6 de 6)

En los cinco artículos anteriores se describió el proceso de instalación de Drupal. Instalación y configuración de los módulos esenciales. Configuración de CCK y Views. Creación del theme y por último, la configuración de los módulos que complementan la funcionalidad.

Sin embargo, quedan una serie de detalles quedan en el tintero para que el sitio este listo para su puesta en producción.

Traducciones

En la parte dos de esta serie de artículos se indicó como instalar el sitio en idioma en español.

La traducción de Drupal en el idioma nativo de cada país depende, como la mayoría en el software libre, de la comunidad que lo utiliza. De esta forma, los encargados de traducir Drupal al español son tanto usted como yo. Y debido a esto, hay algunas partes de Drupal que aún no están traducidas.

El principal efecto de esto es que se observa el sitio casi completamente en español, pero algunas cadenas aún están en inglés.

Drupal trae entre sus opciones una interfaz para traducir las cadenas no traducidas. En mi opinión esta interfaz podría ser mucho mejor. La buena noticia es que en Drupal 7 esto cambia, la mala, es que aún estoy con Drupal 6.

Por esa razón, muy acertadamente un desarrollador programó un módulo para mejorar el proceso de traducción de las cadenas no traducidas.

Localization Client agrega una barra en la parte inferior del sitio en donde se ven las cadenas no traducidas y las traducidas en dos columnas. Bastante intuitivo, y no es necesario ir recargando la página para traducir muchas cadenas.

Aún tiene algunos errores, pero utilizándola conjuntamente con la interfaz de traducción de Drupal se pueden lograr excelentes resultados.

Interfaz para traducir Drupal y sus módulos

Parches, esto no anda...

Para todos aquellos desarrolladores que vienen utilizando Drupal desde hace tiempo, sabrán que no todo siempre funciona como debería. Por poner un ejemplo real y bastante crítico por cierto, indico que me sucedió en este sitio.

Drupal 6 introduce como nueva funcionalidad la posibilidad de traducir las cadenas de los archivos de javascript. Esto significa que si usted esta creando un calendario tipo popup, y quiere que los meses estén en el idioma apropiado, con Drupal 6 ahora es posible (Drupal 5 y anteriores no contemplaban esta opción).

El problema es que esta opción no esta funcionando bien cuando se utiliza el cache para javascript. Eso significa que toda cadena, aunque esté traducida, se verá en inglés en el sitio.

Por suerte, existe un parche que corrige este error. Aún no se encuentra en el núcleo de Drupal 6 aún, se puede aplicar el parche sin problemas.

El proceso de aplicación de parches es igual para cualquier parche.

# Descargar el parche en el directorio indicado
cd Drupal6/includes
wget http://drupal.org/files/issues/locale-338630-30.D6.patch
# aplicar parche
patch locale.inc < locale-338630-30.D6.patch

De forma similar, un parche para el módulo Data soluciona el bug indicado en este issue. Actualización: El parche esta incluido en las nuevas versiones de Date, ya no es necesario aplicarlo.

Bloque personalizado

Tarde o temprano cualquier desarrollador que utilice drupal va a necesitar programar algo que no exista.

En mi caso, necesitaba un bloque para mostrar el siguiente artículo a publicar.

Sin entrar en demasiados detalles sobre la programación, Drupal 6 requiere que se active el módulo PHP Filter incluido en el núcleo para poder escribir snippets en php.

Una vez activado este módulo creé un bloque con el siguiente código.

<?php

  $sql = "SELECT n.title titulo, c.field_fecha_value fecha, c.field_resumen_value resumen
             FROM content_field_fecha c
             INNER JOIN  {node} n ON n.vid = c.vid
             WHERE n.status = 0 AND n.type IN ('articulo', 'video')
             LIMIT 1";
  $res = db_query($sql);
  $articulo = NULL;
   while($ob = db_fetch_object($res)) {
     $articulo['titulo'] = check_plain($ob->titulo);
     $articulo['fecha'] = format_interval(strtotime($ob->fecha) - time());
     $articulo['resumen'] = check_markup($ob->resumen);
   }
   print '<h3>Próximamente...</h3>';
   if (is_array($articulo)) {
     print '<div class = "date">Dentro de <strong>'. $articulo['fecha'] .' </strong>se publicará:</div>';
     print '<p><a title = "leer más" href = "/proximamente">'. $articulo['titulo'] .'</a></p>';
   }
   else {
     print t('No hay artículos por publicarse próximamente');
   }

?>

La idea es que busque en la base de datos todos aquellos videos y artículos que no hayan sido publicados aún, y muestre su titulo en un bloque.

Bueno eso de ahí arriba es en realidad un ejemplo. Para este sitio utilicé views para generar ese bloque. Pero para la versión con Drupal 5 de este mismo sitio realmente habia utilizado un código como el anterior y me pareció apropiado dejarlo como ejemplo.

Automatizando

A todos les debe pasar en algún momento de sus vidas, el tiempo no les alcanza para hacer todo lo que quisieran. De alguna manera esto afecta al sitio en el sentido de que tal vez durante un mes no publico nada y otro mes puedo publicar varios artículos y videos juntos. Para evitar esos períodos de inactividad prolongada en el sitio decidí implementar un sistema de publicación automatizada de artículos y videos.

Si bien el módulo scheduler podría ser el apropiado para eso, no me convence el hecho de que tenga que definir una fecha y que no sea visible en el artículo como fecha de publicación. Por lo tanto opte por utilizar el módulo rules.

Rules es, a mi criterio, uno de los módulos más importantes que tiene Drupal. Permite ejecutar acciones en base a eventos que se presentan en el sitio. Añadiendo también la opción de exigir que ciertas condiciones se cumplan para ejecutar la acción. Las posibilidades que brinda este módulo son realmente muchísimas.

Para que se publiquen los artículos utilizo el mismo query que usé en el bloque, de esta forma, cuando corre cron, controlo que la fecha de publicación del primer artículo o video no publicado sea menor a la del día de hoy. Si eso se cumple, publico el contenido.

Configurando rules

Todo listo, a publicar el sitio entonces

Como comenté en el primer artículo, el desarrollo de este sitio se hizo con un servidor local. Para que todos puedan leer los artículos, es necesario mover el sitio a un servidor en producción.

Este proceso consiste en, copiar los archivos de la instalación de Drupal (todo lo que esté incluido en el directorio Drupal6) y copiar la base de datos.

Dependiendo de las dimensiones del sitio tal vez sea conveniente comprimir todo el sitio, y descomprimirlo en el servidor de producción:

El siguiente código requiere conexión a ssh con el servidor

#Comprimir el directorio padre de todo el sitio
tar czf cuenco.tar.gz drupal6
mysqldump -u usuario -p nombre_base_de_datos > respaldo.sql
tar czf respando.tar.gz respaldo.sql

Mover estos archivos al servidor con FTP o sFTP

y luego, hacer el proceso inverso, ahora en el servidor de producción

#Comprimir el directorio padre de todo el sitio
tar xzf cuenco.tar.gz drupal6
tar xzf respando.tar.gz respaldo.sql
#Restaurar la base de datos
mysql -u usuario -p base_de_datos < respaldo.sql

Últimos ajustes

En el directorio raiz de Drupal hay un archivo llamado .htaccess, para aquellos que utilicen apache como servidor probablemente deban modificar algo en su interior.

www.CuencoDigital.com y CuencoDigital.com son en realidad el mismo sitio. Algunas personas encuentran más cómo acceder al sitio con www. otras sin la www. En el archivo .htaccess se puede crear una regla para que contemple a ambos sitios como uno solo:

  RewriteCond %{HTTP_HOST} ^cuencodigital\.com$ [NC]
  RewriteRule ^(.*)$ http://www.cuencodigital.com/$1 [L,R=301]

Agregando esas dos lineas, cada vez que alguien escriba www.cuencodigital.com será automáticamente redireccionado a cuencodigital.com.

¿Ya esta?

Ojala fuera tan simple. La esta sección deberia llamarse testing, testing, testing!. Para asegurarme de que todo esté en orden tuve que revisar y configurar las opciones de comentarios, configurar la forma de registrarse en el sitio, revisar muchas cadenas que no aparecen traducidas a simple vista. (Ejemplo, pruebe de indicar un resultado erroneo para la pregunta matemática.)

RSS, la opción por defecto que trae drupal no sirve para este sitio. Configurar los bloques en la barra lateral. Testing de nuevo. Desactivar la reconstrucción del cache de páginas. Configurar cron. Configurar google analytics. Probar comentarios al azar. Hacer el theme sobre los comentarios. Revisar las opciones de rutas automáticas para los tipos de contenidos nuevos.

Testing!. Probar cron, buscar contenidos. Crear cuentas de usuario al azar con menos privilegios. Probar posteo de comentarios con esos usuarios. En fin. La parte fea de todo esto.

Es necesario y determina la calidad final de cualquier pieza de software que el tiempo dedicado al testing sea más de unos minutos. Las pruebas son algo serio, en serio!

Conclusiones

Largo ¿no?. Creo que no voy a escribir tanto la próxima vez pero espero haber dado una idea general de lo que significa un desarrollo en Drupal.

Soy conciente de que estoy obviando muchos detalles. Escribirlos aquí podría haber reflejado realmente como hacer un sitio en Drupal paso a paso. Pero, como indiqué en el primer artículo de la serie. Es imposible describir todos los detalles. Ademas leer tanto nivel de detalle es aburrido (y ni que decir de escribirlos!). Es más fructífero que se anime usted mismo a crear y solucionar sus propios problemas. Despues me cuenta como le fue.

Como comentarios finales me gustaría hablar un poco de las herramientas que utilicé para el desarrollo.

Editores gráficos: Inkscape, gimp, gthumb
Editor de html: gedit
Editor de php: gPhpEdit
Servidor: Apache 2
Navegadores: Firefox 3, Opera 9
Motor de sql: Mysql 5
Sistemas operativos: Ubuntu Linux y Debian Linux

Con esto quiero indicar que es posible un desarrollo íntegro utilizando herramientas de software libre. Tal vez sea hora de que se empiecen a tomar un poco más en serio en las instituciones educativas.

Muchas gracias por haber leído este último artículo sobre como hacer un sitio en Drupal paso a paso. Espero sus comentarios.

Te invito a leer también...

Compartir este material en...

Comentarios

muy bueno... muchas gracias por compartir y difundir el soft libre... ahora estoy aprendiendo un drupal.

_Saludos

Hola.

No he conseguido una traducción al español de Captcha para Drupal 6, pero aquí veo que la parte donde pone "Resuelva este simple problema matemático..." está traducido. ¿Cómo puedo hacer eso?.

Gracias de antemano.

Buenos días.

Le debo dar mi más sincera enhorabuena por la labor que está llevando.
Personalmente, me ha ayudado muchisimo en mis primeros pasos con drupal y le estoy muy agradecido.
Estaré atento a sus futuras publicaciones.

Muchisimas gracias!!!!

Reciba un cordial saludo.

De nada Rafa.

Me alegro que te haya sido útil.

Saludos

instale drupal en /htdocs de mi hosting. lo que necesito ahora es moverlo a
/zulmeando.com.ar
segui esta guia http://drupal.org.es/node/12
pero no he podido. no pude encontrar /includes/conf.php

y ahi me quede. alguna idea?

muy buenos los articulos

Mi estimado muy bueno tu publicación, hoy domingo 15 de agosto lo he leído todo me sirvió para entender algunas cosas que no entendía en el manual de drupal 6, bueno hoy también de contacte por la IRC desde Pidgin.

saludos

En primer lugar gracias por el artículo.

Estoy viendo la forma de completar las traducciones de mi sitio porque, como dices, hay frases sueltas que aparecen en inglés.
Lo que me preguntaba es lo siguiente: ya que estamos en Sw libre y en un entorno colaborativo, ¿no pueden servir las frases que yo traduzca para los demás?

Hola:

Claro! para eso se creó http://localize.drupal.org

El asunto fue que se creó un tiempo después de que escribí este artículo por eso no hago mención sobre este sistema en el post. Pero bueno, ese es el lugar para compartir y revisar traducciones.

Gracias por la visita, saludos!

Hola Alvaro:

A ver, teóricamente, el texto del campo de cck deberia estar en inglés, y tener las traducciones en los distintos idiomas. Cuando drupal cambia de idioma (basado en el dominio por ejemplo, es.cuencodigital.com, en.cuencodigital.com, etc) carga la traducción correcta.

Aunque, si esto no funciona (y creo que para el caso de los fields, efectivamente no funciona), deberias probar el modulo CCK Translation, que viene incluido en el módulo Internationalization. Que según pude ver en el código fuente, hace exactamente eso que estás buscando.

Espero que sea de ayuda. Saludos

Mariano

HOLA INTERESANTE TU ARTICULO, PERO ME GUSTARIA SABER COMO HAGO PARA PUBLICAR LA PÁGINA QUE CREE, QUE PASOS DEBO SEGUIR.

POR FAVOR LO NECESITO URGENTE.

AOA

La verdad no entiendo muy bien la pregunta... Supongo que te referís a como hacer para que el sitio tenga su propia url y sea visible en internet.

Si es así, vas a necesitar un hosting, un dominio, tener drupal instalado y configurado correctamente. Si es tan urgente el asunto, recomiendo que consultes los foros de Drupal Hispano o el irc de drupal en español.

Por cierto, escribir en mayúsculas se considera gritar en internet. Por favor no lo hagas.

Saludos
Mariano