Desde Neurotic hemos decidido organizar una reunión en Barcelona para drupaleros, totalmente informal el próximo jueves 27 de Noviembre a las 19:00.

¿El lugar? Tras algunas propuestas, hemos reservado sitio en el pub Michael Collins, muy cerquita de la Sagrada Familia



View Larger Map

El nombre y el cartel del evento son idea de Jordi: Drupalada pero se admiten sugerencias de diseño para futuros carteles.

La reunión está abierta a todos los interesados en Drupal, desarrolladores, webmasters, emprendedores, diseñadores, y gente curiosa en general, si te interesa Drupal y tienes libre el jueves 27 de Noviembre a las siete de la tarde, ¡te esperamos!.
Hablaremos de lo que se tercie y servirá para sentar las bases de futuras reuniones.

También hemos creado un grupo en facebook para que nos vayamos conociendo antes ;)

Un problema que puede ocurrir cuando se realiza una migración de usuarios, es que después de realizar la carga de los mismos, los usuarios anónimos no puedan acceder al perfil de estos usuarios nuevos, mientras que, tanto el usuario administrador (uid 1) y el resto de usuarios autentificados sí tienen permisos para acceder a los perfiles de todos.

El error que aparece es Página no encontrada (page not found), y se produce porque cuando se crea un usuario, hasta que éste no hace login por primera vez, no aparece en los listados que se muestran a los usuarios anónimos, ya que filtra la columna "access" de la tabla "users", si es igual a 0, no muestra los registros.

Tampoco serán visibles para los anónimos los nuevos usuarios que no se hayan identificado en ninguna ocasión en los diferentes listados o bloques, por ejemplo el de últimos usuarios.

Como posible solución a este problema, en el caso de que sea el resultado de una migración, se pueden actualizar en la tabla de usuarios aquellos que no se hayan identificado nunca, poniendo su fecha de último acceso igual a su fecha de creación.

UPDATE users SET access=created WHERE access = 0;

O si solamente necesitamos que se muestren los últimos usuarios en un bloque, sin incluir aquellos que no se han llegado a identificar nunca, para evitar que a los usuarios anónimos se les muestre un contenido al que no van a poder acceder, podemos hacer un snipplet de código php con el filtro que necesitemos.
En Administrar » Construcción del sitio » Bloques le damos a Añadir Bloque, le ponemos un nombre, por ejemplo "Últimos usuarios" y en el cuerpo añadimos algo como esto:

<?php
$sql = "SELECT * FROM {users} WHERE status !=0 AND access !=0 AND uid > 1 ORDER BY created DESC";
$result = db_query_range($sql,0,5);
echo '<ul>';
while($data = db_fetch_object($result)) {
echo '<li>';
print l($data->name, 'user/'.$data->uid);
echo '</li>';
}
echo '</ul>';
?>

Es importante que el filtro sea PHP Filter, para que se pueda ejecutar correctamente.
El último paso es colocar el bloque en la región donde queramos mostrarlo.

Ayer hicieron pública la séptima iteración del rediseño que va a sufrir drupal.org, en el blog de uno de los miembros del equipo, disambiguity, se pueden ver las grandes novedades y en la página de seguimiento, se puede acceder a la mayoría de prototipos del diseño.

De momento, la portada de drupal.org quedaría así:

drupal.org redesign

Es un gran cambio desde la iteración anterior, per el resultado creo que queda genial!

Tras enterarnos ayer de que Drupal había ganado el premio a mejor CMS escrito en PHP en los premios que convoca anualmente la editorial PacktPub, hoy ha salido el veredicto al mejor CMS en general, y por segundo año consecutivo, Drupal se lleva el gato al agua.
Joomla ha quedado segundo en ambas categorías. Podéis consultar el listado completo de resultados desde aquí.




La cuantía total de los premios es de 5000$ por el premio a mejor CMS y 2000$ por el premio a mejor CMS en PHP.

También hay que felicitar a Earl Miles, que ha ganado el premio a la persona individual más valiosa del año para Drupal (MVP), Earl es el responsable de módulos tan importantes como Views o Panels y colabora en decenas de proyectos en drupal.org, para ver que se lo merece solamente hace falta mirar las colaboraciones en su perfil.

Actualizo: En drupal.org proponen "diggear" la noticia para que el mundo se entere de que existimos, añado el widget que facilita la tarea ;)

El rediseño de drupal.org está en una fase muy avanzada, y la verdad es que, en mi opinión, Mark Boulton y su equipo están haciendo un trabajo estupendo, sobre todo en lo participativo y abierto que está siendo todo el proceso.

Decidieron hacer un proyecto abierto, con la participación de toda la comunidad, hay un grupo de soporte, un usuario de twitter donde van publicando las novedades, un grupo de flickr con algunas capturas, pero sobre todo se puede seguir el proceso del lavado de cara que le estan dando a drupal.org en una web en la que muestran el aspecto de los prototipos, donde, además de la estructura básica, wireframes y navegación, empieza a haber capturas del posible diseño visual, muy limpio y bien estructurado.


Drupal diseño visual

Es muy curioso ver las imágenes del proceso de diseño del nuevo logo de la web, que será un wordmark.

En el blog de Leisa Reichelt se puede ver también la evolución del proceso, con detalles técnicos sobre los wireframes.

Hay un par de entradas con algunas alternativas antiguas para el rediseño del logo, aquí y aquí.

Hace casi diez meses que hice una serie de tutoriales en el blog de Neurotic sobre cómo configurar un entorno de desarrollo para Drupal usando Eclipse y CVS, aún así, siguen siendo muy válidos.

Esta mañana me he configurado mi entorno de desarrollo en local para trabajar algunos días desde casa (gracias a Jordi y Carlos) y, a pesar de que he tenido algún problemilla, finalmente he conseguido montar el entorno en local para poder trabajar con Eclipse y el control de versiones.

Organizaré un paso a paso para montar un entorno de desarrollo para Drupal, colaborativo y online, desde el principio, basándome en esa documentación cuando termine el curso de SQL de Oracle que estoy impartiendo martes y jueves de 18h a 22h y que se está comiendo y se comerá gran parte de mi tiempo libre durante un par de meses.


El premio anual al mejor sistema de gestión de contenidos (CMS) en código abierto que patrocina la editorial PacktPub ya ha publicado sus nominaciones para 2008 y Drupal está presente en dos categorías:

Best PHP Open Source CMS
Esta categoría premia a los mejores CMS Open Source escritos en PHP, y comparte nominaciones con CMS Made Simple, ez Publish, Joomla, y XOOPS. Esta categoría tiene un premio de 2000$ para el ganador y 500$ para segundo y tercero. En 2007 ganó Joomla por delante de Drupal, que fue segundo y e107 (que no está nominado este año) que fue tercero.

Open Source CMS Award Overall
Esta es la categoría principal, donde se vota al mejor CMS Open Source del año. Están nominados, además de Drupal, Joomla, DotNetNuke, Plone y TYPOlight. En 2007, ganó Drupal, por delante de Joomla y tercero quedó CMS Made Simple. Esta es la categoría con el premio más cuantioso, 5000$ para el ganador, 3000$ para el segundo y 2000$ para el tercero.

Vota a Drupal como el mejor CMS y también como el mejor CMS en PHP.

Aquí puedes ver un resumen comparativo del uso de los diferentes CMS en 2008.

Hoy me he encontrado con este problema, cuando intentas paginar una consulta que tiene una cláusula DISTINCT para eliminar duplicados (o un GROUP BY equivalente), el número de páginas resultantes en el theme_pager es incorrecto.

¿por qué pasa esto?

En realidad, lo que pasa es que el pager_query inicializa una serie de variables globales que utiliza el theme_pager, entre ellas, el total de elementos y el número de páginas totales. Estas variables globales se ven alteradas al realizar la consulta que cuenta los registros devueltos, ya que filtra el DISTINCT.

por ejemplo

Vamos a intentar sacar paginados todos los términos de taxonomía utilizados en la web, para ello unimos las tablas term_node, que tiene los términos usados en cada nodo y term_data, que contiene información de cada término, por ejemplo, su nombre.

<?php
$sql = "SELECT DISTINCT td.name AS term_name, t.tid
            FROM term_node t
           JOIN term_data td ON t.tid = td.tid";
$result = pager_query($sql, 20);
while ($data = db_fetch_object($result)) {
  echo l($data->term_name,"taxonomy/term/".$data->tid) . "<br/>";
}
print theme('pager');
?>

Aquí podéis ver el resultado, las primeras páginas sacan los términos correctamente, pero hay más páginas de las que debería y están vacías. Esto es porque al contar, ha eliminado el DISTINCT y muestra todas las categorías por cada nodo, sin eliminar los duplicados.

¿cómo se resuelve

Una de las grandes ventajas de las vistas con argumentos en Drupal es el juego que te permiten con las taxonomías, de forma bastante simple, podemos hacer que se nos muestre información relacionada con ciertas categorías, y complicándolo un poquito más, podemos realizar cosas como las que pregunta cdp en este comentario:

Quiero hacer una vista que al hacer click sobre un nodo me muestre todos los nodos que tengan los mismos tags que el nodo sobre el que se ha hecho click. He creado el vocabulario, pero por ahora no he conseguido crear una vista que me muestre los nodos comunes a los vídeos. ¿Solucionaría mi problema una vista con argumentos?

Es decir, en una vista de tipo bloque, mostrar todos los nodos que compartan tags con el que estamos visualizando. Esto también se puede hacer con las vistas con argumentos

Nota: Para estos ejemplos he creado varios nodos con ciudades, cada ciudad pertenece a un país y tiene un idioma, ambas características marcadas por la taxonomía.

Oskar me sugirió en este comentario mostrar en algun sitio de los artículos sobre drupal los detalles sobre módulos, versiones, etc y me ha parecido una muy buena idea, y mi aproximación final fue crear una subcategoría para poder gestionar la información de cada post.
Me gusta mucho el bloque flotante que tienen en lullabot en alguno de sus posts para mostrar el contenido relacionado y he intentado hacer algo parecido. A la derecha de este texto lo podéis ver (si entráis en el detalle, en portada no se muestra).

Voy a intentar contaros cómo lo he hecho.

en el interfaz de drupal

A través del interfaz de drupal y el módulo taxonomía del core, he creado un vocabulario aparte llamado "drupal" para poner la información relacionada. Como opciones he seleccionado Jerarquía simple para poder tener términos relacionados padres-hijos y Selección múltiple para poder seleccionar más de un término por artículo.
En este caso he utilizado los términos padres como títulos de la sección (pej. módulos o versión) y los hijos son los detalles del bloque (views, 5x, ...).
La selección múltiple tiene el inconveniente de que es necesario crear el término a través del interfaz y no lo puedes hacer desde el mismo post. Se podrían utilizar módulos como el Hierarchical Select para resolver esto.

en el template.php

Aquí es donde viene "lo gordo". En el fichero template.php de nuestro theme, podemos modificar las variables que se pasan a los ficheros de phptemplate tpl.php, de esta forma, podemos hacer que las variables $links, $content o $terms entre otras muestren la información que queramos.
Para conseguir que este segundo vocabulario se mostrara como yo quería, era necesario modificar la variable $terms, para que mostrara un div con la información extra solamente si ésta existe. Para acceder y modificar las variables de phptemplate, se usa el array $vars, en este caso $vars['terms'].
En los comentarios del código aclaro el funcionamiento: