Я написал модуль для взаимодействия с представлениями 3 с помощью Drupal 7, но когда я создаю представление с использованием моей настраиваемой таблицы в качестве источника данных, данные не отображаются. Вот моя схема из 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;
}
Что-то не так с моим сопоставлением? Когда я создаю представление, я пытаюсь создать простой Unformatted List и просто показывать каждое поле с меткой. Единственное поле, которое отображается с данными, это id
, и все значения id
из моей таблицы есть. Я попробовал добавить фильтр в представление, чтобы отдел курса!= Пустое и название курса!= Пустое, что не устранило никаких результатов (на основе показанного id
). Здесь генерируется запрос 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
, он возвращает результаты и в каждом столбце есть данные.
Изменить:, возможно, имеет смысл сказать, что я создал другой пользовательский модуль View для другой таблицы в той же базе данных, и он отлично работает. Я использовал этот модуль в качестве базы для этого, изменив имя модуля, префиксы функций и т.д.