Score:-1

ฉันจะแทนที่โหนดที่แสดงด้วยเนื้อหาที่แสดงผลโดยโมดูลที่กำหนดเองได้อย่างไร

ธง de

ฉันมีเส้นทาง / แอปพลิเคชันซึ่งแสดงผลโดยโมดูลที่กำหนดเอง (ผ่านชุดรูปแบบ hook/controller/routing/twig) โดยพื้นฐานแล้วมันเป็นแอปพลิเคชั่นขนาดเล็ก

ฉันยังมีโหนด Drupal /data ซึ่งเป็นโหนด Drupal ที่มีเนื้อหาโหลดโดย Drupal

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

วิธีที่ดีที่สุดในการทำสิ่งนี้ให้สำเร็จคืออะไร

Hodba Khalaf avatar
eg flag
ในการโหลดตัวแปรก่อนที่จะแสดงผลโหนด คุณต้องใช้ HOOK_preprocess_node คุณลองแล้วหรือยัง
cn flag
เปลี่ยนเส้นทางของโหนดเป็นสิ่งที่ไม่ใช่ /data แก้ไขปัญหา.
Anton avatar
de flag
@Clive เป็นการดีที่ฉันไม่เปลี่ยนเส้นทางโหนดเพราะฉันต้องการรักษาตำแหน่งที่ใช้ในเมนู ไม่มีวิธีแทนที่มุมมองของโหนดด้วยโมดูลที่กำหนดเองหรือไม่?
Anton avatar
de flag
@HodbaKhalaf ฉันลองแล้ว แต่ไม่เห็นวิธีโหลดทุกอย่างจากโมดูลที่กำหนดเองไปยังตัวแสดงโหนด มีความคิดอย่างไรที่จะทำสิ่งนี้?
apaderno avatar
us flag
Drupal จะใช้นามแฝงของเส้นทางก่อน จากนั้นจึงใช้เส้นทางที่กำหนดจากโมดูล หากคุณต้องเพิ่มโหนดที่มี /admin/config/people/accounts เป็นชื่อแทนพาธ คุณจะไม่เห็นหน้าการตั้งค่าสำหรับบัญชีอีกต่อไป
Hodba Khalaf avatar
eg flag
@Anton ในตัวประมวลผลล่วงหน้า คุณสามารถยกเลิกการตั้งค่าเนื้อหาและตั้งค่าของคุณที่สร้างขึ้นในโมดูลแบบกำหนดเอง เช่น $variables['VARIABLE_NAME'] จากนั้นคุณสามารถกำหนดธีมด้วยไฟล์ twigหากคุณสามารถแบ่งปันโค้ดได้ บางทีฉันอาจจะให้ข้อเสนอแนะที่ดีกว่านี้แก่คุณได้
Score:1
ธง us

เนื่องจาก /data เป็นนามแฝงของเส้นทางสำหรับโหนด Drupal จึงแสดงโหนดนั้นแทนที่จะแสดงว่าตัวควบคุมที่เกี่ยวข้องกับเส้นทางนั้นส่งคืนอะไร หากคุณต้องตั้งค่านามแฝงเส้นทางของโหนดเป็น /admin/config/people/accounts Drupal จะแสดงโหนดนั้นแทนหน้าการตั้งค่าบัญชี

หากคุณต้องการเปลี่ยนอาร์เรย์การเรนเดอร์ที่ใช้สำหรับโหนด คุณต้องดำเนินการ hook_ENTITY_TYPE_view(). คุณสามารถเปรียบเทียบ $entity->id() ด้วยรหัสโหนดที่คุณต้องการเพิ่มข้อมูลในอาร์เรย์การแสดงผล

ใช้ \Drupal\Core\Entity\EntityInterface;
ใช้ \Drupal\Core\Entity\Display\EntityViewDisplayInterface;

/**
 * ใช้ hook_ENTITY_TYPE_view()
 */
ฟังก์ชัน mymodule_node_view (อาร์เรย์ &$build, EntityInterface $entity, EntityViewDisplayInterface $display, $view_mode) {
  ถ้า ($entity->id() == 3) {
    // เปลี่ยน $build
  }
}

คุณยังสามารถหา ID โหนดได้จากนามแฝงพาธ เช่น รหัสที่คล้ายกับรหัสต่อไปนี้

ใช้ \Drupal\Core\Entity\EntityInterface;
ใช้ \Drupal\Core\Entity\Display\EntityViewDisplayInterface;

/**
 * ใช้ hook_ENTITY_TYPE_view()
 */
ฟังก์ชัน mymodule_node_view (อาร์เรย์ &$build, EntityInterface $entity, EntityViewDisplayInterface $display, $view_mode) {
  $path = \Drupal::service('path_alias.manager')->getPathByAlias('/data');

  ถ้า (preg_match('/node\/(\d+)/', $path, $match)) {
    ถ้า ($entity->id() == $matches[1]) {
      // เปลี่ยน $build
    }
  }
}

ดู ฉันจะรับ ID โหนดจากนามแฝงพาธได้อย่างไร ซึ่งจะอธิบายด้วยว่าควรใช้เมื่อใด path_alias.manager หรือ เส้นทาง alias_manager บริการ.

Anton avatar
de flag
ความคิดที่ดี! ฉันสามารถโหลดเนื้อหาโมดูลที่กำหนดเองของฉันได้ที่นี่โดยเพิ่มใน $build คำถามหนึ่งที่ฉันมีสำหรับสิ่งนี้คือ: ภายใน hook_ENTITY_TYPE_view() แทนที่จะใช้ $entity->id() มีวิธีใดบ้างที่จะใช้ routing.yml ของโมดูลที่กำหนดเองเพื่อรับและเรียกเมธอดคอนโทรลเลอร์ที่เหมาะสมแบบไดนามิก มิฉะนั้นฉันจะเข้ารหัสรหัสตายตัวซึ่งให้ความรู้สึกเหมือนกับการสร้างการแทนที่ประเภท 'node--3.html.twig' และยังเข้ารหัสยากว่าตัวควบคุมและวิธีการโหลดเนื้อหามาจากอะไร
apaderno avatar
us flag
คุณสามารถรับ ID โหนดตามนามแฝงของพาธ ดังที่ฉันแสดงในคำตอบที่อัปเดต โค้ดยังคงเป็นฮาร์ดโค้ดค่า (นามแฝงพาธ) แต่การตั้งค่านามแฝงพาธเดียวกันบนไซต์ต่างๆ ได้ง่ายกว่าการรับรหัสโหนดเดียวกันสำหรับโหนดบนไซต์ต่างๆ

โพสต์คำตอบ

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