Migrado a WordPress

Desde hoy este blog está «parado» sobre WordPress.
Luego de un largo análisis, idas y vueltas, decidí mudarme de Drupal a WordPress.
Drupal es un excelente CMS y CMF. Creo que es el mejor que existe por estos días; y también creo que se volvió demasiado complejo y grande como para solamente alojar un blog personal.

Comencé este blog con la versión 5 de Drupal, y fui actualizando hasta la versión 7. El upgrade de la versión 7 a la 8 es más complejo de lo que este blog amerita, y la versión 8 de Drupal es también más compleja -y pesada- de lo que este blog requiere. Es por eso de decidí seguir esta guía, armarme de paciencia para ajustar los detalles necesarios, y hacer finalmente el cambio.

Una nueva etapa. Veremos qué me espera más adelante.

FLISol 2017

El sábado 22 de abril de 2017 se desarrolló Festival Latinoamericano de Instalación de Software Libre: FLISoL. En la Ciudad Autónoma de Buenos Aires éste tuvo lugar en la sede de la UTN de Av. Triunvirato.

En esta edición participé como expositor en dos charlas:

  • Drupal: El CMS que eligen los grandes

La presentamos en conjunto con Jose Sánchez (@ruloweb), y hablamos sobre las principales características que hacen que Drupal sea el CMS ─y CMF─ elegido y preferido para desarrollar y sostener grandes proyectos, como medios de comunicación, entidades gubernamentales, organizaciones sin fines de lucro, portales de empresas privadas, entidades de comercio electrónico, etc.

A continuación compartimos la presentación que utilizamos como guía.

  • Introducción a Ruby on Rails.

Es la tercera vez que re-adapto y presento esta charla; una breve exposición donde se presenta al ─según creo yo─ mejor framework para desarrollar aplicaciones web: Ruby on Rails. Completo, simple, ágil, extensible y escalable son solo algunas características de este increíble framework.

Comparto aquí las diapositivas que sirvieron de guía en esta charla.

Tiempo estimado de lectura en Drupal

Hace un tiempo me pidieron agregar, para un sitio hecho en Drupal, información sobre el tiempo estimado de lectura de los artículos ahí publicados.

No recuerdo las fuentes que me ayudaron con esto, pero sí recuerdo que fue bastante más fácil y simple de lo previsto.

A continuación el fragmento de código que calcula el tiempo estimado de lectura de un artículo:

<?php 
 $postContent = render($content); 
 $word = str_word_count(strip_tags($postContent));
 $m = floor($word / 200);
 $s = floor($word % 200 / (200 / 60));
 $estimado = $m . ' minuto' . ($m == 1 ? '' : 's') . ', ' . $s . ' segundo' . ($s == 1 ? '' : 's');
?>
<p>Tiempo estimado de lectura: <?php echo $estimado; ?></p>

Este fragmento de código puede incluirse en el archivo node.tpl.php del tema en uso. Dependiendo de la estructura del tema, se podría ubicar de modo que una futura actualización del tema no haga que se pierda la modificación, pero eso es algo que depende de cada tema, por lo que habrá que remitirse a la documentación correspondiente.

Espero que sea de utilidad.

De Drupal a WordPress

Recientemente estuve trabajando en la migración de un blog de Drupal 7 a WordPress 3.3.

Basándome en ésta guía dirigida a migrar de Drupal 6 a WordPress, y con algunas pocas modificaciones, pude realizar el proceso sin mayores inconvenientes.

A continución dejo el detalle de los pasos realizados.

Detalles:

  • La base de datos utilizada por Drupal 7 se llama drupal, y la utilizada por WordPress 3.3, wordpress.
  • Ninguna de las instrucciones que aquí se indican escriben en la Base de Datos drupal, por lo tanto, el procedimiento se puede aplicar de forma reiterada la cantidad de veces que sea necesario.

Limpieza de las tablas de wordpress

TRUNCATE TABLE wordpress.wp_comments;
TRUNCATE TABLE wordpress.wp_links;
TRUNCATE TABLE wordpress.wp_postmeta;
TRUNCATE TABLE wordpress.wp_posts;
TRUNCATE TABLE wordpress.wp_term_relationships;
TRUNCATE TABLE wordpress.wp_term_taxonomy;
TRUNCATE TABLE wordpress.wp_terms;

Migración de las categorías

REPLACE INTO wordpress.wp_terms (term_id, `name`, slug, term_group)
SELECT DISTINCT d.tid, d.name,
REPLACE(LOWER(d.name), ' ', '_'), 0
FROM drupal.taxonomy_term_data d
INNER JOIN drupal.taxonomy_term_hierarchy h
USING(tid)
WHERE (1);

INSERT INTO wordpress.wp_term_taxonomy (term_taxonomy_id, term_id, taxonomy, description, parent)
SELECT DISTINCT d.tid 'term_id', d.tid 'term_id', 'category' category, d.description 'description', h.parent 'parent'
FROM drupal.taxonomy_term_data d
INNER JOIN drupal.taxonomy_term_hierarchy h
USING(tid)
WHERE (1);

Migración de los POSTS

INSERT INTO wordpress.wp_posts (id, post_author, post_date, post_content, post_title,
            post_excerpt, post_name, post_modified, post_type, post_status)
SELECT nid 'id', n.uid 'post_author', FROM_UNIXTIME(n.created) 'post_date', r.body_value 'post_content',
       n.title 'post_title', r.body_summary 'post_excerpt', n.title 'post_title', 'post', 'post',
IF(n.status = 1, 'publish', 'private') 'post_status'
FROM drupal.node n, drupal.field_data_body r
WHERE n.nid = r.entity_id;

Asociación de Posts y Categorías

INSERT INTO wordpress.wp_term_relationships (object_id, term_taxonomy_id)
SELECT DISTINCT nid, tid
FROM drupal.taxonomy_index;

Contabilización de post en cada categoría

UPDATE wordpress.wp_term_taxonomy tt
SET `count` = (
SELECT COUNT(tr.object_id)
FROM wordpress.wp_term_relationships tr
WHERE tr.term_taxonomy_id = tt.term_taxonomy_id);

Migración y asociación de comentarios

INSERT INTO wordpress.wp_comments (comment_post_ID, comment_date, comment_content,
            comment_parent, comment_author, comment_author_email, comment_author_url,
            comment_approved)
SELECT dc.nid, FROM_UNIXTIME(dc.created), df.comment_body_value, dc.thread, dc.name,
       dc.mail, dc.homepage, ((dc.status + 1) % 2) 'status'
FROM drupal.comment dc, drupal.field_data_comment_body df
WHERE cid = entity_id;

Contabilización de comentarios en cada Post

UPDATE wordpress.wp_posts SET `comment_count` = ( SELECT COUNT(`comment_post_id`)
FROM wordpress.wp_comments
WHERE wordpress.wp_posts.`id` = wordpress.wp_comments.`comment_post_id` );

Drupal + Alias URL + Acentos

La mayoría de los CMS y sistemas de Blogging permiten generar URLsamigables“,  o “Alias de URL“. Estos alias permiten, por ejemplo, que la entrada en un blog a la que le corresponde la URL “http://blog.dgomez.com.ar/node/111“, pueda ser accedida también a través de una URL como: “http://blog.dgomez.com.ar/content/dialogo“.

La generación de estos alias suele realizarse de forma automática basándose en el título del post que estamos escribiendo. Así la URL que se generará ya nos dará una pista del tema sobre el que trata el post.

En los casos de los idiomas con caracteres especiales, como el español, en los que tenemos acentos y letras como la ñ, si incluimos estos caracteres en el título de nuestros posts la generación de los alias no resultará tan “amigable”, ya que los caracteres especiales se reemplazarán por su correspondiente código HTML. Por ejemplo, un post titulado “Solución de problemas“, generará la siguiente URL: “http://blog.dgomez.com.ar/content/soluci%C3%B3n-de-problemas“. El reemplazo de la letra o con acento (ó) por su correspondiente codificación HTML hace que, claramente, esta URL no resulte muy amigable que digamos.

Para la generación automática de Alias de URL, los usuarios de Drupal tenemos el módulo “pathauto“, y para hacer que las letras con acento (ñ, u otro caracter no conveniente) sean reemplazadas por sus correspondientes sin acento, hay que renombrar el archivo i18n.ascii.example, que se encuentra dentro del directorio del módulo (generalmente en sites/all/modules/pathauto), como i18n.ascii.txt. Luego, en “Administrar” -> “Alias de URL” Seleccionamos la pestaña: “Opciones de Alias de rutas automáticas“,  y en la sección “Opciones Generales” activamos la casilla de verificación “Transliterar antes de crear alias“.

Luego de esto, antes de generar un alias de URL, se verificarán los caracteres y los especiales serán reemplazados por su equivalente sin acentos o marcaciones especiales.

Actualizando a Drupal 6

Victor Kane, un drupalero de la primera hora, y uno de los precursores del BADUG (Buenos Aires Drupal User Group), ha editado recientemente una breve guía de 24 páginas para realizar una completa actualización de un web-site basado en Drupal 5 a Drupal 6.

Esta guía paso a paso permite realizar la actualización de, no solo el core de Drupal 5 a Drupal 6, sino también de un conjunto de módulos indispensables y presentes en casi cualquier implementación de Drupal.

“Upgrading Your Online Website Application to Drupal 6.x”, tal el nombre que ha dado a su trabajo, puede conseguirse en Wrox, por la módica suma de US $6.99

Desde aquí mis felicitaciones a Victor por su trabajo, y como él, espero que sea de ayuda para todos.