Korzystanie z widoków z niestandardową tabelą / schematem

19

Muszę skonfigurować niektóre widoki, które będą pobierać dane z niestandardowej tabeli, którą utworzyłem. Niektóre widoki będą musiały pobierać zawartość w zwykły sposób i z niestandardowej tabeli (gdzie mogę zapytać o konkretny identyfikator itp.).

Jak to zrobić lub gdzie jest dobre miejsce do badań?

Vintorg
źródło
7
Ten artykuł wydaje się dość trafny
Jimajamma
Wygląda na to, że to może być to, czego szukam. Dzięki!
vintorg

Odpowiedzi:

25

Twój moduł musi zaimplementować hook_views_data () .

Przykład podany w dokumentacji hooka dotyczy tabeli zdefiniowanej na podstawie następującego kodu 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
źródło
To była doskonała pomoc. Jednak jedno z moich pól jest wielowartościowe, więc myślę, że musi być skonfigurowane inaczej - ale jak?
Vacilando,
Różnica polega na modułach obsługi, których musisz użyć, oraz na tym, czego używasz zamiast „tak-nie”; Nie mogę jednak powiedzieć, które procedury obsługi są dla pola o wielu wartościach. Prawdopodobnie lepiej jest zadać pytanie, jeśli nikt już go nie zadał.
kiamlaluno
Dzięki, @kiamlaluno - OK, więc spojrzałem, nie znalazłem, a potem odważyłem się stworzyć osobne pytanie - patrz drupal.stackexchange.com/questions/70561/…
Vacilando
2

Myślę, że prawdopodobnie warto zbadać moduł danych . Jest to bardzo potężne, ponieważ pozwala zadeklarować Drupalowi tabelę inną niż Drupal, dzięki czemu staje się ona widoczna w Widoku jako źródło danych (np. „Treść”, „Taksonomia” itp.). Możesz także zadeklarować sprzężenia między tabelą inną niż Drupal i jednostkami Drupal (na przykład jeśli możesz przechowywać nid w tabeli innej niż Drupal, możesz zadeklarować złączenie na nid dowolnym węzłem).

Istnieje również submoduł, który pozwala zadeklarować swoją tabelę nie będącą Drupalem jako byt, ale jak dotąd nie próbowałem tego.

Martin K.
źródło