it-swarm-es.com

Controladores Views2: No se encontró la clase de error fatal 'views_handler_field'

Estoy trabajando en un módulo y quiero exponer algunos campos a Vistas y proporcionar algunos filtros personalizados. Pero no puedo extender ninguna clase de Vistas sin dibujar un error fatal. Mi código se parece a esto. Todo funciona bien hasta que intento extender views_handler_field.

<?php
// $Id$
/**
 * @files
 *  Provide functionality for views.
 */
/**
 * Get some data and set some handlers.
 */
 function custom_views_data() {
      $data = array();
    $data['custom']['table']['group']  = t('custom');     
    $data['custom']['table']['join'] = array(
      'node' => array(
        'left_field' => 'nid',
        'field' => 'nid',
      ),
    );
    // Has form
    $data['custom']['is_checked'] = array(
      'title' => t('Has contest form'),
      'help' => t('Filter based on presence of a contest form. Nodes with contest forms will equal 1.'),
      'field' => array(
        'handler' => 'views_handler_field',
        'click sortable' => FALSE,
      ),
      'filter' => array(
        'handler' => 'views_handler_filter_string',
      )
    );
    return $data;
 }

 // If you remove everything below here, things work as expected

 /**
  *
  * Define custom handlers.
  */
 function custom_views_handlers() {
      return array(
        'info' => array(
          'path' => drupal_get_path('module', 'custom')
        ),
        'handlers' => array(
          'custom_handler_is_checked_field' => array(
            'parent' => 'views_handler_field'
          )
        )
      );

 }

 /**
  * This class fails with Fatal error: Class 'views_handler_field' not found 
  *
  */
class custom_handler_is_checked_field extends views_handler_field {}
2
Codeblind

¿Está su código de clase en el mismo archivo que su gancho, también conocido como archivo .module o .views.inc? Eso no funciona porque views_handler_field está en un archivo separado y solo se carga cuando es necesario.

Debe moverlo a un archivo separado que tenga el mismo nombre que su clase y la terminación ".inc", dentro de la carpeta que definió en 'ruta'. (en su caso, el directorio de su módulo, para módulos grandes con muchos archivos, se recomienda colocarlos en un directorio de vistas)

Luego, las vistas incluirán automáticamente su clase incluido el archivo que contiene views_handler_field (porque definió la relación principal en su gancho) cuando sea necesario.

1
Berdir