Использование представлений с пользовательской таблицей / схемой

19

Мне нужно настроить некоторые представления, которые будут извлекать некоторые данные из пользовательской таблицы, которую я создал. Некоторые представления должны будут извлекать контент обычным способом и из моей пользовательской таблицы (где я могу запросить конкретный nid и т. Д.).

Как мне это сделать, или где хорошее место для исследований?

vintorg
источник
7
Эта статья, кажется, хороша по теме
Jimajamma
Похоже, это может быть то, что я ищу. Благодарность!
Винторг

Ответы:

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
Разница в том, какие обработчики вам нужно использовать, и что вы используете вместо «да-нет»; Я не могу сказать вам, какие обработчики для многозначного поля, хотя. Вероятно, это лучше, чем вопрос, если его никто не задавал.
kiamlaluno
Спасибо, @kiamlaluno - ОК, так что я посмотрел, не нашел, потом рискнул создать отдельный вопрос - см. Drupal.stackexchange.com/questions/70561/…
Vacilando
2

Я думаю, что, вероятно, стоило бы исследовать модуль данных . Это очень мощный инструмент, так как он позволяет вам объявлять не-Drupal таблицу для Drupal, так что она становится видимой в Views как источник данных (например, «Content», «Taxonomy» и т. Д.). Вы также можете объявить объединения между таблицей, не относящейся к Drupal, и сущностями Drupal (например, если вы можете хранить nid в своей таблице, не относящейся к Drupal, то вы можете объявить объединение по nid с любым узлом).

Существует также подмодуль, который позволяет вам объявить вашу таблицу, не относящуюся к Drupal, как сущность, но до сих пор я этого не пробовал.

Мартин К
источник