Score:0

โมดูล Linkit - ชี้แอตทริบิวต์ชื่อลิงก์ไปยังฟิลด์ที่กำหนดเอง มีตะขอไหม

ธง us

ปัจจุบัน โมดูลลิงคิต ส่งลิงค์ของ ชื่อ แอตทริบิวต์โดยการดึงโหนดที่เกี่ยวข้อง ชื่อ สนาม.

เราต้องการให้ชี้ไปยังฟิลด์อื่นในโหนด

เราจะบรรลุสิ่งนี้ได้อย่างไร?

ฉันมองเข้าไป ตัวแก้ไขโมดูลลิงก์ขั้นสูงแต่ฉันต้องการให้สิ่งนี้เป็นไปโดยอัตโนมัติ และฟิลด์ที่กำหนดเองของฉันจะเปลี่ยนไปตามประเภทเนื้อหา

อาจมีคนมีความคิดเบ็ด?

Score:3
ธง cn

มี (อย่างน้อย) 2 ตัวเลือก:

  1. เขียนปลั๊กอินตัวกรองแบบกำหนดเอง โดยอ้างอิงจาก LinkitFilter ปลั๊กอินที่มาพร้อมกับโมดูล Linkit ใน กระบวนการ() วิธีการ ที่ชื่อถูกตั้งค่าอยู่ในขณะนี้ แนะนำตรรกะของคุณเองเพื่อตั้งค่าฟิลด์ชื่อแทนที่มีอยู่ $entity->label().

    วิธีนี้มีประโยชน์ในการอัปเดตอัตโนมัติเมื่อชื่อโหนดอ้างอิงเปลี่ยนแปลง แต่หมายความว่าคุณจะต้องดูแลตัวกรองของคุณควบคู่ไปกับการเผยแพร่โมดูลของ Linkit เดอะ กระบวนการ() วิธีการทำอะไรได้มากกว่าแค่การตั้งชื่อ และคุณสมบัติใหม่/การแก้ไขจุดบกพร่องในโมดูลจะต้องรวมอยู่ในโค้ดของคุณ

  2. เปลี่ยนรูปแบบกล่องโต้ตอบลิงก์ (เช่น Editor Advanced Link ทำ) และใส่ชื่อลงในมาร์กอัปในขณะที่ยังคงอยู่ในเครื่องมือแก้ไข วิธีนี้ค่อนข้างง่ายกว่าและบำรุงรักษาน้อยกว่า แต่ ชื่อ แอตทริบิวต์จะไม่อัปเดตเมื่อชื่อโหนดไม่ จะอัปเดตเมื่อมีการบันทึกแบบฟอร์มการโต้ตอบลิงก์อีกครั้งเท่านั้น

    หากยอมรับได้ นี่เป็นตัวอย่างคร่าวๆ แต่ใช้งานได้ในการเริ่มต้น:

    ใช้ Drupal\Core\Form\FormStateInterface;
    ใช้ Drupal\node\NodeInterface;
    
    ฟังก์ชัน custom_module_form_editor_link_dialog_alter(&$form, FormStateInterface $form_state, $form_id) {
      array_unshift($form['#validate'], '_custom_module_link_dialog_validate');
    }
    
    ฟังก์ชัน _custom_module_link_dialog_validate (อาร์เรย์ &$form, FormStateInterface $form_state) {
      $attributes = $form_state->getValue('แอตทริบิวต์');
    
      ถ้า (isset($attributes['data-entity-type']) && $attributes['data-entity-type'] == 'node') {
        $node = \Drupal::service('entity.repository')
          ->loadEntityByUuid('node', $attributes['data-entity-uuid']);
        ถ้า ($ โหนดอินสแตนซ์ของ NodeInterface) {
          $override_title = '';
          สวิตช์ ($node->getType()) {
            กรณี 'หน้า':
              $override_title = $node->field_title_override->value;
              หยุดพัก;
            กรณี 'foo':
              // ...
              หยุดพัก;
          }
          ถ้า (strlen($override_title)) {
            $form_state->setValue(['attributes', 'title'], $override_title);
          }
        }
      }
    }
    
us flag
ขอบคุณสำหรับสิ่งเหล่านี้!
us flag
ขอบคุณสำหรับสิ่งเหล่านี้! และสำหรับการแก้ไขคำถามของฉันเพื่อให้ชัดเจนขึ้น เราต้องการสิ่งนี้เพื่อใช้กับส่วนหน้าเท่านั้น และเนื้อหาบางประเภทเท่านั้นที่จะมีช่องนี้ มี hook ในโมดูล Linkit ที่อนุญาตให้ตัวกรองตรวจสอบว่าโหนดมีฟิลด์บางฟิลด์ที่มีอยู่และเติมและแทนที่ทันทีในส่วนหน้าหรือไม่
cn flag
No, unfortunately it’s hard coded into the middle of the process method at the moment. You would need to replicate the whole filter for that approach

โพสต์คำตอบ

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