Я пытался создать настраиваемый плагин запроса представлений, но я получаю неопределенную ошибку индекса для каждого поля, которое я отображаю. Фильтры, которые я использую для конечной точки, работают, когда я их проверяю. Этот плагин извлекает данные с другого сайта drupal через конечную точку json. Я сопоставляю поля представлениям с помощью hook_views_data():
<?php
/**
* Реализует hook_views_data().
*/
функция letter_query_views_data(){
$ данные = [];
//базовые данные
$data['letter_query']['table']['group'] = t('Letter Query');
$data['letter_query']['table']['base'] = [
'title' => t('Письмо-запрос'),
'query_id' => 'views_letter_query',
'help' => t('Запрос конечной точки API для писем'),
];
//поля
$data['letter_query']['title']=[
'title' => t('Заголовок письма'),
'help' => t('Название письма'),
'поле' => [
'id' => 'стандарт',
],
];
$data['letter_query']['field_note']=[
'название' => т('Примечание'),
'help' => t('Письмо Примечание'),
'поле' => [
'id' => 'стандарт',
],
];
вернуть $данные;
}
Вот мой запрос просмотров:
<?php
пространство имен Drupal\letter_query\Plugin\views\query;
используйте Drupal\Core\Plugin\ContainerFactoryPluginInterface;
используйте Drupal\views\ResultRow;
используйте Drupal\views\ViewExecutable;
используйте Drupal\views\Plugin\views\query\QueryPluginBase;
используйте Drupal\views\Annotation\ViewsQuery;
используйте Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Плагин запросов Views, который оборачивает вызовы API запросов писем, чтобы
* выставлять результаты на просмотр.
*
* @ViewsQuery(
* id = "views_letter_query",
* title = @Translation("Письмо-запрос"),
* help = @Translation("Запрос к API.")
* )
*/
класс ViewsLetterQuery расширяет QueryPluginBase, реализует ContainerFactoryPluginInterface {
/**
* @var \Drupal\letter_query\Plugin\views\letterQueryClient
*/
защищенный $letterQueryClient;
/**
* Конструктор ViewsLetterQuery.
*
* @param массив $configuration
* @параметр $plugin_id
* @param $plugin_definition
* @param $letterQueryClient \Drupal\letter_query\Plugin\views\letterQueryClient
*/
публичная функция __construct(массив $configuration, $plugin_id, $plugin_definition, $letterQueryClient) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->letterQueryClient = $letterQueryClient;
}
общедоступная статическая функция create(ContainerInterface $container, массив $configuration, $plugin_id, $plugin_definition) {
вернуть новую статику(
$ конфигурация,
$plugin_id,
$plugin_definition,
$container->получить('letter_query_client')
);
}
выполнение публичной функции (ViewExecutable $ view) {
$индекс = 0;
если ($data = $this->letterQueryClient->getLetters())
{
foreach ($данные как $letter_item) {
$row['title'] = $letter_item['title'];
$row['field_note'] = $letter_item['field_note'];
$строка['индекс'] = $индекс++;
$view->result[] = новый ResultRow($row);
}
}
}
публичная функция sureTable($table, $relationship = NULL) {
возвращаться '';
}
публичная функция addField($table, $field, $alias = '', $params = []) {
вернуть $поле;
}
}