Score:0

การเพิ่ม Javascript ภายใน hook_entity_type_presave() hook

ธง es

ฉันกำลังพยายามเพิ่ม Javascript ลงใน hook_entity_type_presave() hook แต่มันไม่เริ่มทำงาน

เป็นไปได้ไหมที่จะเพิ่มใน hook นี้?

ฉันพยายามไม่สำเร็จ - รหัสของฉันอยู่ด้านล่าง - และตัวอย่างนี้บน Drupal.org: https://www.drupal.org/docs/drupal-apis/javascript-api/add-javascript-to-your-theme-or-module ...อธิบายขั้นตอนการเพิ่มจาวาสคริปต์ภายในบริบทของโมดูลที่กำหนดเองอีกสองโมดูล โดยใช้ hook_element_info_alter() และ hook_page_attachments()

โมดูลของฉัน:

my_module
  my_module.libraries
  my_module.module
  my_module.info.yml
  จ
    url-parameter.js

my_module.libraries:

พารามิเตอร์ URL:
  รุ่น: 1.x  
  จส:
    js/url-parameter.js: {}
  การพึ่งพา:
    - แกน / jquery

my_module.module


ฟังก์ชัน my_module_node_presave (Drupal\node\NodeInterface $entity) {

  // โค้ดอื่นๆ ที่เกี่ยวข้องกับ presave hook ซึ่งใช้ได้ดี

  // ฉันพยายามโหลด JS ที่นี่ แต่มันไม่เริ่มทำงาน:

  $attachments['#attached']['library'][] = 'js/url-parameter.js';
  
}

js\url-parameter.js:

(ฟังก์ชัน (jQuery) {
  jQuery (เอกสาร) พร้อม (ฟังก์ชั่น () {
    แจ้งเตือน ("สวัสดี");
    console.log('โหลด');
  });
})(jQuery);

cn flag
หากคุณสามารถอัปเดตคำถามและอธิบายรายละเอียดเพิ่มเติมเล็กน้อยว่าเป้าหมายสุดท้ายของคุณคืออะไร ฉันคิดว่ามันจะช่วยได้ - คุณไม่สามารถแนบ JS ใน presave hook ได้ (แต่คุณอาจจะทำได้โดยบังคับ) แต่มันไม่ได้ทำให้ คุณควรคิดเกี่ยวกับการแนบมันที่นั่น JS ที่กำหนดเองของคุณจะใช้ได้กับบางหน้า/บริบทเท่านั้น และไม่มีการรับประกันว่าหน้า/บริบทจะอยู่ในขอบเขตทุกครั้งที่มีการบันทึกเอนทิตี ดังนั้นจึงเป็นการดีที่จะทราบว่าคุณต้องการให้เกิดอะไรขึ้น
scaffolding avatar
es flag
ขอบคุณ @Clive จุดประสงค์ของ presave hook คือการเพิ่มรูปภาพและข้อความของฮีโร่ที่สอดคล้องกันให้กับโหนดบางประเภท (เช่น หน้าเหตุการณ์ประเภทใดประเภทหนึ่งโดยเฉพาะ) ขออภัย ฉันลบตรรกะนั้นเมื่อพยายามทำให้รหัสง่ายขึ้นสำหรับคำถามนี้ ความคิดของฉันคือ: ในขณะที่ฉันเพิ่มรูปภาพและข้อความของฮีโร่ ฉันยังต้องการเพิ่มสคริปต์ไปยังโหนดประเภทเดียวกันเหล่านั้นด้วย การเพิ่ม JS ใน hook เดียวกันจะใช้งานได้ แต่ถ้าคุณมีคำแนะนำสำหรับแนวทางที่ดีกว่า โปรดส่งข่าว
cn flag
คุณอาจต้องการคิดเกี่ยวกับการแยกตรรกะนั้นออก การตั้งค่าข้อมูลโหนดเป็นงานสำหรับ presave hook แต่เนื้อหา JS เป็นของหน้าโหนด ไม่ใช่ของการดำเนินการบันทึก ดังนั้นอาจแนบแบบมีเงื่อนไขกับมุมมองโหนดแทน . มีตัวอย่างที่นี่: https://drupal.stackexchange.com/questions/231160/attach-javascript-library-and-settings-to-a-node-page คุณอาจต้องเพิ่มตรรกะพิเศษเพื่อตรวจสอบว่า เติมฟิลด์ฮีโร่แล้วแนบไลบรารี
Score:3
ธง us

hook_entity_presave() และ hook_ENTITY_TYPE_presave() ไม่ควรสันนิษฐานว่าเอนทิตีได้รับการแก้ไขโดยใช้ฟอร์ม หรือมีการแสดงเพจให้ผู้ใช้เห็น hooks เหล่านั้นยังถูกเรียกใช้เมื่อมีการสร้างเอนทิตีทางโปรแกรม เช่น ด้วยโค้ดต่อไปนี้ ซึ่งสามารถใช้ใน hook_cron() การนำไปใช้งาน

ค่า $ = [
  'ประเภท' => 'บทความ',
  'title' => 'ชื่อบทความ',
  'uid' => 1,
  'สถานะ' => จริง,
];
$node = \Drupal::entityManager()->getStorage('node')->create($values);
$node->save();

hook ที่เรียกใช้ก่อนที่เอนทิตีจะแสดงผลคือ hook_entity_view() (หรือ hook_ENTITY_TYPE_view()). โมดูลสามารถเพิ่มอาร์เรย์การแสดงผลพิเศษได้โดยใช้หนึ่งใน hooks เหล่านั้น สร้าง $เช่นกับ $build['#attached']['library'][] = 'js/url-parameter.js';.

ดังตัวอย่างโค้ด $display->getComponent() ควรใช้เพื่อตรวจสอบว่าฟิลด์เอนทิตีได้รับการตั้งค่าให้แสดง เนื่องจากผู้ใช้ที่เป็นผู้ดูแลระบบสามารถซ่อนฟิลด์จาก /admin/structure/types/manage/article/display (สำหรับ บทความ ชนิดของเนื้อหา). ตัวอย่างเช่น ด้วยการตั้งค่าต่อไปนี้ ฉันจะซ่อนฟิลด์เอนทิตีแบบกำหนดเองและฟิลด์ แท็ก สนามสำหรับ บทความ ชนิดของเนื้อหา.

ภาพหน้าจอ

ฉันจะตรวจสอบค่าของ $view_mode ส่งผ่านไปยัง hooks เหล่านั้นเนื่องจากค่านั้นบอกว่าเหตุใดโหนดจึงแสดงผล ตัวอย่างเช่น เมื่อโมดูลการค้นหาทำดัชนีโหนด $view_mode เท่ากับ 'ดัชนีการค้นหา'; เมื่อมีการเพิ่มโหนดในฟีด RSS $view_mode เท่ากับ 'rss'. ในกรณีดังกล่าว คุณอาจไม่ต้องการเพิ่มไลบรารี

scaffolding avatar
es flag
ขอบคุณ @apaderno จะลองใช้วิธีนี้ ฉันคิดว่านี่จะช่วยแก้ปัญหาได้
scaffolding avatar
es flag
แค่ยืนยันว่าสิ่งนี้ช่วยให้ฉันแก้ไขปัญหานี้ได้ ขอบคุณ @apaderno

โพสต์คำตอบ

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