เรามีเอนทิตีแบบกำหนดเองสองรายการ: รัฐสภา_ระยะเวลา (จะเป็นการเลือกตั้งหรือสภานิติบัญญัติก็ได้) และ รัฐสภา. ก รัฐสภา_ระยะเวลา เอนทิตีมีการอ้างอิงถึง รัฐสภา เอนทิตี
ใน แบบสำรวจ โหนด เรามีฟิลด์อ้างอิงเอนทิตีสำหรับ รัฐสภา_ระยะเวลา เอนทิตีที่มีบันเดิลอยู่ สภานิติบัญญัติ (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->สร้าง()
สำหรับโทเค็นทั้งหมดที่ระบุ หรือมีวิธีที่ดีกว่าในการโยงโทเค็นสำหรับเอนทิตีที่กำหนดเองหรือไม่