Puncte:0

Jetoane înlănțuite pentru entitățile personalizate la care se face referire

drapel cn

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?

apaderno avatar
drapel us
*entitate* nu trebuie eliminată.Codul care gestionează jetoanele pentru entitatea *parlamentul* este cel care trebuie să se ocupe de el, nu codul care gestionează jetoanele pentru entitatea *parliament_period*. Nu vă putem spune de ce codul funcționa înainte și nu funcționează acum, fără a vedea codul pe care l-ați folosit înainte și codul pe care îl utilizați acum. De asemenea, ar trebui să vedem codul complet `hook_tokens()`, nu doar câteva linii.
apaderno avatar
drapel us
De asemenea, modulul Token sau un alt modul care implementează token-uri a fost dezinstalat înainte ca codul să nu mai funcționeze sau a fost instalat?
drapel cn
Mă întreb de ce aveți nevoie de un simbol personalizat pentru asta? Presupunând că `parlamentul` este numele unui câmp de referință al unei entități de pe tipul de entitate `parliament_period`, `[node:field_legislature:entity:parliament:entity:url_basis]` ar fi deja disponibil fără niciun cod suplimentar
Tobias Krause avatar
drapel cn
@Clive Această ipoteză este corectă: `parlamentul` aici în acest simbol este un nume de câmp în entitatea `parliament_period' care face referire la o entitate parlamentului. Deci vrei să spui că asta ar trebui să funcționeze deja? A funcționat așa cum am menționat și nu am găsit nicio modificare, așa că m-am încurcat a) de ce a funcționat și b) de ce acum nu mai funcționează. Îmi puteți spune unde se ocupă modulul Token de această înlănțuire?
4uk4 avatar
drapel cn
token.tokens.inc > [`field_tokens()`](https://git.drupalcode.org/project/token/-/blob/8.x-1.x/token.tokens.inc#L1677) - " Implementează hook_tokens() în numele field.module."
Tobias Krause avatar
drapel cn
Mulțumesc @4k4 - Am găsit de fapt locul pentru care înlănțuirea nu mai funcționează. Am deschis o problemă în pagina proiectului de pe drupal.org: https://www.drupal.org/project/token/issues/3228947

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.