Avem două entități personalizate: perioada_parlamentului (poate fi o alegere sau o legislatură) și parlament. A perioada_parlamentului entitatea are o referință la a parlament entitate.
Într-o Sondaj nod, avem un câmp de referință de entitate pentru perioada_parlamentului entități al căror pachet este legislatură (domeniu_legislativ). (Este vorba despre sondaje la care participă deputații.)
O parte a alias-ului de cale pentru Sondaj nodurile ar trebui să fie conținutul unui url_basis câmp din parlament entitati.
obisnuiam [nod:field_legislature:entity:parliament:entity:url_basis]/[node:field_legislature:entity:identifier]/poll/[node:title] ca model Pathauto. A funcționat de ceva timp, dar a încetat să funcționeze din cauza [nod:field_legislature:entity:parliament:entity:url_basis] jeton.
Nu sunt sigur ce am schimbat ca să nu mai funcționeze. În hook_tokens()
implementare Am folosit următorul cod.
if ($tip == 'perioada_parlamentului' && !gol ($date['perioada_parlamentului'])) {
/** @var \Drupal\pw_basic\Entity\ParliamentPeriod $parliamentPeriod */
$parliamentPeriod = $date['perioada_parlamentului'];
if ($jetoane_parlamentului = $serviciu_token->findWithPrefix($jetoane, 'parlamentul')) {
$replacements += $token_service->generate('parlamentul', $parliament_tokens, ['parlamentul' => $parliamentPeriod->getParliament()], $options, $bubbleable_metadata);
}
}
Acest lucru permite înlănțuirea pentru a înlocui orice jetoane legate de a parlament entitate când a perioada_parlamentului este dată entitatea (cum ar fi în [nod:field_legislature:entity]). hook_tokens()
este corect invocat pentru parlament jetoane de entitate, dar numele jetonului către care este trimis hook_tokens()
este entity:url_basis, nu url_basis.
Pe de altă parte, [nod:field_legislature:entity:parliament:url_basis] nu este permis, fără entitate parte.
Ar trebui să elimin entitate: parte înainte să sun $token_service->generate()
pentru toate jetoanele identificate sau există o modalitate mai bună de a înlănțui jetoanele pentru entitățile personalizate?