Crear un filtro personalizado en Views

Crear un filtro personalizado en Views para Drupal no es complicado, pero no hay mucha documentación que lo explique paso a paso. Para empezar, debemos crear un módulo propio.

No voy a profundizar mucho en cómo crear un módulo (arriba he puesto el enlace a la documentación oficial). Para este ejemplo supongamos que vamos a crear un módulo llamado matrosphera y un filtro llamado current_year que nos devolverá el año actual y filtrará los contenidos por ese campo. El contenido a filtrar debe tener un campo llamado field_year (que tendrá valores como 2013 o 2014) que será comprobado a la hora de filtrar.

1.- Creamos el fichero matrosphera.info y aparte de añadir título, descripción, versión, etc, añadimos justo al final del fichero lo siguiente:

files[] = inc/matrosphera_handler_filter_current_year.inc

2.- Creamos el fichero matrosphera.module y añadimos lo siguiente:

/**
 * Implements hook_views_api().
 */
function matrosphera_views_api() {
  return array("api" => "3.0");
}
 
function matrosphera_views_data_alter(&$data) {
  $data['node']['current_year'] = array(
    'title' => t('Current year'),
    'group' => 'Custom',
    'help' => t('Filter by current year.'),
    'real field' => 'field_year',
    'filter' => array(
      'handler' => 'matrosphera_handler_filter_current_year',
    ),
  );
}

3.- Creamos una carpeta en nuestro módulo llamada inc y dentro creamos un fichero llamado matrosphera_handler_filter_current_year.inc:

<?php
class matrosphera_handler_filter_current_year extends views_handler_filter {
  /**
   * Alters Views query when filter is used.
   */
  function query() {
    $this->ensure_my_table();
    $this->query->add_where_expression($this->options['group'],
        'field_data_field_year.field_year_value = ' . date('Y'));
  }
}

Nota: para este ejemplo he tomado parte del código que he realizado para un proyecto pero lo he modificado por completo y no lo he probado. Mi intención es más mostraros la estructura de ficheros, directorios y hooks que debéis crear para tener vuestro propio filtro. No obstante, si os surge alguna duda dejad un comentario y estaré encantado de ayudaros.

drupal

banner