Block calendar - mostrar nodos en el calendario
Antes de empezar como siempre vamos a descargarnos los módulos necesarios para esta demo. El primero es, como no, el block calendar y el otro es el date. Como siempre los descargamos e instalamos y activamos el block calendar, el date y el date pop-up.
 
PASO 1
 
Una vez instalado el modulo block calendar a primera vista no hace nada, pero si nos dirigimos a estructura > boques, veremos como al final nos ha aparecido un bloque llamado "calendar" este es el que tenemos que activar y posicionar en la region de la web que queramos.
 
 
PASO 2
 
Ahora nos dirigiremos a nuestro "content type" y agregaremos un campo de tipo "date" en el widget yo os recomiendo "pop-up date" que es el que uso en el video. El nombre del campo que usare para esta demo es "fecha", pero vosotros podéis usar el que queráis solamente recordad modificar el resto del código. En la configuracion del campo ya os lo dejo a vuestra elección yo use solamente día, mes y año.
 
 
PASO 3
 
Nos iremos a nuestro tema y buscaremos el archivo "template.php" y si no existe que lo dudo!, asi que buscarlo bien, pues lo creamos.  Dentro y al final escribiremos el siguiente codigo:
 
function MY_THEME_preprocess_calendar_block(&$variables) {
  $query = db_select('node', 'n');
  $query->fields('n',array('nid'))
          ->condition('n.type', array('article'))
          ->where('MONTH(foo.field_fecha_value)=:var', array('var' => $variables['calendar']->month));
  $query->addExpression('DAY(foo.field_fecha_value)');
  $query->join('field_data_field_fecha', 'foo', 'foo.entity_id = n.nid');
  $nodes = $query->execute()->fetchAll();

  if ($nodes) {
    foreach ($nodes as $node => $day) {
      $variables['nodes'][$day->expression][]['nid'] = $day->nid;
    }
    foreach ($variables['rows_dates'] as $key => $row) {
      foreach ($row['data'] as $datas => $data) {
        if (array_key_exists($data["#date"]->day, $variables['nodes']) &&
           !(in_array("disabled", $data["#attributes"]["class"]))) {
          $variables['rows_dates'][$key]['data'][$datas]["#attributes"]['class'][] = "today";
        }
      }
    }
  }
}
 
Como podemos ver tenemos que hacer ligeros cambios en función de valores que posiblemente hayan cambiado de vuestro proyecto. 
 
Para empezar, comenzaremos modificando el nombre de la función, recordad que siempre que queramos hacer un hook de este tipo tiene que empezar por el nombre del modulo o del tema, asi que modificar "MY_THEME" por vuestro tema.
 
Acto seguido vemos las lineas que hacen una consulta a la base de datos, si habies modificado o vuestro campo es diferente, por favor modificar los campos necesarios, en el videotutorial os explico como hacerlo afondo así que no entrare en esto aquí. 
 
Una vez modificado todo, solamente tendréis que limpiar caches y listo! os debería de empezar a aparecer los nodos en el calendario.
 
 
CONCLUSIÓN
 
Este modulo es realmente bastante potente, puesto que con pocas modificaciones te permite hacer grandes cosas, aunque con este videotutorial solamente muestro como poder "activar" un dia en funcion de si hay un nodo con esa fecha, usando un poco la imaginacion se pueden hacer grandes cosas, las ids de los nodos ya las tenéis asi que el resto es ponerle ingenio.
 
Lo ideal hubiera sido actualizar el modulo y poder dar la opción al usuario que elija que tipo de contenidos y que campo desea mostrar, para hacerlo mas customizable, eso ya os lo dejo a vosotros, el que tenga mas tiempo y se sienta aventurero le animo a que lo actualice! la función mas complicada que es esta ya lo tenéis así que el resto es solo parametrizarlo!
 
 
Como siempre espero que os haya gustado y espero oir comentarios y ver como compartis!!! ;)
 
Total de votos: 88

Entradas relacionadas

Comentarios (0)

Deja un comentario