Score:0

ความช่วยเหลือเกี่ยวกับปลั๊กอิน Views Field

ธง cn

ฉันกำลังพยายามสร้างปลั๊กอินฟิลด์มุมมองที่มีฟังก์ชันเพิ่มเติมบางอย่างให้กับฟิลด์สำหรับฉัน ฉันมีปัญหากับมัน

ฉันมีประเภทเอนทิตีที่เรียกว่า lms_request มันมีชุดมากมายอยู่ข้างใน

เมื่อใช้ 'ปลั๊กอินฟิลด์มุมมอง' ที่กำหนดเองในมุมมองที่กรองบันเดิลเดียวโดยเฉพาะ มันจะทำงานได้ดี

เมื่อฉันพยายามใช้ฟิลด์เดียวกันบนมุมมองที่มีการกรองบันเดิลหลายชุด หรือไม่มีการกรองบันเดิลเลย (เพื่อแสดงทั้งหมด) ระบบจะแสดงข้อผิดพลาดที่ขัดขวางไม่ให้ฉันแสดงมุมมอง ข้อผิดพลาดที่พ่นออกมาคือ:

ประกาศ: ดัชนีที่ไม่ได้กำหนด: แก้ไขใน Drupal\views\Plugin\views\field\FieldPluginBase->advancedRender()

เช่นเดียวกับ ข้อผิดพลาด: ประเภทตัวถูกดำเนินการที่ไม่รองรับใน Drupal\views\Plugin\views\field\FieldPluginBase->advancedRender()

ถ้าฉันเข้าไปในคำนิยามปลั๊กอินของฟิลด์และตั้งค่าการแทนที่ กำหนดตัวเลือก

  ฟังก์ชั่นสาธารณะ กำหนดตัวเลือก () {
    ส่งคืนพาเรนต์::defineOptions();
  }

ฉันได้รับสิ่งต่อไปนี้ใน dblog (3 ครั้ง) ประกาศ: พยายามเข้าถึงอาร์เรย์ออฟเซ็ตตามค่าประเภท null ใน Drupal\views\Plugin\views\field\FieldPluginBase->defineOptions()

ฉันสับสนว่าทำไมเมื่อกรองชุดรวมเดียวจึงทำงานได้ตามที่คาดไว้ แต่ทันทีที่ฉันเอาตัวกรองออกหรือตั้งค่าตัวกรองเป็นชุดหลายชุด ฟิลด์จะหยุดทำงาน

hook_views_data() ของฉันมีลักษณะดังนี้:

ฟังก์ชัน lms_request_views_data() {
  $data['lms_request']['request_system_quick_edit'] = [
    'title' => t('คำขอแก้ไขด่วน'),
    'help' => t('แบบฟอร์มคำขอแก้ไขด่วน'),
    'ฟิลด์' => [
      'id' => 'request_system_quick_edit',
    ]
  ];

  ส่งคืน $data;
}

โดยที่ 'request_system_quick_edit' คือชื่อของปลั๊กอินฟิลด์ที่กำหนดเองที่ฉันสร้างขึ้น

รหัสปลั๊กอินฟิลด์มีลักษณะดังนี้:

<?php

เนมสเปซ Drupal\request_system\Plugin\views\field;

ใช้ Drupal\views\Plugin\views\field\FieldPluginBase;
ใช้ Drupal\views\ResultRow;

ใช้ Drupal\Core\Form\FormStateInterface;
ใช้ Drupal\Core\Url;

/**
 * ให้ตัวจัดการฟิลด์แก้ไขด่วน
 *
 * @ViewsField("request_system_quick_edit")
 *
 *@ดีซีจี
 * ต้องกำหนดปลั๊กอินให้กับคอลัมน์ตารางเฉพาะผ่าน
 * hook_views_data() หรือ hook_views_data_alter()
 * สำหรับคอลัมน์ที่ไม่มีอยู่จริง (เช่น ฟิลด์ที่คำนวณ) คุณต้องแทนที่
 * วิธี self::query()
 */
คลาส QuickEdit ขยาย FieldPluginBase {

  $storage ที่มีการป้องกัน;
  ป้องกัน $taxonomy;
  ป้องกัน $library_item;

  /**
   * {@inheritdoc}
   */
  ฟังก์ชั่นสาธารณะ __construct () {
    $this->storage = \Drupal::entityTypeManager()->getStorage('lms_request');
    $this->taxonomy = \Drupal::entityTypeManager()->getStorage('taxonomy_term');
    $this->library_item = \Drupal::entityTypeManager()->getStorage('item_type');
  }

   /**
   * {@inheritdoc}
   */
  แบบสอบถามฟังก์ชันสาธารณะ () {

  }

  // /**
  // * {@inheritdoc}
  // */
  ฟังก์ชันที่ได้รับการป้องกันdefinitionOptions() {
    พาเรนต์::defineOptions();
  }

  // /**
  // * {@inheritdoc}
  // */
  ฟังก์ชันสาธารณะ buildOptionsForm (&$form, FormStateInterface $form_state) {
    parent::buildOptionsForm($form, $form_state);
  }

  /**
   * {@inheritdoc}
   */
  ฟังก์ชั่นสาธารณะแสดงผล (ResultRow $values) {
    $build['output']['#markup'] = 'ทดสอบ';

    ส่งคืน $build;
  }
}

นอกจากนี้ เมื่อเพิ่มฟิลด์ ป้ายกำกับและกลุ่มจะแสดงอย่างถูกต้อง แต่เมื่อฟิลด์อยู่ในมุมมอง จะแสดง : แทน กลุ่ม:ชื่อฟิลด์ ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมอย่างมาก.

4uk4 avatar
cn flag
ดูใช้การรวมหรือไม่ หากคุณดูที่ฟิลด์ที่คำนวณ คุณมักจะเห็นสองสิ่ง แบบสอบถามฟังก์ชันว่าง () และ `ฟังก์ชันสาธารณะusesGroupBy() { คืนค่า FALSE; }`
Score:0
ธง rs

ฉันคิดว่าปัญหาอาจเป็นเพราะคุณต้องเพิ่มประเภทสำหรับรายการอาร์เรย์เรนเดอร์ของคุณ:

ฟังก์ชั่นสาธารณะแสดงผล (ResultRow $values) {
    $สร้าง['เอาท์พุท'] = [
      '#type' => 'คอนเทนเนอร์',
      '#markup' => 'ทดสอบ',
    ];

    ส่งคืน $build;
}

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา