Cambiar el título de un campo de un formulario Location en Drupal 6.x

Esta semana, unos de mis clientes me pedía cambiar el título de un campo localización en el formulario de edición de un nodo en su sitio Drupal. En particular, quería cambiar los títulos ‘Street’ y ‘Additional’ por ‘Dirección 1’ y ‘Dirección 2’ respectivamente.

Ya saben que los módulos Location y Gmap de Drupal nos permiten (geo) localizar nodos con mapas de Google Maps.

Vamos entonces, en un módulo propio, utilizar el hook_form_alter() pero de dos maneras distintas según hemos implementado los sub módulos Location CCK o Node Location.

En los dos casos utilizaremos la función #after_build que nos permite llamar a una función propia una vez que nuestro formulario ha sido construido pero antes que sea “renderizado” (rendered). Es con esta función que vamos a poder cambiar los títulos de nuestros campos.

Node Locations

<?php
/**
   * Implementation of hook_form_alter().
   *
   * The function is named modulename_form_alter.
   */
function MYMODULE_form_alter(&$form, &$form_state, $form_id){
  switch (
$form_id){
    case
'MYNODE_node_form':
     
$form['#after_build'][] = 'change_location_label';
    break;
  }
}

function

change_location_label(&$form) {
 
$form['locations'][0]['street']['#title'] = t('Adress 1');
 
$form['locations'][0]['additional']['#title'] = t('Adress 2');

  return

$form;
}
?>
Tags:

Crear templates para nuestras páginas basadas en un tipo de nodo

A veces necesitamos de una template page.tpl.php para cada tipo de nodo (page-[type].tpl.php). Por ejemplo una template distinta para nuestros nodos de tipo ‘Blog’ (page-blog.tpl.php) y una otra para nuestros nodos de tipo ‘mitipo’ (page-mitipo.tpl.php).

Si Drupal nos propone por defecto (Template Suggestion) templates como node-[type].tpl.php, no es lo mismo para los templates de nuestras páginas.

Para añadir (o sugerir) templates para nuestras páginas, solo debemos instertar el código siguiente en nuestro archivo template.php de nuestro tema.

No se olviden cambiar temaNombre por el nombre de su tema.

Drupal 6

<?php
function temaNombre_preprocess_page(&$vars, $hook) {
  if (isset(
$vars['node'])) {
  
// Si el tipo de nodo es "blog" la template propuesta será "page-blog.tpl.php".
  
$vars['template_files'][] = 'page-'. str_replace('_', '-', $vars['node']->type);
  }
}
?>
Tags:

Modificar (theming) el formulario de comentarios en Drupal 6.x

Hoy recibí un mensaje de una lectora pidiendo añadir al formulario de introducción de nuevos comentarios la siguiente frase: "Por favor, no incluya pedidos para recetas médicas en sus comentarios ". Esto porque muchos pensaban que este sitio era un sitio para pedir recetas en línea.

Visto que no nos encontramos en la capa de la lógica, pero más bien en la capa de presentación, vamos a buscar la manera de modificar la presentación del formulario de introducción de comentarios.

Tags:

Lanzamiento oficial del Drupal Summit Latino - Lima 2011

Siendo parte del equipo organizador, es para mi un gusto poder anunciarles el lanzamiento del Drupal Summit Latino - Lima 2011

Toda América Latina celebra el mayor encuentro Drupal del año!

Por fin podemos anunciar oficialmente lanzamiento oficial del mayor evento Drupal del año “Drupal Summit Latino – Lima 2011”: http://lima2011.drupal-latino.org

Lima (Perú) alojará el primer evento a nivel latinoamericano dedicado a Drupal los días 27, 28 y 29 de enero 2011.

Actualizar el cache de Drupal cuando hay un nuevo comentario

Si hemos dado los derechos a los usuarios anónimos de enviar comentarios sin nuestra aprobación y que hemos activado el cache de Drupal con una duración de vida de tres horas; que pasa con los comentarios durante este lapso de tres horas en el cual el cache no se actualiza? Los usuarios anónimos no podrán ver los nuevos comentarios, aún si ellos mismos son los autores!

Como podemos entonces actualizar automáticamente el cache cuando un nuevo comentario ha sido enviado?

Para ello, vamos a programar un pequeño módulo que implementará une función de type hook_comment() como sigue:

<?php
function modulename_comment($a1, $op) {
  switch (
$op) {
    case
'insert':
    case
'update':
     
$nid = $a1['nid'];
      break;
    case
'unpublish':
    case
'delete':
     
$nid = $a1->nid;
      break;
  }
 
  if (
$nid) {
   
// recuperar la URL abosulta del nodo
   
$url = url('node/'. $nid, array('absolute' => TRUE));
   
// Eliminar el registro en el cache para esta URL
   
cache_clear_all($url, 'cache_page');
  }
}
?>

Tags: