1

Drupal 7 の Views 3 ヘルプ ファイルに従っていますが、モジュールを Views で表示できるようにするためにモジュールに他に何を追加する必要があるのか​​、少し行き詰っています。データベース。

もちろん、実際のデータベースにはもっと便利なフィールドがたくさんありますが、それを表示するのに苦労していたので、もっと複雑なことを試す前に、代わりにこのテスト データベースを「hello world」として作成しました。これがスキーマです。

database name = other

create table strings (
id int primary key auto_increment,
mystring varchar(50)
);

データベースを含めるための私のsettings.phpは次のとおりです。

<?php
// ...

$databases = array (
  'default' =>
  array (
    'default' =>
    array (
      'database' => 'drupal',
      'username' => 'drupal_user',
      'password' => 'my_other_pass',
      'host' => 'localhost',
      'port' => '',
      'driver' => 'mysql',
      'prefix' => '',
    ),

    array (
        'database' => 'other',
        'username' => 'my_user',
        'password' => 'my_pass',
        'host' => 'localhost',
        'port' => '',
        'driver' => 'mysql',
        'prefix' => '',
    ),
  ),
);

//...

?>

これは、mystrings のテーブル構造がどのように見えるかを Drupal に説明する test (有効になっている) という名前のカスタム モジュールの test.views.inc ファイルです。

<?php
//useful site explaining all of this: http://groups.drupal.org/node/17236
function test_views_data() {
    $data = array(
        'strings' => array(
            'table' => array(
                'group' => t('views test'),

                'base' => array(
                    'field' => 'id',
                    'title' => t("I guess node"),
                    'help' => t("help for I guess node I guess"),
                    'weight' => -10,
                    'database' => 'others',
                ),
            ),

            'id' => array(
                'title' => t('id'),
                /*'field' => array(
                    'handler' => 'views_handler_field_node',
                    'click sortable' => TRUE,
                ),*/
                'relationship' => array(
                    'label' => t("node I think"),
                    'base' => 'node',
                    'base_field => 'id',
                ),
                /*'argument' => array(
                    'handler' => 'view_handler_argument_node_nid',
                    'name field' => 'id for strings',
                    'numeric' => TRUE,
                    'validate type' => 'nid',
                ),*/

                /*'filter' => array(
                    'handler' => 'views_handler_filter_numeric',
                ),*/

                /*'sort' => array(
                    'handler' => 'views_handler_sort',
                ),*/
            ),

            'mystring' => array(
                'title' => t('mystring'),
                'field' => array(
                    'handler' => 'views_handler_field',
                    'click sortable' => TRUE,
                ),
                'filter' => array(
                    'handler' => 'views_handler_filter_string',
                ),
                'argument' => array(
                    'handler' => 'views_handler_argument_string',
                ),
                'sort' => array(
                    'handler' => 'views_handler_sort',
                ),
            ),
        ),
    );

    return $data;
}

私のtest.moduleファイルは次のとおりです。

<?php

function test_help($section) {
    switch($section) {
        case "admin/help#test":
        return "<p>hello from test</p>";

        case "admin/modules#description":
        return "hello from test inside the admin help thing";
    }
}

function test_page() {
    return "<p>hello from the actual test page</p>";
}

function test_views_api() {
    return array('api' => 3.0);
}

現在の問題は次のとおりです。新しいビューを作成しようとすると、この情報や、データベースとテーブルの mystrings に関連する情報が表示されません。カスタムモジュールコード/ビューの使用法で私が間違っていることを誰か知っていますか? どんな助けでも大歓迎です!

4

1 に答える 1

2

基本モジュールをセットアップしてテストしたところ、正常に動作しました。私があなたのコードで見ることができる主な問題は、settings.php ファイルです。

設定.php

<?php
$databases = array (
  'default' => array (
      'default' => array (
      'database' => 'drupaldev',
      'username' => 'drupal_user',
      'password' => '',
      'host' => 'localhost',
      'port' => '',
      'driver' => 'mysql',
      'prefix' => '',
    ),
  ),

  'testdb' => array(
    'default' => array (
      'database' => 'testdb',
      'username' => 'testdb_user',
      'password' => '',
      'host' => 'localhost',
      'port' => '',
      'driver' => 'mysql',
      'prefix' => '',
    ),
  ),
);

so_views.module

<?php

/**
 * Implements hook_views_api().
 * 
 * @return array
 */
function so_views_views_api() {
  return array(
    'api' => 3,
  );
}

/**
 * Implements hook_views_data().
 *
 * @return array
 */
function so_views_views_data() {
  return array(
    'example_table' => array(
      'table' => array(
        'group' => t('SO View Table'),
        'base' => array(
          'field' => 'nid',
          'title' => t('SO new Table'),
          'help' => t('Table contains data'),
          'weight' => -10,
          'database' => 'testdb',
        ),
        'join' => array(
          'node' => array(
            'left_field' => 'nid',
            'field' => 'nid',
          ),
        ),
      ),
      'nid' => array(
        'title' => t('Node Id'),
        'help' => t('This is the node Id'),
        'relationship' => array(
          'base' => 'node',
          'base field' => 'nid',
          'handler' => 'views_handler_relationship',
          'label' => t('Default label for the relationship'),
          'title' => t('Title shown when adding the relationship'),
          'help' => t('More information on this relationship'),
        ),
      ),
      '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, // This is use by the table display plugin.
        ),
        'sort' => array(
          'handler' => 'views_handler_sort',
        ),
        'filter' => array(
          'handler' => 'views_handler_filter_string',
        ),
        'argument' => array(
          'handler' => 'views_handler_argument_string',
        ),
      ),
      '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',
        ),
      ),
      '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',
          // Note that you can override the field-wide label:
          'label' => t('Published'),
          // This setting is used by the boolean filter handler, as possible option.
          'type' => 'yes-no',
          // use boolean_field = 1 instead of boolean_field <> 0 in WHERE statment.
          'use equal' => TRUE,
        ),
        'sort' => array(
          'handler' => 'views_handler_sort',
        ),
      ),
      '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',
        ),
      ),
    ),
  );
}

すべてのビュー関連のコードはドキュメントからのものです。advanced_help モジュールをインストールして、yoursite.com/views/api-tables を確認することをお勧めします。

これを別のモジュールで設定したい場合は、情報ファイルを作成してください。必要な sql はここにあります。

于 2013-02-03T02:25:35.127 に答える