Puncte:0

EntitySubqueue save() lucrează numai cu die() după el

drapel ca

Încerc să adaug automat un articol la o coadă secundară la salvare. Și din anumite motive, funcționează doar dacă includ a muri() după aceea.

Acest lucru adaugă noul nod la coadă

funcția custom_module_entity_insert(EntityInterface $entity) {
  ...
  $subcoada = EntitySubqueue::load($entityqueue_id);
  $subcoada->addItem($entity)->save();
  a muri();
}

Acest lucru NU adaugă noul nod la coadă

funcția custom_module_entity_insert(EntityInterface $entity) {
  ...
  $subcoada = EntitySubqueue::load($entityqueue_id);
  $subcoada->addItem($entity)->save();
}

Am încercat să pun declarații de somn și nu reușesc să funcționeze fără a muri(), care rupe pagina după salvare, evident. Nu există mesaje utile în jurnalul de erori. Elementul se salvează, pur și simplu nu este adăugat la coadă fără a muri().

Ai vreo idee?

Aceasta este funcția mea de lucru (și sparge pagina)

/**
 * Implementează hook_entity_insert().
 */
funcția custom_module_entity_insert(EntityInterface $entity) {
  // Vă faceți griji doar pentru entitățile care pot fi câmpate.
  if ($entity instanceof FieldableEntityInterface) {
    if ($entity instanceof NodeInterface &&
        in_array($entity->getType(), ['podcast','video','post'])) {
      automatAddToEntityqueue($entity);
    }
  }
}

funcția automatAddToEntityqueue(EntityInterface $entity) {
  $entity_queue_type_mapping = array(
    'podcast' => 'totul_altul_podcast',
    'video' => 'totul_altfel_video',
    'post' => 'toate_altele_postări'
  );
  foreach ($entity_queue_type_mapping ca $type => $entityqueue_id) {
    if ($entity instanceof NodeInterface && $type == $entity->getType()) {
      /** @var \Drupal\entityqueue\EntitySubqueueInterface $subqueue */
      $subcoada = EntitySubqueue::load($entityqueue_id);
      if (method_exists($subqueue, 'addItem')) {
        $subcoada->addItem($entity)->save();
        a muri();
      }
    }
  }
}
MrD avatar
drapel cn
MrD
Asta înseamnă că aveți un proces în buclă. Lăsați să verificați mai multe condiții pentru a opri procesul de buclă.
ProGrammar avatar
drapel ca
Salvează din nou entitatea după ce o adaugă în subcoada? Ca și cum salvează și o referință la coada de pe entitate? Deși actualizările la noduri nu ar trebui să declanșeze din nou hook_entity_insert... Această eroare mi-a luat mult timp să-mi dau seama.
ProGrammar avatar
drapel ca
Actualizare: am adăugat funcția mea completă.
MrD avatar
drapel cn
MrD
Verificați variabila $entity_queue_type_mapping, încercați doar cu elementul „podcast” => „everything_else_podcast” și eliminați line die().
ProGrammar avatar
drapel ca
Domnule nu... nici nu merge.
berliner avatar
drapel bd
Ați verificat dacă există alte module instalate care implementează `hook_entity_insert` (sau cârlige similare), care ar putea interfera? Deoarece `die()` pur și simplu întrerupe execuția codului, nu se limitează la funcția dvs. curentă, dar împiedică, de asemenea, rularea oricărui cod după invocarea hook, așa că m-aș uita acolo.

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.