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
funcția letter_query_views_data(){
$date =[];
$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'),
];
$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;
clasa ViewsLetterQuery extinde QueryPluginBase implementează ContainerFactoryPluginInterface {
protejat $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;
}
}