Usar vistas con una tabla / esquema personalizado

19

Necesito configurar algunas vistas que extraerán algunos datos de una tabla personalizada que creé. Algunas vistas necesitarán extraer contenido de la forma habitual y desde mi tabla personalizada (donde puedo consultar un nid particular , etc.).

¿Cómo hago esto o dónde es un buen lugar para investigar?

vintorg
fuente
77
Este artículo parece ser bastante acertado
Jimajamma
Parece que puede ser lo que estoy buscando. ¡Gracias!
vintorg

Respuestas:

25

Su módulo necesita implementar hook_views_data () .

El ejemplo dado en la documentación del gancho es para una tabla definida a partir del siguiente SQL.

CREATE TABLE example_table (
  nid INT(11) NOT NULL,
  plain_text_field VARCHAR(32,
  numeric_field INT(11),
  boolean_field INT(1),
  timestamp_field INT(8),
  PRIMARY KEY(nid)
);
function mymodule_views_data() {
  $data['example_table']['table']['group'] = t('Example table');

  $data['example_table']['table']['base'] = array(
    'field' => 'nid',
    'title' => t('Example table'), 
    'help' => t('Example table contains example content and can be related to nodes.'), 
    'weight' => -10,
  );

  $data['example_table']['table']['join'] = array(
    'node' => array(
      'left_field' => 'nid', 
      'field' => 'nid',
    ),
  );

  $data['example_table']['nid'] = array(
    'title' => t('Example content'), 
    'help' => t('Some example content that references a node.'),
    'relationship' => array(
      'base' => 'node',
      'base field' => 'nid', // The name of the field on the joined table.
      // 'field' => 'nid' -- see hook_views_data_alter(); not needed here.
      'handler' => 'views_handler_relationship', 
      'label' => t('Example node'),
    ),
  );

  $data['example_table']['plain_text_field'] = array(
    'title' => t('Plain text field'), 
    'help' => t('Just a plain text field.'), 
    'field' => array(
      'handler' => 'views_handler_field', 
      'click sortable' => TRUE,
    ), 
    'sort' => array(
      'handler' => 'views_handler_sort',
    ), 
    'filter' => array(
      'handler' => 'views_handler_filter_string',
    ), 
    'argument' => array(
      'handler' => 'views_handler_argument_string',
    ),
  );

  $data['example_table']['numeric_field'] = array(
    'title' => t('Numeric field'), 
    'help' => t('Just a numeric field.'), 
    'field' => array(
      'handler' => 'views_handler_field_numeric', 
      'click sortable' => TRUE,
    ), 
    'filter' => array(
      'handler' => 'views_handler_filter_numeric',
    ), 
    'sort' => array(
      'handler' => 'views_handler_sort',
    ),
  );

  $data['example_table']['boolean_field'] = array(
    'title' => t('Boolean field'), 
    'help' => t('Just an on/off field.'), 
    'field' => array(
      'handler' => 'views_handler_field_boolean', 
      'click sortable' => TRUE,
    ), 
    'filter' => array(
      'handler' => 'views_handler_filter_boolean_operator',
      'label' => t('Published'),
      'type' => 'yes-no',
      'use equal' => TRUE,
    ), 
    'sort' => array(
      'handler' => 'views_handler_sort',
    ),
  );

  $data['example_table']['timestamp_field'] = array(
    'title' => t('Timestamp field'), 
    'help' => t('Just a timestamp field.'), 
    'field' => array(
      'handler' => 'views_handler_field_date', 
      'click sortable' => TRUE,
    ), 
    'sort' => array(
      'handler' => 'views_handler_sort_date',
    ), 
    'filter' => array(
      'handler' => 'views_handler_filter_date',
    ),
  );

  return $data;
}
kiamlaluno
fuente
Esta ha sido una excelente ayuda. Sin embargo, uno de mis campos es multivalor, por lo que creo que debe configurarse de manera diferente, pero ¿cómo?
Vacilando
La diferencia está en los controladores que necesita usar, y en lo que usa en lugar de "sí-no"; Sin embargo, no puedo decirte qué controladores son para un campo de valores múltiples. Probablemente sea mejor como pregunta, si ya nadie lo hizo.
kiamlaluno
Gracias, @kiamlaluno - OK, así que busqué, no encontré, luego me aventuré a crear una pregunta por separado - ver drupal.stackexchange.com/questions/70561/…
Vacilando
2

Creo que probablemente valdría la pena investigar el módulo de datos . Esto es muy poderoso, ya que le permite declarar una tabla que no es de Drupal a Drupal de modo que se haga visible en Vistas como fuente de datos (como "Contenido", "Taxonomía", etc.). También puede declarar uniones entre la tabla no Drupal y las entidades Drupal (por ejemplo, si puede almacenar un nid en su tabla no Drupal, puede declarar una unión en el nid con cualquier nodo).

También hay un submódulo que le permite declarar su tabla no Drupal como una entidad, pero hasta ahora no lo he intentado.

Martin K
fuente