Score:0

วิธีใช้ hook_node_insert เพื่อตั้งค่าสถานะโหนดของประเภทเนื้อหาเฉพาะโดยอัตโนมัติ

ธง pe

โหนดทั้งหมดของประเภทเนื้อหาเดียวในโครงการของฉันจำเป็นต้องได้รับการแฟล็กโดยอัตโนมัติ (โดยโมดูลแฟล็ก) เมื่อสร้างขึ้น ฉันทราบดีว่าอาจมีวิธีที่จะทำสิ่งนี้ให้สำเร็จโดยใช้โมดูลกฎ แต่ฉันกำลังพยายามสร้างโมดูลที่กำหนดเองครั้งแรกเพื่อทำสิ่งนี้ เพราะก) ฉันไม่คิดว่าฉันจะต้องใช้กฎสำหรับ สิ่งอื่นใดในโครงการนี้และ b) ต้องการทำให้เท้าของฉันเปียกในการสร้างโมดูลที่กำหนดเอง (ฉันมีโมดูล 'hello world' พื้นฐานที่ใช้งานได้)

คำขอการสนับสนุนในโมดูลแฟล็กดูเหมือนจะเป็นวิธีง่ายๆ ในการแฟล็กโหนดโดยอัตโนมัติ แต่สำหรับฉันแล้วดูเหมือนว่าจะทำเช่นนี้กับโหนดของเนื้อหาทุกประเภท https://www.drupal.org/project/flag/issues/3030288

เพื่อความสะดวก นี่คือโค้ดที่นั่น สำหรับค่าสถานะที่เรียกว่าบุ๊กมาร์ก...

ฟังก์ชัน your_module_node_insert (Drupal\Core\Entity\EntityInterface $entity){
 $flag = \Drupal::entityTypeManager()->getStorage('flag')->load('bookmark');
 \Drupal::service('flag')->flag($flag, $entity);
}

หน้า API สำหรับ hook นี้ดูเหมือนจะไม่บอกสิ่งที่ฉันจำเป็นต้องรู้ (https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Entity%21entity.api.php/function/hook_ENTITY_TYPE_insert/9.0.x)

คำถาม: นี่เป็นตะขอที่เหมาะสมสำหรับความต้องการนี้หรือไม่? ถ้าเป็นเช่นนั้น ฉันจะจำกัดเนื้อหาเฉพาะประเภทได้อย่างไร

sonfd avatar
in flag
ดู[เอกสารโหนด](https://api.drupal.org/api/drupal/core%21modules%21node%21src%21Entity%21Node.php/class/Node/9.2.x) คุณสามารถรับประเภทเนื้อหา (เรียกว่าบันเดิล) ของโหนดที่มี `$entity->bundle()` ซึ่งเป็นแบบทั่วไปและจะใช้ได้กับเอนทิตีเนื้อหาทั้งหมด
sea26.2 avatar
om flag
ลิงค์นี้จะช่วยได้ไหม https://drupal.stackexchange.com/questions/185442/how-can-i-programmatically-create-a-node
pe flag
สิ่งเหล่านี้มีประโยชน์สำหรับการเติมช่องว่าง ด้วยพื้นฐานการทำงานกับออบเจกต์ คลาส เมธอด ฯลฯ ที่แทบไม่มีพื้นฐาน ฉันจำเป็นต้องเข้าใจไวยากรณ์เป็นส่วนใหญ่ วิธีที่ถูกต้องคือทำงานผ่านหลักสูตรตั้งแต่พื้นฐานแนวคิดขึ้นไป แต่ใช่ การมองหาทางลัด ตัวอย่างโค้ดเพิ่มเติมใด ๆ จะดีมาก บางคนจะใกล้เคียงกับสิ่งที่ฉันพยายามทำ ฉันสามารถมองหารูปแบบ แล้วลองผิดลองถูกตลอดทางที่เหลือ อาจจะ.
pe flag
ฉันได้อัปเดตคำถามตามการทดสอบล่าสุดของฉันแล้ว
Jaypan avatar
de flag
คุณได้กำหนดค่าเอนทิตีหรือไม่ https://git.drupalcode.org/project/flag/-/tree/8.x-4.x#configuration ถ้าไม่ แสดงว่าคุณอาจวินิจฉัยปัญหาผิดพลาด ลองเรียกใช้ update.php
pe flag
ขอบคุณ. หลังจากการขุดค้นเพิ่มเติม ฉันพบว่าโค้ดของฉันใช้งานได้ ดังนั้นฉันจึงย้ายไปที่คำตอบ เหตุผลที่ฉันคิดว่ามันล้มเหลวคือแฟล็กที่เกี่ยวข้องมีช่องอ้างอิงเอนทิตีและแน่นอนว่ารหัสนี้ไม่ได้ตั้งค่าฟิลด์นั้น มันตั้งธงแม้ว่า
Score:0
ธง pe

มันใช้งานได้สำหรับฉัน ...

'rf_tweaks' คือชื่อเครื่องโมดูล 'research_note' คือประเภทเนื้อหาของโหนด และ 'research_item' คือชื่อของแฟล็ก

ใช้ Drupal\node\Entity\Node;

ฟังก์ชัน rf_tweaks_node_insert (โหนด $node) {
  ถ้า ($node->bundle() == 'research_note'){
 $flag = \Drupal::entityTypeManager()->getStorage('flag')->load('research_item');
 \Drupal::service('flag')->flag($flag, $node);
}
}

เพื่อประโยชน์สำหรับผู้สร้างโมดูลครั้งแรกรายอื่น สิ่งนี้จะอยู่ในไฟล์ rf_tweaks.module และไฟล์จะขึ้นต้นด้วย <?php จำเป็นในสิ่งเหล่านั้น

pe flag
มันใช้งานได้ แต่ตอนนี้มันไม่ใช่แล้ว ข้อผิดพลาด... "แฟล็กใช้ไม่ได้กับบันเดิลของเอนทิตี ใน Drupal\flag\FlagService->flag() (บรรทัดที่ 294 ของ ...modules/contrib/flag/src/FlagService.php)" ตามด้วย "Drupal\Core\Entity\EntityStorageException: แฟล็กนี้ใช้ไม่ได้กับบันเดิลของเอนทิตี ใน Drupal\Core\Entity\Sql\SqlContentEntityStorage->save() (บรรทัดที่ 810 ของ ...core/lib/Drupal/Core /Entity/Sql/SqlContentEntityStorage.php)"
pe flag
ยังคงใช้งานได้จริง แต่ต้องแน่ใจว่าประเภทเนื้อหายังคงเปิดใช้งานอยู่ในการกำหนดค่าสำหรับแฟล็กนั้น นี่เป็นเพราะโมดูลเรียกแฟล็ก API (หรือดังนั้นฉันจึงถูกชักนำให้เข้าใจ)

โพสต์คำตอบ

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