Am încercat să construiesc un plugin de interogare personalizat, dar primesc o eroare de index nedefinită pentru fiecare câmp pe care îl mapez. Filtrele pe care le folosesc pentru punctul final funcționează când le verific. Acest plugin extrage date de pe un alt site drupal printr-un punct final json. Mapez câmpurile la vizualizări cu hook_views_data():
<?php
/**
* Implementează hook_views_data().
*/
funcția letter_query_views_data(){
$date =[];
//date de bază
$data['letter_query']['table']['group'] = t('Letter Query');
$data['letter_query']['table']['base'] = [
'title' => t('Interogare scrisori'),
'query_id' => 'views_letter_query',
'help' => t('Interogare punct final API pentru litere'),
];
//câmpuri
$data['letter_query']['title']=[
'title' => t('Titlul scrisorii'),
'help' => t('Titlul scrisorii'),
'câmp' => [
'id' => 'standard',
],
];
$data['letter_query']['field_note']=[
'title' => t('Notă'),
'help' => t('Notă de scrisoare'),
'câmp' => [
'id' => 'standard',
],
];
returnează $date;
}
Iată interogarea mea de opinii:
<?php
spațiu de nume Drupal\letter_query\Plugin\views\query;
utilizați Drupal\Core\Plugin\ContainerFactoryPluginInterface;
utilizați Drupal\views\ResultRow;
utilizați Drupal\views\ViewExecutable;
utilizați Drupal\views\Plugin\views\query\QueryPluginBase;
utilizați Drupal\views\Annotation\ViewsQuery;
utilizați Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Pluginul de interogare Vizualizări care include apelurile la API-ul de interogare de litere pentru a
* expune rezultatele la vizualizări.
*
* @ViewsQuery(
* id = "views_letter_query",
* title = @Translation ("Interogare de scrisori"),
* ajutor = @Translation ("Interogare împotriva API.")
* )
*/
clasa ViewsLetterQuery extinde QueryPluginBase implementează ContainerFactoryPluginInterface {
/**
* @var \Drupal\letter_query\Plugin\views\letterQueryClient
*/
protejat $letterQueryClient;
/**
* Constructor ViewsLetterQuery.
*
* @param array $configurare
* @param $plugin_id
* @param $plugin_definition
* @param $letterQueryClient \Drupal\letter_query\Plugin\views\letterQueryClient
*/
funcția publică __construct(array $configuration, $plugin_id, $plugin_definition, $letterQueryClient) {
parent::__construct($configuration, $plugin_id, $plugin_definition);
$this->letterQueryClient = $letterQueryClient;
}
funcția publică statică create(ContainerInterface $container, matrice $configurație, $plugin_id, $plugin_definition) {
returnează static nou (
$configurare,
$plugin_id,
$plugin_definition,
$container->get('letter_query_client')
);
}
funcția publică execute(ViewExecutable $view) {
$index = 0;
if ($date = $this->letterQueryClient->getLetters())
{
foreach ($date ca $letter_item) {
$row['title'] = $letter_item['titlu'];
$row['field_note'] = $letter_item['field_note'];
$row['index'] = $index++;
$view->result[] = new ResultRow($row);
}
}
}
funcția publică asiguraTable($tabel, $relație = NULL) {
întoarcere '';
}
funcția publică addField($tabel, $câmp, $alias = '', $params = []) {
returnează $câmp;
}
}