Ansichten mit einer benutzerdefinierten Tabelle / einem benutzerdefinierten Schema verwenden

19

Ich muss einige Ansichten einrichten, die einige Daten aus einer von mir erstellten benutzerdefinierten Tabelle abrufen. In einigen Ansichten muss der Inhalt auf normale Weise und aus meiner benutzerdefinierten Tabelle abgerufen werden (wo ich möglicherweise nach einer bestimmten NID usw. frage ).

Wie mache ich das oder wo kann ich gut recherchieren?

vintorg
quelle
7
Dieser Artikel scheint ziemlich auf den Punkt zu sein: mydons.com/how-to-expose-custom-module-table-to-views-in-drupal
Jimajamma
Das sieht so aus, als würde es das sein, wonach ich suche. Vielen Dank!
Vintorg

Antworten:

25

Ihr Modul muss hook_views_data () implementieren .

Das in der Hook-Dokumentation angegebene Beispiel bezieht sich auf eine Tabelle, die in der folgenden SQL definiert wurde.

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
quelle
Dies war eine hervorragende Hilfe. Eines meiner Felder ist jedoch mehrwertig, und ich denke, es muss anders eingerichtet werden - aber wie?
Vacilando
Der Unterschied liegt in den Handlern, die Sie verwenden müssen, und in dem, was Sie anstelle von "Ja-Nein" verwenden. Ich kann Ihnen jedoch nicht sagen, welche Handler für ein mehrwertiges Feld vorgesehen sind. Wahrscheinlich ist es als Frage besser, wenn es schon keiner gefragt hat.
Kiamlaluno
Danke, @kiamlaluno - OK, also habe ich gesucht, nicht gefunden und mich dann
getraut
2

Ich denke, es lohnt sich wahrscheinlich, das Datenmodul zu untersuchen . Dies ist sehr leistungsfähig, da Sie eine Nicht-Drupal-Tabelle für Drupal deklarieren können, sodass sie in Views als Datenquelle sichtbar wird (z. B. "Inhalt", "Taxonomie" usw.). Sie können auch Verknüpfungen zwischen der Nicht-Drupal-Tabelle und Drupal-Entitäten deklarieren (wenn Sie beispielsweise eine NID in Ihrer Nicht-Drupal-Tabelle speichern können, können Sie eine Verknüpfung für die NID mit einem beliebigen Knoten deklarieren).

Es gibt auch ein Submodul, mit dem Sie Ihre Nicht-Drupal-Tabelle als Entität deklarieren können, aber das habe ich bisher nicht versucht.

Martin K
quelle