Score:0

การสร้างลิงค์ในแถว TableSelect

ธง cn

ฉันได้สร้างโมดูลที่กำหนดฟอร์ม แต่เมื่อฉันพยายามเพิ่มคอลัมน์ของลิงก์ มันว่างเปล่าเมื่อฉันตั้งค่า '#พิมพ์' ถึง 'ลิงค์'. ฉันกำลังทดสอบสิ่งนี้บน Drupal 9.3.x

บนพื้นผิวก็เหมือนกับ เพิ่มลิงค์ไปยังตารางเลือกแถวแต่คำตอบที่โพสต์นั้นไม่มีรหัสการทำงานที่สมบูรณ์ และฉันค่อนข้างแน่ใจว่าวิธีแก้ปัญหาในบริบทของฉันจะแตกต่างจากที่โพสต์ไว้ที่นั่น

นี่คือรหัสเต็มของคลาสที่ขยายออกไป ฟอร์มเบส.

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

คลาส MyForm ขยาย FormBase {

  buildForm ฟังก์ชันสาธารณะ (อาร์เรย์ $form, \Drupal\Core\Form\FormStateInterface $form_state) {
    // สร้าง fileNameOptions
    $privatePath = 'ส่วนตัว://webform/upload/';
    $linkPath = '/ระบบ/ไฟล์/เว็บฟอร์ม/อัพโหลด/';
    $ templatePath = \Drupal::service('file_system')->realpath($privatePath);
    $fileList = glob($ templatePath.'/*');
    $fileNameOptions = [];
    $pathLength = strlen($ templatePath);
    foreach ($fileList เป็น $filePath) {
      $fileName = substr($filePath, $pathLength + 1);
      $fileNameOptions[ชื่อไฟล์] = [
        'ชื่อไฟล์' => $ชื่อไฟล์,
        'ลิงค์' => [ 
          'ข้อมูล' => [
            '#type' => 'ลิงค์',
            '#url' => $linkPath $ชื่อไฟล์,
            '#title' => $ชื่อไฟล์,
          ]
        ]
      ];
    }

    // สร้างตาราง Select
    $form['แม่แบบ'] = [
      '#type' => 'เลือกตาราง',
      '#header' => ['filename' => 'ชื่อไฟล์', 'link' => 'Link'],
      '#options' => $fileNameOptions,
      '#empty' => t('ไม่พบไฟล์'),
      '#น้ำหนัก' => 40,
      '#js_select' => เท็จ
    ];

    คืนฟอร์ม $;

  }

  /**
   * {@inheritdoc}
   */
  ฟังก์ชั่นสาธารณะ getFormId () {
    กลับ 'my_form';
  }

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

}

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

ถ้าฉันเปลี่ยน '#พิมพ์' ของช่องลิงค์จาก 'ลิงค์' ถึง 'ช่องข้อความ' หรือ 'พื้นที่ข้อความ'คอลัมน์มีองค์ประกอบที่ฉันคาดหวัง - ชื่อเรื่องตามด้วยฟิลด์ข้อความหรือพื้นที่ข้อความ เมื่อฉันเปลี่ยน '#พิมพ์' กลับไป 'ลิงค์' (ตามที่แสดงในโค้ดด้านบน) คอลัมน์ว่างเปล่า เมื่อฉันดูแหล่งที่มาของหน้า คอลัมน์นั้นว่างเปล่า <td> แท็ก

<td></td>

มันเหมือนกับว่าฉันเปลี่ยน '#พิมพ์' ถึง 'ฟู'. นี่หมายความว่าฉันว่า 'ลิงค์' ไม่มีประเภทฟิลด์ในบริบทของแบบฟอร์มนี้ เพื่อทดสอบสิ่งนี้ ฉันพยายามปรับตัว ฉันจะรับประเภทฟิลด์แบบฟอร์มที่มีอยู่ทั้งหมดได้อย่างไร เข้ากับบริบทของ Drupal 9

$all_types = \Drupal::moduleHandler()->invokeAll('hook_elements');
\Drupal::messenger()->addMessage(json_encode($all_types));

อย่างไรก็ตาม, hook_elements() ดูเหมือนจะไม่ได้ใช้อีกต่อไป ดังนั้นจึงใช้ไม่ได้

สร้างและเรนเดอร์องค์ประกอบ แสดง 'ลิงค์' เป็นองค์ประกอบการเรนเดอร์ที่ถูกต้องใน Drupal 9.4.x ดังนั้นความเข้าใจของฉันคือควรมีอยู่ในรูปแบบที่สร้างโดยโมดูลที่กำหนดเอง

ความคิดเห็นผู้ดูแลระบบภาพรวม::buildForm() แสดงการใช้งานที่คล้ายกันมากของ '#type' => 'ลิงค์'.

การอ่านคำตอบที่มีอยู่ของฉันคือปัญหาคือไม่ได้เพิ่มคอลัมน์ใน '#หัวข้อ' อาร์เรย์ (ไม่ปรากฏในรหัสที่โพสต์)

  1. ฉันพลาดรายละเอียดง่ายๆ ในโค้ดที่ฉันโพสต์ไว้ด้านบนหรือไม่ ซึ่งเป็นสาเหตุ 'ลิงค์' ฟิลด์ว่างในขณะที่เปลี่ยน '#พิมพ์' ถึง 'ช่องข้อความ' ให้ผลตามที่คาดหวัง?
  2. มีวิธีตรวจสอบชุดที่ถูกต้องหรือไม่ '#พิมพ์' สตริงในบริบทของฉัน?
  3. ถ้า 'ลิงค์' ประเภทฟิลด์ไม่พร้อมใช้งานในบริบทของฉัน ฉันจะทำให้พร้อมใช้งานได้อย่างไร

ไม่มีการเพิ่มสิ่งใดในบันทึกของ Drupal เมื่อฉันโหลดแบบฟอร์มนี้

โพสต์คำตอบ

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