ฉันพยายามสร้างปลั๊กอินการสืบค้นมุมมองที่กำหนดเอง แต่ฉันได้รับข้อผิดพลาดของดัชนีที่ไม่ได้กำหนดสำหรับแต่ละฟิลด์ที่ฉันกำลังแมป ตัวกรองที่ฉันใช้สำหรับจุดสิ้นสุดจะทำงานเมื่อฉันตรวจสอบ ปลั๊กอินนี้ดึงข้อมูลจากไซต์ drupal อื่นผ่าน json endpoint ฉันกำลังแมปฟิลด์เพื่อดูด้วย hook_views_data():
<?php
/**
* ใช้ hook_views_data()
*/
ฟังก์ชัน letter_query_views_data(){
$ข้อมูล =[];
// ข้อมูลพื้นฐาน
$data['letter_query']['table']['group'] = t('ข้อความค้นหา');
$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']=[
'title' => t('หมายเหตุ'),
'help' => t('บันทึกจดหมาย'),
'ฟิลด์' => [
'id' => 'มาตรฐาน',
]
];
ส่งคืน $data;
}
นี่คือแบบสอบถามมุมมองของฉัน:
<?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;
/**
* ดูปลั๊กอินการสืบค้นที่รวมการเรียกไปยัง 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
* @param $plugin_id
* @param $plugin_definition
* @param $letterQueryClient \Drupal\letter_query\Plugin\views\letterQueryClient
*/
ฟังก์ชันสาธารณะ __construct (อาร์เรย์ $configuration, $plugin_id, $plugin_definition, $letterQueryClient) {
พาเรนต์::__construct($configuration, $plugin_id, $plugin_definition);
$this->letterQueryClient = $letterQueryClient;
}
การสร้างฟังก์ชันสแตติกสาธารณะ (ContainerInterface $container, อาร์เรย์ $configuration, $plugin_id, $plugin_definition) {
ส่งคืนค่าคงที่ใหม่ (
$configuration,
$plugin_id,
$plugin_definition,
$container->get('letter_query_client')
);
}
ฟังก์ชั่นสาธารณะดำเนินการ (ViewExecutable $ view) {
$ดัชนี = 0;
ถ้า ($data = $this->letterQueryClient->getLetters())
{
foreach ($data เป็น $letter_item) {
$row['title'] = $letter_item['title'];
$row['field_note'] = $letter_item['field_note'];
$row['ดัชนี'] = $ดัชนี++;
$view->result[] = ใหม่ ResultRow($row);
}
}
}
ฟังก์ชั่นสาธารณะ sureTable ($ ตาราง, $ ความสัมพันธ์ = NULL) {
กลับ '';
}
ฟังก์ชันสาธารณะ addField($table, $field, $alias = '', $params = []) {
ส่งคืนฟิลด์ $;
}
}