#php #mysql #drupal #drupal-7 #drupal-views
#php #mysql #drupal #drupal-7 #drupal-просмотры
Вопрос:
Я написал модуль для взаимодействия с Views 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;
}
Что-то не так с моим отображением? Когда я создаю представление, я пытаюсь использовать простой неформатированный список и просто показываю каждое поле с меткой. Единственное поле, которое отображается с данными, — это 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
, он возвращает результаты, и в каждом столбце есть данные.
Редактировать: возможно, уместно сказать, что я создал другой пользовательский модуль просмотра для другой таблицы в той же базе данных, и он работает нормально. Я использовал этот модуль в качестве основы для этого, изменив имя модуля, префиксы функций и т. Д.
Комментарии:
1. Я знаю, что это, вероятно, очевидно, но всякий раз, когда у меня возникает подобная проблема, обычно это происходит из-за того, что имя функции ‘my_module’ написано неправильно.
2. Попробуйте спросить @ drupal.stackexchange.com
Ответ №1:
Очистите кэш, отключите модуль ‘my_module’, сохраните, затем включите его обратно, сохраните
В моей разработке я должен добавить этот хук, чтобы он работал
function my_module_views_api() {
return array('api'=>2.0);
}
Комментарии:
1. Это верно, hook_views_api должен быть реализован, чтобы сообщить Views, что вы хотите, чтобы он обратил внимание на ваш модуль.