Drupal – Como quitar acentos y otros caracteres especiales de las urls generadas por Pathauto

Drupal posee un subsistema que permite generar alias de urls a fin de contar con url limpias, es decir, en vez de tener “node/30″ podemos tener “article/this-article-rocks”, mas SEO friendly y más Human friendly.

Existe un módulo llamado pathauto el cual permite definir patrones para generar estas urls limpias automáticamente. Este módulo por defecto, si tenemos el lenguaje español habilitado, tratará de generar urls limpias usando acentos y otros caracteres latinos que como todos bien sabemos no son lo ideal en el universo de la internet, por ende este post trata acerca de como sacar los acentos de los alias de urls generados por pathauto.

Para esto deberán bajar el módulo transliteration, este modulo integrará una opción en el formulario de configuración de pathauto para que se conviertan todos esos caracteres especiales a caracteres el alfabeto ANSI 96.

Descarguen Transliteration desde aquí https://www.drupal.org/project/transliteration

Luego instalen el modulo en su sitio Drupal.

Con el módulo habilitado vayan a /admin/config/search/path/settings para configurar path auto. Verán dos opciones que deberán habilitar

> Transliterate prior to creating alias
> Reduce strings to letters and numbers

Drupal Pathauto Acentos

Al terminar deberán borrar todos los alias existentes y regenerarlos, ojo si su sitio esta en producción e indexado por google, pueden llegar a tener muchos 404.

Para borrar admin/config/search/path/delete_bulk

Drupal Delete all aliases

 

Actualizar admin/config/search/path/update_bulk

Regenerate Alias

Share

Drupal : Renderizar una Region de un Theme dentro de una tpl de Nodo

Necesitaba renderizar una region del tema dentro de la tpl de node, la idea era tener una zona para configurar bloques customizables por pagina. Googleando un poco me encuentro con una solución usando el hook preprocess node. Básicamente usando block_get_blocks_by_region.

function mytheme_preprocess_node(&$variables) {

  // Get a list of all the regions for this theme
  foreach (system_region_list($GLOBALS['theme']) as $region_key => $region_name) {

    // Get the content for each region and add it to the $region variable
    if ($blocks = block_get_blocks_by_region($region_key)) {
      $variables['region'][$region_key] = $blocks;
    }
    else {
      $variables['region'][$region_key] = array();
    }
  }
}

Y luego dentro del node.tpl.php esto para renderizar en ese lugar los bloques

print render($region['sidebar_first']);

No funcionó, yo había seteado los bloques por contexto, cuando pruebo por el sistema de bloques del core funcionó. Ahí me di cuenta que el problema estaba en que context no se integra con la función block_get_blocks_by_region. Buscando un poco mas me encuentro con esta alternativa que usa contexto.

  function MYTHEMENAME__preprocess_node(&$vars) {
    if ($plugin = context_get_plugin('reaction', 'block')) {
      $vars['my_region_name'] = $plugin->block_get_blocks_by_region('my_region_name');
    }
  }

Esto tampoco me funcionó directamente, seguía sin renderizarme el bloque, pero esta vez por que no había content.

Buscando otra vez me encuentro que recomiendan usar drupal_static_reset(‘context_reaction_block_list’); para refrescar el cache y regenerar los bloques aclarando que puede ser un performance killer, así que hice lo siguiente.

function THEME_render_region_blocks() {
  static $once = false;
  static $result = '';
  if ($once == false && $result == '') {
    $once = true; //Required to avoid recursive infinite loop rendering.
    drupal_static_reset('context_reaction_block_list');
    $plugin = context_get_plugin('reaction', 'block');
    $node_internal = $plugin->block_get_blocks_by_region('node_internal');
    $result = drupal_render($node_internal);
  }
  return $result;
}

Asi puedo renderizar la region, solo una vez y cachearla por la ejecución, y evito un loop infinito que se generaba al renderizar.

En el preprocess node me quedo algo así:

function THEME_preprocess_node(&$vars) { 
 $vars['internews'] = dt_get_internews();
}

 

Algunas referencias

http://www.webomelette.com/add-region-node-template
http://drupal.stackexchange.com/questions/20054/can-regions-be-printed-within-a-node-template
https://www.drupal.org/node/1306172
http://www.raisedeyebrow.com/blog/2012/07/displaying-drupal-context-regions-node-templates
http://kahthong.com/2012/08/embed-drupal-block-region-node-page
https://www.drupal.org/node/2107877

Share

Drupal Custom Formatters

En Drupal cuando construimos un content type y añadimos fields al mismo, dependiendo el tipo de field, podemos elegir como dicha field va a mostrarse y donde se mostrará. Para seleccionar donde se mostrará y como tenemos que ir a la solapa de “Manage Display” en el editor del content type.

El orden se setea con drag an drop y dependiendo de la field podemos seleccionar como la field va a mostrarse usando un formatter. Los formaters leen el valor de la field y aplican un tema para renderizarla, el tema es que los formatters son límitados y los requerimientos no.

Si necesitamos aplicar un renderizado particular muchas veces caemos en la primera opción, editar la template, para que se muestren los valores como queremos. Una alternativa un poco mas elegante y que nos proveerá mas flexibilidad en el futuro es crear nuestros propios formatters.

Para implementar un formatter debemos utilizar los siguientes hooks.

Los fundamentales

hook_field_formatter_info : Meta Información para que podamos usar el formatter del editor.
hook_field_formatter_view : Para definir el renderizado del formatter

Los formatters pueden configurarse, estos para definir las opciones del formatter

hook_field_formatter_settings_summary : Muestra en el Manage Display, en la field, las settings.
hook_field_formatter_settings_form : Define el form de setting para la field, requiere el anterior para funcionar.

Recuerden que las settings son por cada field en el content type que usen el formatter, no son globales, y pueden variar de display a display (Default, Teaster, Etc).

Uno de yapa

hook_field_formatter_prepare_view : Para levantar mas información en la field si se necesita.

Les dejo un par de links que tienen ejemplos

http://www.failover.co/blog/drupal-7-custom-field-formatter-hooks-overview

http://www.paulbooker.co.uk/dru……-custom-drupal-field-formatter-existing-field

http://www.whenwhowhere.com/tech-blog/create-custom-field-formatter-drupal-7

https://api.drupal.org/api/drupal/modules%21field_ui%21field_ui.api….

https://api.drupal.org/api/drup…._field_formatter_view/7

https://api.drupal.org/api/dru….tion/hook_field_formatter_info/7

 

Share

Guy Kawasaky Talks

Sin tener relaciones con el Kawasaki de las motos, Guy Kawasaki es uno de los motivadores de emprendedores mas grandes que hay dando vuelta.

Este fin de semana estuve mirando unas charlas de el las cual paso a compartir por que esta geniales, espero sean de su agrado.

12 Lecciones aprendidas de Steve Jobs

10 errores comunes en Startups

Como usar Social Media para evangelizar


 

 

Share

BarCampNea – Round 4

Hace casi cuatro años atrás fuimos con Marcos a la BarCamp Litoral que hicieron en Santa Fe, caímos medio de prepo por que veníamos de Rosario por otros temas y no enteramos de pedo, caímos cara de naipe, no entendíamos una goma como era el sistema, no conocíamos a nadie, así que empezamos a interactuar para entender, zarpado de buena onda y lleno de geeks pasamos un día impresionante.

Nos quedamos tan pero tan copados que en el viaje de vuelta con Marcos decidimos que había que hacer una en el chaco así que pusimos manos a la obra.

Es sabido como siempre lo que se hace en el chaco/corrientes tiene que ser para el NEA dijimos tiene que ser la BarCampNea, la cosa es que me revienta hablar del NEA y que sea solo chaco y corrientes, difícilmente solemos incluir a la gente de formosa y ni hablar de misiones, muy pocas son las veces que pudimos interactuar con misioneros, así que puse como condición que sea verdaderamente del NEA y para ello cada año debía ser en algún lugar diferente del NEA, obviamente no tenía las más pálida idea como ir a misiones pero dije algo va a salir.

Grata fue la sorpresa cuando en la primer BarCamp cayo un grupo de gente super copada de Apostoles Misiones e instantaneamente sabía donde iba a ser la BarCamp Misionera.

Hoy 4 años mas tarde me pone muy contento saber que nos salió, y digo NOS por que fue un trabajo de muchísima gente, personal y honestamente después de la primer BarCamp casi no aporte nada, para cuando fue la de corrientes yo no estaba, la de formosa fue un laburo a 99.9% de los formoseños y hoy la de misiones igual; cosa que también me pone exageradamente contento dado que transcendió de los que tuvimos la idea en un principio y quedo de todos y para todos sin lugar a dudas.

Así que este finde si no te pinta la amargura, pegate una vuelta por Apostoles y vamos a compartir un día genial lleno de Geeks y mucho mas.

Te esperamos !

Share