Використання представлень із власною таблицею / схемою


19

Мені потрібно налаштувати деякі представлення даних, які витягуватимуть деякі дані із створеної власною таблицею. Для деяких представлень даних потрібно буде перетягувати вміст звичайним способом і зі своєї власної таблиці (де я можу запитувати певний Nid тощо).

Як це зробити, або де добре місце для дослідження?


7
Ця стаття здається досить актуальною
Jimajamma

Схоже, це може бути те, що я шукаю. Спасибі!
vintorg

Відповіді:


25

Ваш модуль повинен реалізувати kuk_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 як джерело даних (наприклад, "Вміст", "Таксономія" тощо). Ви також можете оголосити з'єднання між не-Drupal таблицею та Drupal-сутностями (так, наприклад, якщо ви можете зберегти nid у своїй не-Drupal-таблиці, тоді ви можете оголосити приєднання nid будь-яким вузлом).

Існує також підмодуль, який дозволяє оголосити свою не-Drupal таблицю як сутність, але поки що я цього не пробував.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.