Score:0

โทเค็นแบบเชื่อมโยงสำหรับเอนทิตีแบบกำหนดเองที่อ้างอิง

ธง cn

เรามีเอนทิตีแบบกำหนดเองสองรายการ: รัฐสภา_ระยะเวลา (จะเป็นการเลือกตั้งหรือสภานิติบัญญัติก็ได้) และ รัฐสภา. ก รัฐสภา_ระยะเวลา เอนทิตีมีการอ้างอิงถึง รัฐสภา เอนทิตี ใน แบบสำรวจ โหนด เรามีฟิลด์อ้างอิงเอนทิตีสำหรับ รัฐสภา_ระยะเวลา เอนทิตีที่มีบันเดิลอยู่ สภานิติบัญญัติ (field_legislature). (เป็นเรื่องเกี่ยวกับการสำรวจความคิดเห็นที่เจ้าหน้าที่เข้าร่วม) ส่วนหนึ่งของชื่อแทนเส้นทางสำหรับ แบบสำรวจ โหนดควรเป็นเนื้อหาของ url_basis สนามจาก รัฐสภา เอนทิตี

ฉันใช้ [node:field_legislature:entity:parliament:entity:url_basis]/[node:field_legislature:entity:identifier]/โพลล์/[node:title] เป็นรูปแบบPathauto. มันเคยใช้งานได้ระยะหนึ่ง แต่มันหยุดทำงานเนื่องจาก [โหนด:field_legislature:เอนทิตี:รัฐสภา:เอนทิตี:url_basis] โทเค็น

ฉันไม่แน่ใจว่าฉันได้เปลี่ยนแปลงอะไรเพื่อให้หยุดทำงาน ใน hook_tokens() ฉันใช้รหัสต่อไปนี้

ถ้า ($type == 'parliament_period' && !empty($data['parliament_period'])) {
  /** @var \Drupal\pw_basic\Entity\ParliamentPeriod $parliamentPeriod */
  $parliamentPeriod = $data['parliament_period'];
  ถ้า ($parliament_tokens = $token_service->findWithPrefix($tokens, 'รัฐสภา')) {
    $replacements += $token_service->generate('parliament', $parliament_tokens, ['parliament' => $parliamentPeriod->getParliament()], $ตัวเลือก, $bubbleable_metadata);
  }
}

ซึ่งช่วยให้การผูกมัดเพื่อแทนที่โทเค็นใดๆ ที่เกี่ยวข้องกับ a รัฐสภา เอนทิตีเมื่อก รัฐสภา_ระยะเวลา ได้รับเอนทิตี (เช่นใน [โหนด:field_legislature:entity]). hook_tokens() ถูกเรียกใช้อย่างถูกต้องสำหรับ รัฐสภา โทเค็นเอนทิตี แต่ชื่อของโทเค็นที่ส่งไป hook_tokens() เป็น เอนทิตี:url_basis, ไม่ url_basis.

ในทางกลับกัน, [โหนด:field_legislature:หน่วยงาน:รัฐสภา:url_basis] ไม่ได้รับอนุญาตหากไม่มี เอนทิตี ส่วนหนึ่ง.

ฉันควรถอด นิติบุคคล: ส่วนหนึ่งก่อนที่ฉันจะโทร $token_service->สร้าง()สำหรับโทเค็นทั้งหมดที่ระบุ หรือมีวิธีที่ดีกว่าในการโยงโทเค็นสำหรับเอนทิตีที่กำหนดเองหรือไม่

apaderno avatar
us flag
*เอนทิตี* ไม่ควรลบออกเป็นรหัสที่จัดการโทเค็นสำหรับเอนทิตี *parliament* ที่ต้องจัดการ ไม่ใช่โทเค็นการจัดการรหัสสำหรับเอนทิตี *parliament_period* เราไม่สามารถบอกคุณได้ว่าทำไมโค้ดก่อนหน้านี้ถึงใช้งานได้และตอนนี้ใช้ไม่ได้แล้ว โดยไม่ดูโค้ดที่คุณใช้ก่อนหน้านี้และโค้ดที่คุณใช้ตอนนี้ เรายังต้องดูโค้ด `hook_tokens()` แบบเต็มด้วย ไม่ใช่เพียงไม่กี่บรรทัด
apaderno avatar
us flag
นอกจากนี้ โมดูลโทเค็นหรือโมดูลอื่นที่ใช้โทเค็นถูกถอนการติดตั้งก่อนที่โค้ดจะหยุดทำงานหรือติดตั้งหรือไม่
cn flag
ฉันสงสัยว่าทำไมคุณต้องใช้โทเค็นที่กำหนดเองสำหรับสิ่งนี้ สมมติว่า `parliament` เป็นชื่อของฟิลด์อ้างอิงเอนทิตีในประเภทเอนทิตี `parliament_period` `[node:field_legislature:entity:parliament:entity:url_basis]` จะพร้อมใช้งานโดยไม่ต้องมีโค้ดเพิ่มเติม
Tobias Krause avatar
cn flag
@Clive สมมติฐานนี้ถูกต้อง: `รัฐสภา` ที่นี่ในโทเค็นนี้เป็นชื่อฟิลด์ในเอนทิตี `parliament_period ' ซึ่งอ้างอิงถึงหน่วยงานของรัฐสภา คุณหมายความว่าสิ่งนี้ควรใช้งานได้แล้วใช่ไหม มันใช้งานได้ตามที่ฉันกล่าวไว้และฉันไม่พบการเปลี่ยนแปลงใด ๆ ดังนั้นฉันจึงสับสน ก) ทำไมจึงใช้งานได้ และ ข) ทำไมตอนนี้จึงใช้งานไม่ได้อีกต่อไป คุณบอกฉันได้ไหมว่าโมดูลโทเค็นจัดการกับการผูกมัดนี้ที่ใด
4uk4 avatar
cn flag
token.tokens.inc > [`field_tokens()`](https://git.drupalcode.org/project/token/-/blob/8.x-1.x/token.tokens.inc#L1677) - " ใช้ hook_tokens() ในนามของ field.module"
Tobias Krause avatar
cn flag
ขอบคุณ @4k4 - ฉันพบที่จริงว่าทำไมการผูกมัดไม่ทำงานอีกต่อไป ฉันเปิดปัญหาในหน้าโครงการบน drupal.org: https://www.drupal.org/project/token/issues/3228947

โพสต์คำตอบ

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