Creando un foro similar a phpBB/vBulletin en Drupal

Webmaster
 German Reyna Publicado el Lunes 30 de Agosto de 2010 a las 9:09am 

Introducción

Describiremos los pasos necesarios para lograr con Drupal un foro con prestaciones similares a phpBB/vBulletin.
No es tan sencillo lograr un foro en Drupal comparado con phpBB/vBulletin porque estos últimas son aplicaciones pensadas para lograr un foro, en cambio Drupal es un CMS de proposito general con el cual podremos configurar foros, blogs, wikis, e-commerce y todo lo que se nos pueda imaginar.

Si prefieres una forma más sencilla, prueba con DrupalBB, un foro basado en Drupal que hemos creado. Lo que sigue es justamente la descripcion de cómo se creo DrupalBB.

Si crees que el sitio que estas creando solo será un foro y nunca agregarás otras funcionalidades, entonces phpBB sera una opcion más fácil, pero si luego prentendes dar otros servicios, entonces Drupal te dara la mayor flexibilidad.

Elegir un buen CMS para crear un sitio, puede parecer superficial y solo una cuestion de cual es más facil de crear/mantener, pero si tienes la suerte que el sitio crece, necesitaras un CMS lo suficientemente solido cómo para que el crecimiento de tráfico y nuevas funciones no te genere grandes obstaculos. Si eliges mal el CMS puedes quedar atrapado entre una migracion a otro CMS o el estancamiento de tu sitio.

Prerequisitos

Este artículo no pretende ser un sustituto al manual de instalacion de Drupal, solo intentaremos ser un complemento del mismo si requieres tener la función de foro en tu sitio.

Damos por supuesto que ya tienes Drupal instalado y funcionando y ya conoces los conceptos básicos de su funcionamiento. Si no es asi puedes leer los manuales de Drupal en HTML o en PDF

Modulos requeridos

Modulos Core

  • Forum
  • Comment
  • Taxonomy
  • Contact
  • Locale
  • Menu
  • Path
  • Profile
  • Search
  • Statistics
  • Tracker

Modulos Contrib

Modulos creados

Opcionales según necesidades

Configuración de los módulos

A continuacion describiremos la funcionalidad y los pasos basicos para configurar los modulos, pero también es recomendable leer la documentación que contiene cada módulo en su directorio.

Los modulos contrib los descargamos y los descomprimimos dentro del directorio de Drupal en sites/all/modules/ si queremos que esten disponibles para todos los sitios o en sites/example.com/modules/ si queremos que esten disponibles solo para example.com.

Antes de comenzar a instalar y configurar los módulos es conveniente completar o revisar las siguientes configuraciones de Drupal:

  • Date and Time (admin/settings/date-time)
  • Site information (admin/settings/site-information)
  • File system (admin/settings/file-system)
  • Clean URLs (admin/settings/site-information)

Luego habilitaremos todos los modulos Core (admin/build/modules) y luego iremos habilitando de a uno los modulos contrib necesarios.

Locale

Con este modulo traduciremos la interfaz de drupal al español.
Debemos bajar el paquetes de traducción desde el sitio oficial de Drupal o si deseas puedes bajar la traducción personalizada para esDrupal. Lo descomprimimos y nos quedará un directorio con un archivo es.po dentro.

Luego ingresamos a la administración de la localización (admin/settings/locale) y realizamos los siguientes pasos:

  • En la solapa Add language, seleccionamos en Language name Spanish y presionamos Add language.
  • En la solapa Import, presionamos Examinar y seleccionamos el archivo es.po, Seleccionamos en Import Into: Spanish y presionamos Import.
  • Por último en la solapa List marcamos el tilde Enabled en Spanish (y lo quitamos en English), marcamos Spanish como default y presionamos Save configuration.

Menús

En la parte superior derecha del sitio utilizaremos el menu Primary links, donde colocaremos un enlace para ingresar a los foros.

Ingresamos a la administración de los Menus (admin/build/menu), en Primary links presionamos Añadir opción y completamos en Titulo: Foro, en Ruta: forum y presionamos Enviar.

En la parte superior izquierda tendria que aparecer un enlace para ingresar al foro.

Profile

Con este modulo agregaremos algunos campos adicionales al perfil de los usuarios.

Ingresamos a la administración de Perfiles (admin/user/profile) y adicionamos los siguientes campos:

Añadir URL
Categoría: Información personal
Título: Sitio o blog
Nombre del formulario: profile_url
Explicación: Si deseas que otros usuarios conozcan tu sitio o blog personal, ingresalo aquí
Peso: 0

Añadir campo de texto de varias líneas
Categoría: Información personal
Título: Intereses / Hobbies
Nombre del formulario: profile_intereses
Explicación: Si deseas que otros usuarios conozcan tus intereses, hobbies, etc. Ingresalos aquí.
Peso: 1

Añadir campo de texto de una línea
Categoría: Información personal
Título: Titulo de usuario
Nombre del formulario: profile_titulo
Explicación: Este es el título que aparecerá debajo de tu usuario en tus mensajes.
Peso: 2

Añadir lista de selección
Categoría: Mensajería instantánea
Título: Mensajería instantánea
Nombre del formulario: profile_mensajeria
Explicación: Si deseas que otros usuarios te contacten a traves de mensajería instantánea, selecciona el cliente que utilizas.
Opciones de selección:
MSN
ICQ
Skype
AIM
Yahoo!
Jabber
GTalk
Peso: 0

Añadir campo de texto de una línea
Categoría: Mensajería instantánea
Título: Usuario de mensajería instantánea
Nombre del formulario: profile_mensajeria_user
Explicación: Usuario de la mensajería instantánea seleccionada.
Peso: 1

Forum

Este módulo confunde a los novatos en Drupal que piensan que armar un foro es solo instalar este modulo.
Muchos novatos al ver las pocas funcionalidades que incluye este modulo piensan ¡que flojo que es Drupal! en este artículo trataremos de demostrar lo contrario.

Aquí es cuando se nota que la eficacia de Drupal no reside en las funcionalidades de los modulos, sino en la interconexion entre ellos, los módulos generan pequeñas funcionalidades pero al poder unirse logran funciones complejas, un estilo similar a los comandos Unix/Linux.

Ingresamos a la página de configuración de los Foros (admin/content/forum) y desde ahi podemos crear contenedores o foros.

Los contenedores son para ordenar los foros, primero debemos crear los contenedores para luego poder crear los foros dentro de estos.

Para nuestro ejemplo creamos lo siguiente:

- Privado (contenedor)
--- Moderadores (foro)
- Redes (contenedor)
--- Aplicaciones (foro)
--- Hardware (foro)
--- Seguridad (foro)

El contenedor Privado será destinado al foro Moderadores, según nuestro criterio decidimos dar permisos de lectura y escritura en este foro solo a los moderadores.

El contenedor redes posee tres foros dentro: Aplicaciones, Hardware y Seguridad. Al cual le daremos permisos de lectura y escritura a los usuarios registrados y permiso de lectura a los usuarios anónimos.

Los usuarios moderadores tendrán permiso de edición y eliminación en todos los foros.

Comencemos creando los contenedores:

  • Creamos el contenedor Privado.
  • Creamos el contenedor Redes.

Ahora crearemos los foros:

  • Creamos el foro Moderadores, le asignamos como padre el contenedor Privado.
  • Creamos los foros Aplicaciones, Hardware y Seguridad, a todos ellos asignamos como padre al contenedor Redes.

El rol Moderador es un subgrupo del rol autenticado, por lo tanto ya poseen todos los permisos de los usuarios autenticados y solo se le deben asignar los permisos que los autenticados no poseen.

Debemos crear el rol Moderador desde la página de administración de Roles (admin/user/roles).

Por último, ingresamos a Control de acceso (admin/user/access) y en el módulo forum tildamos:

crear temas del foro para el rol authenticated user.
editar los propios temas del foro para el rol authenticated user.
administrar foros para el rol Moderador.

En la próxima seccion veremos como asignarle permisos a los Moderadores con el módulo Taxonomy Access Control.

Taxonomy Access Control

Este módulo nos permitirá asignar permisos a ciertos roles (grupos de usuarios) dentro de los foros, básicamente lo que haremos es lo siguiente:

  • Uno o más foros con permiso de lectura y escritura solo para los moderadores, aquí se discutirán los temas de moderación y los usuarios registrados y anónimos no tendran ningún permiso en estos foros.
  • Un grupo de foros con permiso de lectura y escritura para los usuarios registrados y permiso de lectura para los usuarios anónimos (el rol Moderador es un subgrupo de rol Autenticado y hereda todos los permisos de este último).
  • Asignar el rol Moderador a los usuarios que cumplirán esta función.

Luego ingresamos a Taxonomy Access: Permissions (admin/user/taxonomy_access) para configurar los permisos de cada rol.

Ingresamos al rol anonymous user y configuramos la categoria Forums:

Vemos que existen 5 permisos para cada foro o contenedor: Ver, Actualizar, Eliminar, Create, Lista.

Ver, actualizar, eliminar y create: son los permisos que habilitan ver, actualizar eliminar o crear temas respectivamente.

Lista: este el permiso permite que el rol pueda ver el nombre del contenedor o foro (segun a donde se aplique) en la página principal del foro (/forum).

Y cada permiso tiene 3 estados: A (Allow), I (Ignore) y D (Deny).

Allow y Deny significan permitir o denegar el permiso respectivamente.

Ignore significa que no interviene y el permiso queda a criterio del módulo. Osea si el módulo (en este caso forum) le permite la accion, el usuario podra realizarla.

Tambien podemos definir un valor predefinido, que sera el valor que tomará por omisión si agregamos un nuevo foro o contenedor.

Entonces luego de esta breve explicación de permisos, volvamos a configurar los permisos para el rol anonymous user:

Ver:
Deny en Privado y Moderadores, los demas foros y contenedores Allow.

Actualizar:
Deny en todos los foros y contenedores.

Eliminar:
Deny en todos los foros y contenedores.

Create:
Destildamos en todos los foros y contenedores.

Lista:
Tildamos todos excepto Privado y Moderadores.

Confuración para el rol authenticated user:

Ver:
Deny en Privado y Moderadores, los demas foros y contenedores Allow.

Actualizar:
Deny en todos los foros y contenedores.

Eliminar:
Deny en todos los foros y contenedores.

Create:
Tildamos todos excepto Privado y Moderadores.

Lista:
Tildamos todos excepto Privado y Moderadores.

Confuración para el rol Moderador:

Ver:
Allow en todos los foros y contenedores.

Actualizar:
Allow en todos los foros y contenedores.

Eliminar:
Allow en todos los foros y contenedores.

Create:
Tildamos todos los foros y contenedores.

Lista:
Tildamos todos los foros y contenedores.

Por último. para establecer los usuarios moderadores ingresamos a la administración de Usuarios (admin/user/user), editamos los usuarios y seleccionamos el tilde Moderador.

Comment

En Drupal el primer post del hilo será el nodo y los sucesivos posts serán comentarios de este nodo. Este módulo nos permite configurar la apariencia de los comentarios.

Ingresamos a la administración de los Comentarios y luego a la solapa Opciones (admin/content/comment/settings) y seleccionamos las opciones:

  • Modo predefinido de visualización: Lista plana - expandida
  • Ordenación predefinida de visualización: Fecha - primero los más antiguos
  • Comentarios predefinidos por pagina: 30
  • Controles de comentarios: No mostrar
  • Campo de asunto del comentario: deshabilitado
  • Vista previa del comentario: Opcional
  • Ubicación del formulario de envío de comentarios: Mostrar en una página aparte

Y salvamos la configuracion.

Con estas opciones tratamos de darle una apariencia más similar a un foro.

Ingresamos a Control de acceso (admin/user/access) y en módulo comment verificamos que solo este tildado:

  • acceder a comentarios: en los roles anonymos user y authenticated user.
  • administrar comentarios: en el rol Moderador.
  • enviar comentarios: en el rol authenticated user.
  • enviar comentarios sin aprobación: en el rol authenticated user.

El módulo comment presenta algunos defectos:

1. Introduce la firma al final de los comentarios, de esta forma la firma es estatica, osea al cambiarla en el perfil del usuario no se actualiza en los comentarios anteriores y ademas distorciona la busqueda al ser parte del texto del comentario.

Para que esto no suceda haremos una pequeña modificacion el código del modulo comment editando el archivo modules/comment/comment.module y en la linea 1543, reemplazamos $user->signature por '' y nos queda:

$form['comment_filter']['comment'] = array('#type' => 'textarea', '#title' =>t('Comment'), '#rows' => 15, '#default_value' => $edit['comment'] ? $edit['comment'] : '', '#required' => TRUE);

2. Otro problema que tiene este módulo es que cuando el usuario edita un comentario, se actualiza la fecha del comentario y esto hace que en un foro tipo lista plana el comentario se desplace hacia la parte inferior como si fuera un nuevo comentario, para solucionar esto haremos otra pequeña modificacion al módulo.

Esta modificacón nos trae un inconveniente que el administrador no podra modificar la fecha de publicación del comentario, este fallo necesita un parche pero por el momento con esto solucionamos el problema a lo chapuza.

Editamos el archivo modules/comment/comment.module y en la linea 707, quitamos la actualización del timestamp y nos queda:

db_query("UPDATE {comments} SET status = %d, subject = '%s', comment = '%s', format = %d, uid = %d, name = '%s', mail = '%s', homepage = '%s' WHERE cid= %d", $edit['status'], $edit['subject'], $edit['comment'], $edit['format'], $edit['uid'], $edit['name'], $edit['mail'], $edit['homepage'], $edit['cid']);

3. Otro problema que tiene es que al enviar un comentario, nos deja en la primer pagina del hilo y seria mejor que nos dirija a la última página donde estará publicada nuestra respuesta. Esto lo solucionamos con la siguientes modificaciones:

Agregamos la siguiente funcion al archivo template.php ubicando en el directorio del theme. Si el archivo template.php no existe, creamos uno nuevo que comience con <?php

/* get the last page number of comments */
function comment_last_page($nid)
{
$last_page = ceil(comment_num_all($nid) / _comment_get_display_setting('comments_per_page'));
if($last_page==0) return 0;
else
return ($last_page - 1);
}

Modificamos modules/comment/comment.module, en la linea 1675, cambiamos la siguiente línea:

return array('node/'. $form_values['nid'], NULL , "comment-$cid");

Reemplazamos el NULL por "page=".comment_last_page($form_values['nid']) y nos queda lo siguiente:

return array('node/'. $form_values['nid'], "page=".comment_last_page($form_values['nid']), "comment-$cid");

Flatcomments

Este módulo necesita que le apliquemos un parche para que funcione en drupal 5.x, aqui puedes bajar el parche

Primero describiremos que significa comentarios anidados y planos.

Comentarios anidados:
nodo
- comentario 1
--- comentario 3
- comentario 2
- comentario 4
--- comentario 5

En el ejemplo anterior se observa que el comentario 3 es un comentario al comentario 1, osea el usuario cliqueo "Responder" en el comentario 1.

Comentarios planos:
node
- comentario 1
- comentario 2
- comentario 3

En los comentarios planos todos los comentarios son hijos del nodo.

Los comentarios planos tienen las siguientes ventajas:

  • Mas sencillo de entender para el usuario.
  • Mas sencillo para moderar porque se elimina la tarea de mover comentarios y la eliminación de comentarios es facil.
  •  

La desventaja de la lista plana es que los usuarios utilizaran mas el "Citar", pero no es un problema grave.

El módulo comment ingresa los comentarios en forma anidada. Se puede cambiar la configuracion de la visualizacion de los comentarios a lista plana, pero los comentarios continúan siendo anidados.

Ademas, el módulo comment permite que los usuarios editen sus propios comentarios mientras otro usuario no responda al mismo. Esto nos trae un problema cuando configuramos la visualización en lista plana porque no se sabe que comentario se puede editar y cual no.

Este problema se resuelve instalando el modulo flatcomments, que convierte los comentarios en una lista plana real. Osea todos los comentarios son hijos del nodo.

De esta manera los comentarios se pueden editar en forma indefinida, para solucionar esto desarrollamos el modulo Edit timer, que permite editar los comentarios durante solo los primeros 30 minutos luego de su envío. Más adelante veremos este módulo.

El módulo flatcomments tiene un fallo cuando se esta ingresando un comentario y se presiona "Previsualizar".

Para habilitar los comentarios planos, ingresamos a la administacion del modulo Comentarios, luego a la solapa Opciones, desplegamos el menu Flatcomments y seleccionamos los tipos de nodos donde habilitamos flatcomments, la recomendación es habilitarlo en todos.

Edit timer

Este rudimentario módulo que creamos, no deja que los usuarios editen sus comentarios y temas luego de 30 minutos una vez publicado. Es útil permitirles a los usuarios poder editar sus comentarios, para que corrijan alguna falta ortográfica o agregen información adicional, pero permitirle indefinidamente la edicion puede traer problemas. Por eso pensamos que 30 minutos de permiso de edición son suficientes.

Este módulo aún esta en desarrollo, solo cumple con la funcionalidad básica, pero pronto iremos agregandole algunas funcionalidades adicionales.

Por el momento no tiene configuracion, solo es necesario habilitarlo.

Taxonomy

Es un módulo requerido por el módulo forum. Para el caso de los foros no necesitaremos modificar su configuración.

Contact

Este módulo nos permite configurar un formulario de contacto con el administrador del sitio y ademas permite que los usuarios registrados se puedan contactar entre ellos si es que asi lo desean, habilitandolo en su cuenta.

Configuremos el formulario de contacto con el administrador del sitio, vayamos a la página de administración de Formulario de Contacto (admin/build/contact) ahi ingresamos a la solapa Añadir categoría, le damos un nombre a la categoría, por ejemplo consulta al webmaster, y configuramos la dirección que recibira estos email, por ejemplo webmaster@example.com.

En la solapa Opciones establecemos el mensaje que se presenta encima del formulario de contacto y un tilde que establece el valor por omision si los usuarios registrados desean que los contacten a través de la página de su perfil.

Esto nos agregará el item Contacto dentro del menu Navegación que estará desactivado, pero lo activamos presionando en activar y le modificamos el titulo por Contacto, el elemento padre a primary links y le asignamos el mayor peso para que aparesca a la derecha, y guardamos los cambios.

Aparecerá un enlace en la parte superior de la página para que los visitantes puedan contactarnos a través de dicho formulario.

En el control de acceso (admin/user/access), módulo contact, seleccionamos acceso al formulario de contacto del sitio para los roles anonymous y authenticated.

Search

Con este módulo habilitamos el buscador en el sitio.

El buscador de Drupal no realiza la busqueda online, sino indexa el sitio y devuelve los resultados desde la indexación, por lo tanto es necesario actualizar el indexado cada cierto tiempo para agregar el nuevo contenido.

Desde las opciones de busqueda (admin/settings/search) podemos ajustar algunos parametros de indexación según las necesidades de nuestro sitio.
Los parametros por omision parecen ajustarse bien para la mayoria de los sitios pequeños y medianos.

En la página de control de acceso (admin/user/access) debemos tildar el permiso buscar contenido en los roles authenticated user y anonymous user.

Al rol authenticated user podemos darle permiso a usar busqueda avanzada.

Por último nos queda configurar una tarea cron que actualice la indexación cada cierto tiempo, para más informacion leer Configuring cron jobs

Statistics

El módulo de estadisticas lo utilizaremos para contabilizar los accesos (views) a cada tema del foro.

Ingresamos a las Opciones del registro de acceso (admin/logs/settings) y activamos Contar las impresiones del contenido.

Por último, ingresamos al Control de acceso y en el módulo statistics tildamos ver contador de accesos al envío para los roles anonymous y authenticated.

Quote

Nos agrega el enlace Citar debajo de cada comentario.

Ingresamos a la administración de Citar (admin/settings/quote) y tildamos Tema de foro para que funcione dentro del foro.

  • Tildamos Display the quote link for nodes
  • Quitamos el tilde en Make the comment subject field a required field

Luego vamos a Formato de entrada (admin/settings/filters), configuramos Filtered HTML y habilitamos el filtro Quote filter, este filtro lo que hace el convertir los tags QUOTE en tags div. Salvamos los cambios

Por último, modificamos el orden en que se aplican los filtros desde la solapa Reordenar, teniendo en cuenta que el filtro Quote tiene que estar despues de cualquier filtro que reemplace HTML y antes del filtro Conversor de saltos de línea.

En el caso de un sitio que solo tiene instalado los filtros estandar, nos quedará el filtro Quote anteúltimo y el filtro Conversor de saltos de línea en la última posición.

Codefilter

Es un simple fitro para darle un tratamiento adecuado al tag code. Para que funcione solo tenemos que ingresar a la administración de los Formatos de entrada (admin/settings/filters), luego a la configuración del input format que utilizaremos (Filtered HTML) y tildamos el filtro Code Filter.

Smileys

¡No pueden faltar los emoticons un foro!

Tambíen habilitamos el modulo smileys import para poder importar y exportar conjuntos de emoticons.

Aqui les dejo el pack de caritas que arme: esdrupal-emoticons.tar.gz

Para instalar este pack de emoticons hay que descomprimirlo dentro del directorio del módulo Smileys en el directorio packs.
Luego se puede importar desde la administracion de Smileys (admin/settings/smileys), vamos a Import y presionamos Install.

Luego vamos a la solapa Opciones y tildamos Enable smileys select box for en Nodes y Commentarios.

En Control de Acceso módulo smileys debemos tildar use smiley select box para el rol authenticathed user.

Por último, vamos a Formato de entrada, configuramos Filtered HTML y habilitamos el filtro Smileys filter.

BUEditor

Drupal tiene varios módulos contrib para poder utilizar editores HTML WYSWYG en ves de un formulario para que el usuario ingrese sus envios y comentarios. Pero siempre existen problemas de compatibiliad entre estos editores HTML y los navegadores menos comunes.

Por este motivo seleccionamos BUEditor, que no es un editor HTML sino un formulario tradicional con el agregado de algunos botones (Javascript) para facilitar el ingreso de código HTML. De esta manera nos aseguramos que funcionará en todos los navegadores.

Este editor es muy configurable, se pueden agregar/quitar botones, tiene una funcion de importacion y exportacion de botones.

Para importar los botones de esdrupal, haremos los siguientes:

1. Copiamos las imagenes en el directorio del módulo BUEditor, dentro de icons: esdrupal-bueditor-buttons.tar.gz

2. Eliminamos todos los botones que vienen preconfigurados en BUEditor en el editor default.

3. Importamos los botones de esdrupal en el editor default: esdrupal-bueditor-buttons.csv

4. En visibility settings colocamos lo siguiente:

node/add/*
node/*/edit
comment/reply/*
comment/edit/*

5. Asignamos el editor default a los roles Moderador y authenticated user.

6. Vamos a Formato de entrada -> Filtered HTML -> Solapa Configurar y en Etiquetas HTML permitidas agregamos:

<h1> <h2> <h3> <img> <p> <div> <b> <i> <pre> <span> <hr>

IMCE

Este modulo nos brinda la funcionalidad de subir archivos e imagenes, cada usuario tendra su propio directorio con su quota de espacio.

Dado que es riesgoso permitir el upload de archivos a todos los usuarios, podemos configurar un rol con los usuarios de confianza que le permitiremos subir los archivos (por ej. el rol Moderador).

Los archivos podremos subirlo desde el editor BUEditor cuando insertamos un enalce o imagen, o desde la cuenta del usuario, solapa Ficheros personales, aqui tendremos un sencillo administrador de archivos.

Una vez habilitado el módulo vamos a Control de Acceso y tildamos access imce en los roles donde daremos permisos de upload de archivos (para nuestro caso el rol Moderador).

Luego ingresamos a la administración de IMCE (admin/settings/imce) y allí podremos configurarlo para los roles donde este habilitado. El usuario administrador (numero 1) tiene la posibilidad de tener su propia configuración.

Subscriptions

Este módulo nos permite subscribirnos a Temas del foro y recibir notificaciones por email cuando alguien escriba un nuevo comentario o hilo respectivamente.

Ingresamos a la página de configuración del módulo (admin/settings/subscriptions):

- Seleccionamos los vocabularios a omitir en las subscripciones, osea aquellos donde los usuarios no se podran subscribir (seleccionamos todos excepto Foro en nuestro caso)

- Seleccionamos los tipos de contenido (content types) donde se omitiran las subscripciones, seleccionamos todo excepto Tema del foro.

Luego tildamos las opciones necesarias, las mas importantes es:
- Show Subscriptions users menu under My account

Otra opción que es importante para un foro es Set all users to autosubscribe by default, lo que tendría que hacer es enviar notificaciones de nuevos comentarios al usuario que inicio el hilo, pero no funciona como se espera, ya que para que la autosubscripcion funcione el usuario tiene que guardar las preferencias de su cuenta.

La opción Use cron for notifications lo que hace es almacenar las notificaciones y las envía cuando se ejecuta el cron del sitio, es util para disminuir la carga en un sitio de mucho trafico. Pero esta forma de funcionamiento es nueva y aun presenta algun fallo.

Destildamos Show subscribe link with teaser y Display watchdog entries for successful mailings.

Por último ingresamos al Control de Acceso (admin/user/access) y en el módulo subscriptions tildamos el permiso maintain own subscriptions y subscribe to content en el rol authenticated user.

Si habilitamos subscribe to taxonomy terms los usuarios podran subscribirse a algun foro en particular.
Si habilitamos subscribe to content types los usuarios podran subscribirse al foro por completo!

Estas últimas dos opciones y en mayor grado la última puede traer problemas en los foros con mucho tráfico, ya que el volumen de emails enviados será importante y ademas habra usuarios que se subscribirán por error a foros completos y luego se quejaran por la cantidad de email que les llega.

Un problema que tiene el modulo subscription con el foro es que envía una nueva notificación si el usuario edita el comentario. Hay muchos usuarios minuciosos que una vez publicado el comentario lo vuelven a editar varias veces para corregir errores tipograficos o agregar algún detalle.

Si no queremos que esto suceda, haremos una modificacion al modulo Subscriptions para deshabilitar el envío de notificaciones cuando actualizan un comentario:

Dentro de la función subscription_comment por la línea 743 modificamos lo siguiente:

if ($op == 'insert' || ($op == 'update' && $comment['status'] == 0)) { // ignore deactivated comments

Por lo siguiente:

if ($op == 'insert') { // ignore deactivated comments

Privatemsg

Este módulo nos brindará la funcionalidad de mensajes privados entre los usuarios registrados.

Ingresamos a su página de configuración (admin/settings/privatemsg):

  • Private messaging max rate: 30sec
  • Sent message status: Activado
  • Messages per page: 20
  • Menu link: Bandeja de entrada

Welcome message for new users:
Escribimos el título y cuerpo del mensaje de bienvenida para los nuevos usuarios.

Finalmente vamos a la página de administracion de Tipos de contenido (admin/content/types). Editamos Tema del Foro y en la sección Private message "Write to author" links tildamos:

  • Link on node
  • Link on comments

Por último vamos a Control de acceso (admin/user/access) sección módulo privatemsg y habilitamos access private messages para el rol authenticated user.

Tracker

Este módulo nos permite hacer dos cosas:

  • Nos muestra el contenido nuevo o actualizado en todo el sitio en orden cronologico inverso.
  • Hacer un seguimiento del contenido que agrega o actualiza cada usuario. Esto se puede observar en la solapa seguimiento dentro del perfil de cada usuario.

Este módulo nos agrega un enlace Envíos recientes al bloque de navegación y al menú Navegación, ingresando allí podemos ver (en la solapa todos los envíos recientes) el contenido recientemente agregado o actualizado en todo el sitio por todo los usuarios o el contenido que nosotros hemos agregado o actualizado (en la solapa Mis envíos recientes).

Pathauto

Este módulo requiere de los modulos path y tokens, los cuales deberan estar previamente habilitados.

Pathauto nos permite generar automaticamente URLs amigables para los buscadores y usuarios del sitio. Por omision cualquier contenido en drupal se podria visualizar como node/234 ya sea un tema del foro o un artículo. Esto no es apropiado porque no dice de que se trata el contenido, si cambiamos node/234 por foro/problemas-con-la-instalacion-de-drupal tanto el usuario como un buscador sabran rápidamente de que se trata el contenido.

Dentro del directorio del módulo, debemos renombrar el archivo i18n-ascii.example.txt por i18n-ascii.txt para habilitar la traslación de letras con acento a letras sin acento en las URLs.

Antes de configurar pathauto debemos diseñar la estructura de URLs del sitio. Por ejemplo para el caso de los foros:

foro/nombre_foro (página de un foro en particular)
foro/200706/titulo_del_tema (contenido de un tema del foro)

Para configurarlo accedemos a la administración de Pathauto (admin/settings/pathauto).

Dentro de las opciones generales:

  • Separator: -
  • Quotation marks: remove
  • Maximum alias length: 100
  • Maximum component length: 100
  • Update action: Create a new alias, replacing the old one
  • Strings to remove: el,la,los,un,uno,una,a,al,pero,por,de,del,desde,es,este,esto,eso,esa,esta,con,he,si,en,me,y

Dentro de node path settings:

  • Pattern for all Tema del foro paths: foro/[yyyy][mm]/[title]
  • Tidamos Bulk update node paths
  • Tildamos Create feed aliases

Dentro de Category path settings:

  • Pattern for all Foro paths: foro/[cat]
  • tildamos Bulk update category paths
  • Tildamos Create feed aliases

Dentro de User-tracker path settings:

  • Pattern for user-tracker page paths: usuario/[user]/seguimiento
  • tildamos Bulk update user-tracker paths

Dentro de User path settings:

  • Pattern for user account page paths: usuario/[user]
  • tildamos Bulk update user paths

Y guardamos la configuración.

LoginToboggan

El procedimiento normal de registración de Drupal es solicitar el nombre de usuario deseado y una dirección de email donde se le enviará la contraseña para poder acceder a la cuenta.

Este procedimiento trae muchos problemas:

  • Si el usuario se registra con una cuenta de hotmail (muy habiltual), es muy probable que los filtros antispam de este último no permitan que le llegue el email con la contraseña, por lo tanto no podrá ingresar a su cuenta y tampoco tendra posibilidad de recuperarla, la reacción del usuario será echarle la culpa al sitio y no intentar registrarse nunca más.
  • El echo de tener que esperar recibir un email no permite que el usuario ingrese inmediatamente, hay usuarios que en el tiempo de espera del email pasan a otro tema y se olvidan que se registraron (algunos usuarios nunca ingresan)
  • Darle una contraseña aleatoria obliga al usuario a tener que cambiarla, lo cual significa mas perdida de tiempo para el mismo

Este módulo nos permite solicitar nombre de usuario, contraseña y dirección de email en el momento de registración, y el usuario accede al sitio inmediatamente sin necesidad de verificar la dirección de email.

En el caso que el usuario no reciba el email de verificación, podra utilizar el sitio, pero con un rol restringido y no podra hacer uso de modulos que envien emails (suscripciones, notificaciones, boletines, etc).
De esta manera no haber validado la cuenta de email no generara problemas al sitio, porque no se le enviaran emails.

Creamos el rol No validados con los modulos que envian email desactivados.
A este rol al menos tenemos que asignarle los permisos de los anónimos.

Una vez que el usuario valida el email, el módulo LoginToboggan le asigna el rol authenticated user y puede acceder a los modulos que envian emails.

Ingresamos a su página de configuración (admin/user/logintoboggan) y habilitamos las características necesarias:

  • Allow users to login using their e-mail address: enabled
  • Use two e-mail fields on registration form: enabled
  • tildamos Set password & Immediate login
  • Non-authenticated role: No validado
  • Minimum password length: 4

Finalmente, habra que ingresar a la página de Opciones de usuario (admin/user/settings) y editar los emails que recibiran los usuarios cuando se registran, habra que adecuarlo según nuestro nuevo procedimiento de registración

Ademas aqui podremos habilitar los avatares.

Captcha

Con este módulo nos defenderemos de los spamers y ataques de denegacion de servicio.

Ingresamos a la administración de módulos y activamos Captcha y Image Captcha.

Esta versíon de captcha necesita de unos fonts para crear los captcha gráficos. Estos fonts los tienes que copiar en el directorio captcha/image_captcha/fonts/

Si no tienes unos fonts a mano, te presto los mios: fonts.tar.gz

Configuración de captcha

Ingresamos a la administación de Captcha y luego a la solapa Image Captcha.

Characters to use in the code: abcdefghkmprst

code length: 4 (cantidad de caracteres en el captcha)

Seleccionamos un font.

Font size: large

Distortion level: ninguno

Noise level: low

La idea es configurar un captcha gráfico fácil de resolver y si logran envíar spam vamos aumentando la complejidad del captcha.

Guardamos configuracion y vamos a la solapa captcha.

Select captcha types: seleccionamos image_captcha en todos los formularios excepto en user_login y user_login_block

Captcha description for Spanish: Esta pregunta es para probar si eres un visitante humano y prevenir el envio automático de spam.

Quitamos el tilde persistent captcha y guardamos los cambios.

Ingresamos a la administracion de Control de acceso (admin/user/access)

En el modulo captcha tildamos skip captcha challenges en los roles autenticado y no validado. Con esto solo los anónimos tendran que resolver los captchas.

Mark as Read

Este modulo nos crea un boton dentro de los contenedores y foros que nos permite marcar todos los temas como leídos.

Este modulo aun no esta dentro del projecto Drupal, en la página del autor se explica como instalarlo, en resumen sería asi:

1. Creamos el directorio markasread dentro del directorio de los modulos.

2. Copiamos alli los archivos markasread.info y markasread.module que se pueden descargar del sitio del autor.

3. Agregamos la siguiente función dentro del template.php del theme.

function phptemplate_forum_display($forums, $topics, $parents, $tid,     
      $sortby, $forum_per_page)
{
   global $user;
   $forum_display = theme_forum_display($forums, $topics, $parents,         
      $tid, $sortby, $forum_per_page);
   $markbutton = '';
   if ($user->uid && function_exists('markasread_form_helper'))
   {
      $markbutton = markasread_form_helper(
         $tid ? t('Mark all topics read') : t('Mark all forums read'),
         'forum',
         $tid ? $tid : NULL);
   }
   return $markbutton . $forum_display;
}

4. Habilitamos el módulo.

User Points

Este módulo permite que los usuarios ganen punto cuando realizan ciertas acciones, cómo enviar un comentario o un nuevo tema en el foro, votar, invitar a un usuario, etc. Nos da muchas posibilidades para incentivar y premiar a los usuarios que colaboran con el sitio.

Por el momento solo lo utilizaremos para contar la cantidad de posts que cada usuario realiza en el foro.

El módulo trae varios modulos dentro, habilitamos Userpoints y Userpoints Basic.

Ingresamos a points settings (admin/settings/userpoints) y configuramos:

  • Points for posting a Tema del foro: 1
  • Points for posting a comment: 1
  •  

Vamos a Control de Accesso y en el módulo userpoints tildlamos para el rol authenticated user:

  • use userpoints
  • view userpoints
  •  

Themes

Ahora veremos como mejorar la parte visual de los hilos del foro.

Aquí tienes un comprimido con los archivos necesarios para mejorar la apariencia del theme theme.tar.gz, estos archivos los utilizaremos en los proximos pasos:

1. Copiamos todos los archivos de theme.tar.gz en el directorio del theme EXCEPTO template.php.

2. Editamos el archivo page.tpl.php del theme y agregamos un archivo CSS dentro de los tag <head> y </head>.

    <style type="text/css" media="all">@import "<?php print base_path() . path_to_theme() ?>/forum.css";</style>

3. template.php

Si el theme que usamos no tiene el archivo template.php, copiamos el archivo template.php al directorio del theme.

Si el theme que usamos ya tiene el archivo template.php, habrá que estudiar las funciones que se repiten entre ambos archivos y cómo unificarlas.

Para el caso del theme Garland (que tiene template.php) , hay que quitar las funciones phptemplate_comment_wrapper y _phptemplate_variables del template.php de Garland y agregar las funciones del template.php que se encuentra en theme.tar.gz.

Views y Views UI

Con estos módulos generaremos algunas vistas para mostrar los últimos comentarios o temas en el foro.

Para importar las siguiente vistas debemos ingresar a la administracion de views solapa Importar, pegamos el código, presionamos Enviar y luego Guardar.

Vista nuevos último ingreso: muestra los temas del foro nuevos o con nuevos comentarios desde el último ingreso

  $view = new stdClass();
  $view->name = 'Nuevos_ultimo_ingreso';
  $view->description = 'Nuevos envíos en el foro:';
  $view->access = array (
  0 => '2',
  1 => '3',
);
  $view->view_args_php = '';
  $view->page = TRUE;
  $view->page_title = 'Nuevos envíos en el foro:';
  $view->page_header = '';
  $view->page_header_format = '1';
  $view->page_footer = '';
  $view->page_footer_format = '1';
  $view->page_empty = '';
  $view->page_empty_format = '1';
  $view->page_type = 'table';
  $view->url = 'foro/nuevos/ultimo_ingreso';
  $view->use_pager = TRUE;
  $view->nodes_per_page = '40';
  $view->menu = TRUE;
  $view->menu_title = 'último ingreso';
  $view->menu_tab = TRUE;
  $view->menu_tab_weight = '0';
  $view->menu_tab_default = FALSE;
  $view->menu_tab_default_parent = NULL;
  $view->menu_tab_default_parent_type = 'normal';
  $view->menu_parent_tab_weight = NULL;
  $view->menu_parent_title = NULL;
  $view->sort = array (
  );
  $view->argument = array (
  );
  $view->field = array (
    array (
      'tablename' => 'node',
      'field' => 'title',
      'label' => 'Tema',
      'handler' => 'views_handler_field_nodelink_with_mark',
      'options' => 'link',
    ),
    array (
      'tablename' => 'term_data',
      'field' => 'name',
      'label' => 'Foro',
      'handler' => 'views_handler_field_tid',
    ),
    array (
      'tablename' => 'node_comment_statistics',
      'field' => 'last_comment_name',
      'label' => 'Por',
    ),
    array (
      'tablename' => 'node_comment_statistics',
      'field' => 'comment_count',
      'label' => 'Ctarios',
      'handler' => 'views_handler_field_int',
      'sortable' => '1',
    ),
    array (
      'tablename' => 'node_counter',
      'field' => 'totalcount',
      'label' => 'Lecturas',
      'sortable' => '1',
    ),
    array (
      'tablename' => 'node_comment_statistics',
      'field' => 'last_comment_timestamp',
      'label' => 'Actualizado',
      'handler' => 'views_handler_field_since',
      'sortable' => '1',
      'defaultsort' => 'DESC',
    ),
  );
  $view->filter = array (
    array (
      'tablename' => 'node',
      'field' => 'type',
      'operator' => 'OR',
      'options' => '',
      'value' => array (
  0 => 'forum',
),
    ),
    array (
      'tablename' => 'node',
      'field' => 'status',
      'operator' => '=',
      'options' => '',
      'value' => '1',
    ),
    array (
      'tablename' => 'history',
      'field' => 'timestamp',
      'operator' => '0',
      'options' => '',
      'value' => array (
  0 => '0',
),
    ),
  );
  $view->exposed_filter = array (
  );
  $view->requires = array(node, term_data, node_comment_statistics, node_counter, history);
  $views[$view->name] = $view;

Vista nuevos 24 hs: muestra los temas del foro nuevos o con nuevos comentarios durante las últimas 24 horas

  $view = new stdClass();
  $view->name = 'Nuevos_24hs';
  $view->description = 'Nuevos envíos en el foro:';
  $view->access = array (
);
  $view->view_args_php = '';
  $view->page = TRUE;
  $view->page_title = 'Nuevos envíos en el foro:';
  $view->page_header = '';
  $view->page_header_format = '1';
  $view->page_footer = '';
  $view->page_footer_format = '1';
  $view->page_empty = '';
  $view->page_empty_format = '1';
  $view->page_type = 'table';
  $view->url = 'foro/nuevos/24hs';
  $view->use_pager = TRUE;
  $view->nodes_per_page = '40';
  $view->menu = TRUE;
  $view->menu_title = 'últimas 24 hs';
  $view->menu_tab = TRUE;
  $view->menu_tab_weight = '1';
  $view->menu_tab_default = TRUE;
  $view->menu_tab_default_parent = NULL;
  $view->menu_tab_default_parent_type = 'normal';
  $view->menu_parent_tab_weight = NULL;
  $view->menu_parent_title = NULL;
  $view->sort = array (
  );
  $view->argument = array (
  );
  $view->field = array (
    array (
      'tablename' => 'node',
      'field' => 'title',
      'label' => 'Tema',
      'handler' => 'views_handler_field_nodelink_with_mark',
      'options' => 'link',
    ),
    array (
      'tablename' => 'term_data',
      'field' => 'name',
      'label' => 'Foro',
      'handler' => 'views_handler_field_tid',
    ),
    array (
      'tablename' => 'node_comment_statistics',
      'field' => 'last_comment_name',
      'label' => 'Por',
    ),
    array (
      'tablename' => 'node_comment_statistics',
      'field' => 'comment_count',
      'label' => 'Ctarios',
      'handler' => 'views_handler_field_int',
      'sortable' => '1',
    ),
    array (
      'tablename' => 'node_counter',
      'field' => 'totalcount',
      'label' => 'Lecturas',
      'sortable' => '1',
    ),
    array (
      'tablename' => 'node_comment_statistics',
      'field' => 'last_comment_timestamp',
      'label' => 'Actualizado',
      'handler' => 'views_handler_field_since',
      'sortable' => '1',
      'defaultsort' => 'DESC',
    ),
  );
  $view->filter = array (
    array (
      'tablename' => 'node',
      'field' => 'type',
      'operator' => 'OR',
      'options' => '',
      'value' => array (
  0 => 'forum',
),
    ),
    array (
      'tablename' => 'node',
      'field' => 'status',
      'operator' => '=',
      'options' => '',
      'value' => '1',
    ),
    array (
      'tablename' => 'node_comment_statistics',
      'field' => 'last_changed',
      'operator' => '>',
      'options' => '-86400',
      'value' => 'now',
    ),
  );
  $view->exposed_filter = array (
  );
  $view->requires = array(node, term_data, node_comment_statistics, node_counter);
  $views[$view->name] = $view;

Vista nuevos 7 días: muestra los temas del foro nuevos o con nuevos comentarios durante los últimos 7 días

  $view = new stdClass();
  $view->name = 'Nuevos_7dias';
  $view->description = 'Nuevos envíos en el foro:';
  $view->access = array (
);
  $view->view_args_php = '';
  $view->page = TRUE;
  $view->page_title = 'Nuevos envíos en el foro:';
  $view->page_header = '';
  $view->page_header_format = '1';
  $view->page_footer = '';
  $view->page_footer_format = '1';
  $view->page_empty = '';
  $view->page_empty_format = '1';
  $view->page_type = 'table';
  $view->url = 'foro/nuevos/7dias';
  $view->use_pager = TRUE;
  $view->nodes_per_page = '40';
  $view->menu = TRUE;
  $view->menu_title = 'últimos 7 días';
  $view->menu_tab = TRUE;
  $view->menu_tab_weight = '2';
  $view->menu_tab_default = FALSE;
  $view->menu_tab_default_parent = NULL;
  $view->menu_tab_default_parent_type = 'normal';
  $view->menu_parent_tab_weight = NULL;
  $view->menu_parent_title = NULL;
  $view->sort = array (
  );
  $view->argument = array (
  );
  $view->field = array (
    array (
      'tablename' => 'node',
      'field' => 'title',
      'label' => 'Tema',
      'handler' => 'views_handler_field_nodelink_with_mark',
      'options' => 'link',
    ),
    array (
      'tablename' => 'term_data',
      'field' => 'name',
      'label' => 'Foro',
      'handler' => 'views_handler_field_tid',
    ),
    array (
      'tablename' => 'node_comment_statistics',
      'field' => 'last_comment_name',
      'label' => 'Por',
    ),
    array (
      'tablename' => 'node_comment_statistics',
      'field' => 'comment_count',
      'label' => 'Ctarios',
      'handler' => 'views_handler_field_int',
      'sortable' => '1',
    ),
    array (
      'tablename' => 'node_counter',
      'field' => 'totalcount',
      'label' => 'Lecturas',
      'sortable' => '1',
    ),
    array (
      'tablename' => 'node_comment_statistics',
      'field' => 'last_comment_timestamp',
      'label' => 'Actualizado',
      'handler' => 'views_handler_field_since',
      'sortable' => '1',
      'defaultsort' => 'DESC',
    ),
  );
  $view->filter = array (
    array (
      'tablename' => 'node',
      'field' => 'type',
      'operator' => 'OR',
      'options' => '',
      'value' => array (
  0 => 'forum',
),
    ),
    array (
      'tablename' => 'node',
      'field' => 'status',
      'operator' => '=',
      'options' => '',
      'value' => '1',
    ),
    array (
      'tablename' => 'node_comment_statistics',
      'field' => 'last_changed',
      'operator' => '>',
      'options' => '-604800',
      'value' => 'now',
    ),
  );
  $view->exposed_filter = array (
  );
  $view->requires = array(node, term_data, node_comment_statistics, node_counter);
  $views[$view->name] = $view;

Vista nuevos 30 días: muestra los temas del foro nuevos o con nuevos comentarios durante los últimos 30 días

  $view = new stdClass();
  $view->name = 'Nuevos_30dias';
  $view->description = 'Nuevos envíos en el foro:';
  $view->access = array (
);
  $view->view_args_php = '';
  $view->page = TRUE;
  $view->page_title = 'Nuevos envíos en el foro:';
  $view->page_header = '';
  $view->page_header_format = '1';
  $view->page_footer = '';
  $view->page_footer_format = '1';
  $view->page_empty = '';
  $view->page_empty_format = '1';
  $view->page_type = 'table';
  $view->url = 'foro/nuevos/30dias';
  $view->use_pager = TRUE;
  $view->nodes_per_page = '40';
  $view->menu = TRUE;
  $view->menu_title = 'últimos 30 días';
  $view->menu_tab = TRUE;
  $view->menu_tab_weight = '3';
  $view->menu_tab_default = FALSE;
  $view->menu_tab_default_parent = NULL;
  $view->menu_tab_default_parent_type = 'normal';
  $view->menu_parent_tab_weight = NULL;
  $view->menu_parent_title = NULL;
  $view->sort = array (
  );
  $view->argument = array (
  );
  $view->field = array (
    array (
      'tablename' => 'node',
      'field' => 'title',
      'label' => 'Tema',
      'handler' => 'views_handler_field_nodelink_with_mark',
      'options' => 'link',
    ),
    array (
      'tablename' => 'term_data',
      'field' => 'name',
      'label' => 'Foro',
      'handler' => 'views_handler_field_tid',
    ),
    array (
      'tablename' => 'node_comment_statistics',
      'field' => 'last_comment_name',
      'label' => 'Por',
    ),
    array (
      'tablename' => 'node_comment_statistics',
      'field' => 'comment_count',
      'label' => 'Ctarios',
      'handler' => 'views_handler_field_int',
      'sortable' => '1',
    ),
    array (
      'tablename' => 'node_counter',
      'field' => 'totalcount',
      'label' => 'Lecturas',
      'sortable' => '1',
    ),
    array (
      'tablename' => 'node_comment_statistics',
      'field' => 'last_comment_timestamp',
      'label' => 'Actualizado',
      'handler' => 'views_handler_field_since',
      'sortable' => '1',
      'defaultsort' => 'DESC',
    ),
  );
  $view->filter = array (
    array (
      'tablename' => 'node',
      'field' => 'type',
      'operator' => 'OR',
      'options' => '',
      'value' => array (
  0 => 'forum',
),
    ),
    array (
      'tablename' => 'node',
      'field' => 'status',
      'operator' => '=',
      'options' => '',
      'value' => '1',
    ),
    array (
      'tablename' => 'node_comment_statistics',
      'field' => 'last_changed',
      'operator' => '>',
      'options' => '-2592000',
      'value' => 'now',
    ),
  );
  $view->exposed_filter = array (
  );
  $view->requires = array(node, term_data, node_comment_statistics, node_counter);
  $views[$view->name] = $view;

Vista mis envios: muestra los últimos temas o comentarios que ingreso mi usuario.

  $view = new stdClass();
  $view->name = 'Envios';
  $view->description = 'Mis envíos en el foro:';
  $view->access = array (
);
  $view->view_args_php = '';
  $view->page = TRUE;
  $view->page_title = 'Mis envíos en el foro:';
  $view->page_header = '';
  $view->page_header_format = '1';
  $view->page_footer = '';
  $view->page_footer_format = '1';
  $view->page_empty = '';
  $view->page_empty_format = '1';
  $view->page_type = 'table';
  $view->url = 'foro/misenvios';
  $view->use_pager = TRUE;
  $view->nodes_per_page = '40';
  $view->sort = array (
  );
  $view->argument = array (
  );
  $view->field = array (
    array (
      'tablename' => 'node',
      'field' => 'title',
      'label' => 'Tema',
      'handler' => 'views_handler_field_nodelink_with_mark',
      'options' => 'link',
    ),
    array (
      'tablename' => 'term_data',
      'field' => 'name',
      'label' => 'Foro',
      'handler' => 'views_handler_field_tid',
    ),
    array (
      'tablename' => 'node_comment_statistics',
      'field' => 'last_comment_name',
      'label' => 'Por',
    ),
    array (
      'tablename' => 'node_comment_statistics',
      'field' => 'comment_count',
      'label' => 'Ctarios',
      'handler' => 'views_handler_field_int',
      'sortable' => '1',
    ),
    array (
      'tablename' => 'node_counter',
      'field' => 'totalcount',
      'label' => 'Lecturas',
      'sortable' => '1',
    ),
    array (
      'tablename' => 'node_comment_statistics',
      'field' => 'last_comment_timestamp',
      'label' => 'Actualizado',
      'handler' => 'views_handler_field_since',
      'sortable' => '1',
      'defaultsort' => 'DESC',
    ),
  );
  $view->filter = array (
    array (
      'tablename' => 'node',
      'field' => 'type',
      'operator' => 'OR',
      'options' => '',
      'value' => array (
  0 => 'forum',
),
    ),
    array (
      'tablename' => 'node',
      'field' => 'status',
      'operator' => '=',
      'options' => '',
      'value' => '1',
    ),
    array (
      'tablename' => 'node',
      'field' => 'currentuidtouched',
      'operator' => '=',
      'options' => '',
      'value' => '***CURRENT_USER***',
    ),
    array (
      'tablename' => 'node_comment_statistics',
      'field' => 'last_changed',
      'operator' => '>',
      'options' => '-31536000',
      'value' => 'now',
    ),
  );
  $view->exposed_filter = array (
  );
  $view->requires = array(node, term_data, node_comment_statistics, node_counter);
  $views[$view->name] = $view;

Con estas vistas tendremos dos nuevas URLs:

  • /foro/misenvios para ver los temas que mi usuario envío.
  • /foro/nuevos para ver los temas nuevos, aquí apareceran 4 solapas: último ingreso, últimas 24 hs, últimos 7 días, últimos 30 días
  •  

Ahora falta que enlacemos estas paginas desde el sitio, para ello creamos dos bloques:

Ingresamos a la administracion de bloques, luego a Añadir bloque:

Primer bloque

Descripción del bloque: Navegacion foro para anónimos

Cuerpo del bloque:

<ul class='tabs secondary'>
<li class="<?php if(arg(1)=="nuevos") print "active"; ?>"><a href='/foro/nuevos/'>Nuevos envíos</a></li>
<li class="<?php if(arg(0)=="forum") print "active"; ?>"><a href='/forum'>Secciones</a></li>
</ul>

Formato de entrada: PHP code

Guardamos y luego ingresamos al mismo bloque en configurar.

Mostrar el bloque para los roles indicados: tildamos anonymous user

Muestra el bloque en las páginas indicadas: selecionamos Muestra sólo en las páginas que se listan.

Páginas:
foro
foro/*
forum

Guardamos ell bloque

Segundo bloque:

Descripción del bloque: Navegacion foro para registrados

Cuerpo del bloque:

<ul class='tabs secondary'>
<li class="<?php if(arg(1)=="nuevos") print "active"; ?>"><a href='/foro/nuevos/ultimo_ingreso'>Nuevos envíos</a></li>
<li class="<?php if(arg(0)=="forum") print "active"; ?>"><a href='/forum'>Secciones</a></li>
<li class="<?php if(arg(1)=="misenvios") print "active"; ?>"><a href='/foro/misenvios'>Mis envíos</a></li>
</ul>

Formato de entrada: PHP code

Guardamos y luego ingresamos al mismo bloque en configurar.

Mostrar el bloque para los roles indicados: tildamos authenticated user

Muestra el bloque en las páginas indicadas: selecionamos Muestra sólo en las páginas que se listan.

Páginas:
foro
foro/*
forum

Guardamos el bloque

Solo nos resta ubicar los bloques, queremos que aparescan en la parte superior de la columna central, pero Drupal no tiene definido una region ahí, entonces primero definamos la region.

Editamos dentro del directorio del engine phptemplate el archivo phptemplate.engine

Editamos la funcion phptemplate_regions y agregamos la region header2 insertando un nuevo elemento al array, nos queda:

function phptemplate_regions()
{
  return array(
       'left' => t('left sidebar'),
       'right' => t('right sidebar'),
       'content' => t('content'),
       'header' => t('header'),
       'header2' => t('header2'),
       'footer' => t('footer')
  );
}

Editamos el archivo page.tpl.php del theme, debajo de la línea que imprime la mission (en garland es la línea 66) ingresamos lo siguiente:

<?php if ($header2): print '<div class="clear-block">'. $header2 .'</div>'; endif; ?>

Por último, ingresamos a la administración de los bloques y asignamos la region header2 en los dos bloques que creamos.

Meta tags

Con este modulo podremos agregar los meta tags al sitio, ademas de los metatags que le diremos utilizara las palabras de cada categoría como keywords.

XML Sitemap (ex Google Sitemap)

Este módulo crea un archivo XML para notificar a los buscadores el contenido nuevo o actualizado en el sitio.

En la administración de XML Sitemap (admin/settings/gsitemap) se pueden establecer prioridades según tipo de contenido, cantidad de comentarios, etc.

Este módulo cambio de nombre, ahora se llama XML Sitemap.

Las novedades que incorpora son las siguientes:

  • Soporte para los buscadores Yahoo, Ask y MSN.
  • Posibilidad de enviar automaticamente el sitemap a los buscadores cada vez que se ejecute el cron o cuando se actualice el sitio (y por lo tanto se actualiza el sitemap). Tengo mis dudas en utilizar esta opción, ¿que pasaría si al buscador le enviamos muy seguido el sitemap y nos toma como spammer?

Ingresamos a la administracion de XML Sitemap (admin/settings/gsitemap), desplegamos el menú Search Engines.

Ingresamos el verification link de google. Este es el valor que nos entrega google para verificar que realmente tenemos administración del sitio, si aun no lo tienes puedes pedirlo en http://www.google.com/webmasters/

Aquí podemos habilitar en envío del sitemap a los buscadores Google, Yahoo y Ask.com y si lo queremos realizar cuando se actualice el sitio (Submit site map when updated) o cuando se ejecuta el cron. Considerar que si enviamos el sitemap muy seguido el buscador nos puede tratar de spammers.

Verificamos que este funcionando el sitemap, ingresando a www.example.com/sitemap.xml
El sitemap crea unos directorios dentro del tmp de Drupal, si el sitemap no funciona, lo más probable es que Drupal no tenga permisos para crear estos directorios.

En el caso de Google, en la seccion webmasters podemos enviar nuestro sitemap: www.example.com/sitemap.xml

Cortesia de http://www.esdrupal.org/articulos/creando-foro-similar-phpbb-vbulletin-drupal-5-2

Promedio de evaluacion: 7.3 (6 votos)