【发布时间】:2011-10-25 15:14:14
【问题描述】:
我使用 Drupal 7 编写了一个与 Views 3 交互的模块,但是当我使用自定义表作为数据源创建视图时,没有数据显示。这是我的 MySQL 架构:
+-------------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| title | mediumtext | NO | | NULL | |
| Department | text | NO | | NULL | |
| credits | int(10) | NO | | NULL | |
| description | longtext | NO | | NULL | |
+-------------+------------+------+-----+---------+----------------+
这是 my_module.views.inc 中的钩子覆盖:
function my_module_views_data() {
$tableName = 'My_Awesome_Table';
$data = array();
$data[$tableName]['table']['group'] = t('Courses');
$data[$tableName]['table']['base'] = array(
'field' => 'id',
'title' => t('Courses'),
'help' => t("Contains courses, departments, and descriptions.")
);
$data[$tableName]['title'] = array(
'title' => t('Course name'),
'help' => t('Course name'),
'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[$tableName]['Department'] = array(
'title' => t('Course department'),
'help' => t('Course department'),
'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[$tableName]['credits'] = array(
'title' => t('Credits'),
'help' => t('Number of credit hours'),
'field' => array(
'handler' => 'views_handler_field',
'click sortable' => TRUE,
),
'argument' => array('handler' => 'views_handler_argument_numeric'),
'filter' => array('handler' => 'views_handler_filter_numeric'),
'sort' => array('handler' => 'views_handler_sort_numeric')
);
$data[$tableName]['description'] = array(
'title' => t('Course description'),
'help' => t('Course description'),
'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[$tableName]['id'] = array(
'title' => t('Unique identifier'),
'help' => t('Primary key for table'),
'field' => array('handler' => 'views_handler_field'),
'argument' => array('handler' => 'views_handler_argument_numeric'),
'filter' => array('handler' => 'views_handler_filter_numeric'),
'sort' => array('handler' => 'views_handler_sort_numeric'));
return $data;
}
我的映射看起来有问题吗?当我创建一个视图时,我正在尝试一个简单的无格式列表,并且只显示带有标签的每个字段。显示数据的唯一字段是id,我的表中的所有id 值都在那里。我尝试在视图中添加一个过滤器,以便课程部门!= blank 和课程名称!= blank,这并没有消除任何结果(基于id s 所示)。这是 Views 正在生成的查询:
SELECT My_Awesome_Table.title AS My_Awesome_Table_title,
My_Awesome_Table.Department AS My_Awesome_Table_Department,
My_Awesome_Table.description AS My_Awesome_Table_description,
My_Awesome_Table.credits AS My_Awesome_Table_credits,
My_Awesome_Table.id AS id
FROM {My_Awesome_Table} My_Awesome_Table
WHERE (( (My_Awesome_Table.Department NOT LIKE '' ESCAPE '\\') AND
(My_Awesome_Table.title NOT LIKE '' ESCAPE '\\') ))
当我在 phpMyAdmin 中运行它时,只需从 My_Awesome_Table 周围删除 { 和 },它就会返回结果,并且每一列中都有数据。
编辑: 说我为同一个数据库中的不同表创建了另一个自定义视图模块,它工作正常,这可能是相关的。我将该模块用作此模块的基础,更改了模块名称、函数前缀等。
【问题讨论】:
-
我知道这可能很明显,但每当我遇到这样的问题时,通常是因为函数 'my_module' 的名称拼写错误。
标签: php mysql drupal drupal-7 drupal-views