将视图与自定义表/模式一起使用


19

我需要设置一些视图,这些视图将从我创建的自定义表中提取一些数据。一些视图将需要以常规方式从我的自定义表中提取内容(我可以在其中查询特定的nid等)。

我该怎么做,或者在哪里研究?


7
本文似乎很明确
Jimajamma 2012年

看起来好像是我要的东西。谢谢!
vintorg

Answers:


25

您的模块需要实现hook_views_data()

挂钩文档中给出的示例适用于根据以下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;
}

这是一个很好的帮助。但是,我的领域之一是多值,因此我认为必须以不同的方式设置它-但是如何?
Vacilando

不同之处在于您需要使用的处理程序,以及您使用的是“ yes-no”而不是“ yes-no”。但是,我无法告诉您哪些处理程序用于多值字段。如果没有人问过这个问题,可能会更好。
kiamlaluno

谢谢,@kiamlaluno -好了,我看了看,没发现,然后大胆地创建一个单独的问题-看drupal.stackexchange.com/questions/70561/...
Vacilando

2

我认为可能值得研究数据模块。这非常强大,因为它允许您向Drupal声明一个非Drupal表,以使其在Views中作为数据源可见(例如“ Content”,“ Taxonomy”等)。您还可以在非Drupal表和Drupal实体之间声明联接(例如,如果您可以在非Drupal表中存储nid,则可以在具有任何节点的nid上声明联接)。

还有一个子模块,它允许您将非Drupal表声明为实体,但是到目前为止,我还没有尝试过。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.