カスタムテーブル/スキーマでビューを使用する


19

作成したカスタムテーブルからデータを取得するビューを設定する必要があります。一部のビューは、通常の方法で、カスタムテーブル(特定のnidなどをクエリできる場所)からコンテンツをプルする必要があります。

これをどのように行うのですか、または研究するのに適した場所はどこですか?


7
この記事はかなり重要なようです:mydons.com/how-to-expose-custom-module-table-to-views-in-drupal
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;
}

これは非常に役立ちました。ただし、私のフィールドの1つは複数値であるため、別の方法で設定する必要があると思いますが、どうすればよいのでしょうか?
バシランド

違いは、使用する必要があるハンドラと、「yes-no」の代わりに使用するものです。ただし、複数値フィールド用のハンドラーはわかりません。おそらく誰もまだ質問していないのであれば、質問としては良いでしょう。
キアムルノ

おかげで、@ kiamlaluno-OK、私は見て、見つけられなかったので、別の質問を作成しようと思いました-drupal.stackexchange.com/questions/70561/を
Vacilando

2

おそらくDataモジュールを調査する価値があると思います。これは非常に強力です。Drupal以外のテーブルをデータソースとしてビューに表示できるように、Drupalに宣言できるためです(「コンテンツ」、「分類」など)。また、非DrupalテーブルとDrupalエンティティ間の結合を宣言することもできます(たとえば、非Drupalテーブルにnidを保存できる場合は、nidで任意のノードとの結合を宣言できます)。

また、Drupal以外のテーブルをエンティティとして宣言できるサブモジュールもありますが、これまでのところ試していません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.