Предоставление данных модуля в Views2 с использованием его API - PullRequest
5 голосов
/ 30 января 2010

Я разветвляю модуль filefield_stats , чтобы предоставить ему возможность экспонирования данных в модуль Views через API . Схема filefield_stats выглядит следующим образом:

function filefield_stats_schema() {
  $schema['filefield_stats'] = array(
    'fields' => array(      
      'fid'       => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'description' => 'Primary Key: the {files}.fid'),
      'vid'       => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'description' => 'Primary Key: the {node}.vid'),      
      'uid'       => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'description' => 'The {users}.uid of the downloader'),
      'timestamp' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE, 'description' => 'The timestamp of the download'),
      'hostname'  => array('type' => 'varchar', 'length' => 128, 'not null' => TRUE, 'default' => '', 'description' => 'The hostname downloading the file (usually IP)'),
      'referer'   => array('type' => 'text', 'not null' => FALSE, 'description' => 'Referer for the download'),   
    ),
    'indexes' => array('fid_vid' => array('fid', 'vid')),
  );
  return $schema;
}

Итак, я реализовал hook_views_api () в filefield_stats.module и добавил файл filefield_stats.views.inc в корневой каталог модуля, здесь это:

// $Id$

/**
 * @file
 * Provide the ability of exposing data to Views2, for filefield_stats module.
 */

function filefield_stats_views_data() {
    $data = array();
    $data['filefield_stats']['table']['group'] = t('FilefieldStats');

    // Referencing the {node_revisions} table.
    $data['filefield_stats']['table']['join'] = array(
        'node_revisions' => array(
            'left_field' => 'vid',
            'field' => 'vid',
        ),
        'files' => array(
            'left_field' => 'fid',
            'field' => 'fid',
        ),
        'users' => array(
            'left_field' => 'uid',
            'field' => 'uid',
        ),
    );

    // Introducing filefield_stats table fields to Views2.
    // vid: The node's revision ID which wrapped the downloaded file
    $data['filefield_stats']['vid'] = array(
        'title' => t('Node revision ID'),
        'help' => t('The node\'s revision ID which wrapped the downloaded file'),
        'relationship' => array(
            'base' => 'node_revisions',
            'field' => 'vid',
            'handler' => 'views_handler_relationship',
            'label' => t('Node Revision Reference.'),
        ),
    );

    // uid: The ID of the user who downloaded the file.
    $data['filefield_stats']['uid'] = array(
        'title' => t('User ID'),
        'help' => t('The ID of the user who downloaded the file.'),
        'relationship' => array(
            'base' => 'users',
            'field' => 'uid',
            'handler' => 'views_handler_relationship',
            'label' => t('User Reference.'),
        ),
    );

    // fid: The ID of the downloaded file.
    $data['filefield_stats']['fid'] = array(
        'title' => t('File ID'),
        'help' => t('The ID of the downloaded file.'),
        'relationship' => array(
            'base' => 'files',
            'field' => 'fid',
            'handler' => 'views_handler_relationship',
            'label' => t('File Reference.'),
        ),
    );

    // hostname: The hostname which the file has been downloaded from.
    $data['filefield_stats']['hostname'] = array(
        'title' => t('The Hostname'),
        'help' => t('The hostname which the file has been downloaded from.'),
        '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',
        ),
    );

    // referer: The referer address which the file download link has been triggered from.
    $data['filefield_stats']['referer'] = array(
        'title' => t('The Referer'),
        'help' => t('The referer which the file download link has been triggered from.'),
        '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',
        ),
    );

    // timestamp: The time of the download.
    $data['filefield_stats']['timestamp'] = array(
        'title' => t('Download Time'),
        'help' => t('The time of the download.'),
        '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;
} // filefield_stats_views_data()

В соответствии с документацией Views2, я думаю, это должно работать как минимум. Но это не так! Также нет никаких ошибок, когда я просматриваю пользовательский интерфейс представлений, в данных filefield_stats ничего нет. Есть идеи?

Ответы [ 2 ]

3 голосов
/ 31 января 2010

Я думаю, что ваша проблема в названии функции: hook_views_data(), оно должно быть filefield_stats_views_data(). hook_views_api() также должно быть filefield_stats_views_api().

Вы всегда заменяете ловушку на имя вашего модуля, когда внедряете их в свои собственные модули.

2 голосов
/ 28 октября 2010

Отсутствует field определений в приведенном выше коде, а также неправильная hook_views_api() реализация. Работающий пример реализации API можно найти здесь: http://drupalcode.org/sandbox/sepehr/1073868.git/tree/refs/heads/master:/modules/sms_panel_views

...