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

En la estratosfera no hay internet, no hay

Hace rato que me limito a escribir cosas solamente técnicas por que hablar de cosas sociales ya esta lleno de expertos en el Facebook, Twitter y demases; pero hoy me siento tan, pero tan impotente que tengo que reventar por algún lado, gracias Blog !

Desde hace algunas semanas vengo intentando conseguir un servicio de internet para un departamento que alquilé, antes de alquilarlo llame a la empresa Fibertel para preguntarles si tenían disponibilidad en el lugar de dicho departamento, pleno centro de la ciudad, y la operadora me confirmó que si había disponibilidad insistiendo fuertemente en venderme el servicio siendo que yo todavía no había alquilado. Cabe resaltar que tuve que llamar al numero de ventas por que es el único número que aparece en su sitio, ninguno tiene un numero para consultas, solo ventas.

Confiado que un vendedor me dice la verdad, si soy un nabo, procedo a alquilar el departamento, termino de firmar los papeles y entro al site de Fibertel para pedir la instalación (había promos solo por via web), relleno un form pedorro donde piden algunos datos pensado que iba a ser un wizard paso a paso para tener el servicio pero no, al terminar eso me sale un mensaje que alguien me iba a llamar en la brevedad.

Dos días mas tarde nadie me llama y procedo a llamar yo, me atiende la operadora, me confirma que esta disponible el servicio, lo contrato y me dicen la fecha de instalación (una semana después) y me dije “y bue, a esperar”.

Al fin llega el ansiado día, lamentablemente como yo también tengo mucho de sopenco no me puede encontrar con el técnico que fue ese día, 100% culpa mía. Llamo nuevamente para ver para cuando podemos reagendar y me dicen que dentro de una semana nuevamente, fuck me dije, después de mucho pedirle a la operadora que me lo agende para antes ni hubo caso, asi que a comerla.

Una semana mas tarde aparece el técnico al edificio, y me dice que no puede realizar la instalación por que el edificio no esta cableado, Wtf !, si llame para consultar le dije, lo siento me contesto, te mintieron. Después de mucho hablar con el técnico la respuesta mas concreta del técnico fue, llama a otro servicio mejor por que podemos tardar meses en cablear el edificio; ok Gracias por nada Fibertel.

Llamo a mi segunda opción, Gigared, después de horas de estar colgado en un teléfono que no es 0800, nadie atendía. Procedo vía web, formulario pedorro y luego de llenarlo mensajito clásico, alguien te va a llamar, FUUUUU.

Sigo intentado por teléfono, nadie contesta. Me digo a mi mismo, bueno mañana voy a la oficina y arreglo en persona; al otro día diluvio universal en la ciudad y era imposible moverse por la misma. Mágicamente, casi 24hs después, llega un mail pidiendo confirmación de los datos del form, 24 hs después posta. Confirmo los datos. Al día siguiente me vuelve a entrar otro mail, otras 24 hs después, diciendome que no tienen servicio en la zona, :@.

Saltando de la calentura y casi sin tener idea que hacer me dije, y bueno, tendremos que llamar al peor de todos, Telecom. Llamo, me atiende la operadora, proceso de venta, me quisieron vender hasta la mesita para apoyar el teléfono, un montón de servicios gratis que mágicamente después del cierto día empiezan a cobrarte, entregado acepto a todo. Me dice la operadora, bueno ya esta todo listo; le pregunto lo mas importante, cuanto tiempo va a pasar de ahora hasta que tenga internet, y pueden pasar de 20 a 30 días 0.O.

Totalmente entregado y sabiendo que no queda otra tuve que entregar el marrón, no quedo otra. Espero poder tener internet en los próximos 30 días.

 

Share