Puncte:0

Abonatul evenimentului Feeds nu mai funcționează

drapel cn

Din anumite motive, abonații la evenimentele mele de feed-uri tocmai au încetat să mai funcționeze.

Codul meu arată așa, dpm-ul pentru depanare nu se declanșează niciodată, așa că cred că funcția nu este rulată.

Nu pot să-mi dau seama ce s-a schimbat.


spațiu de nume Drupal\partshub_feeds_modifications\EventSubscriber;

utilizați Drupal\feeds\Event\EntityEvent;
utilizați Drupal\feeds\Event\FeedsEvents;
utilizați Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
 * Reacționează la evenimentele fluxurilor pentru a modifica proprietățile feedului.
 */
clasa FeedsSubscriber implementează EventSubscriberInterface {

  /**
   * {@inheritdoc}
   */
  funcție publică statică getSubscribedEvents() {
    $evenimente = [];
    $events[FeedsEvents::PROCESS_ENTITY_PRESAVE][] = 'presalvare';
    $events[FeedsEvents::PROCESS_ENTITY_POSTSAVE][] = 'postsalvare';

    returnează $evenimente;
  }

  /**
   * Acționează pentru a preveni o entitate.
   *
   * @param Drupal\feeds\Event\EntityEvent $event
   * Evenimentul de alimentare.
   */
  funcția publică presave(EntityEvent $event) {
    dpm($eveniment);
    // Obține obiectul feed.
    $feed = $event->getFeed();
    // Obține entitatea pe care se operează.
    if ($feed->tip->entity->id() === „părți”) {
      $entity = $event->getEntity();
      // Obține entitatea neschimbată.
      $unchanged_entity = \Drupal::entityTypeManager()
        ->getStorage('nodul')
        ->loadUnchanged($entity->id());
      // Verificați dacă entitatea este nouă.
      dacă (!$entity->isNew()) {
        // Numai dacă partea nu este nouă, verificați valorile.
        if ($feed->tip->entity->label() === „Piese”) {
          if ($entity->get('titlu')->value === 'gol') {
            $entity->get('title')->value = $unchanged_entity->get('title')->value;
          }

          // Montarea piesei/face câmpul.
          if ($entity->get('field_make')->isEmpty()) {
            $makes = $unchanged_entity->get('field_make')->referencedEntities();
            foreach ($makes as $index => $term) {
              $tid = $term->id();
              dacă ($index == 0) {
                $entity->set('field_make', $tid);
              }
              else {
                $entity->get('field_make')->appendItem([
                  'target_id' => $tid,
                ]);
              }
            }
          }


          // Cod grup de piese.
          if ($entity->get('field_group_code')->isEmpty()) {
            $coduri = $unchanged_entity->get('field_group_code')
              ->referencedEntities();
            foreach ($coduri ca $index => $cod) {
              $cod_id = $cod->id();
              dacă ($index == 0) {
                $entity->set('field_group_code', $code_id);
              }
              else {
                $entity->get('field_group_code')->appendItem([
                  'target_id' => $code_id,
                ]);
              }
            }
          }

          // Referințe încrucișate.
          if ($entity->get('field_cross_references')->isEmpty()) {
            $referințe = $unchanged_entity->get('field_cross_references')
              ->referencedEntities();
            foreach ($referințe ca $index => $referință) {
              $reference_id = $reference->id();
              dacă ($index == 0) {
                $entity->set('field_cross_references', $reference_id);
              }
              else {
                $entity->get('field_cross_references')->appendItem([
                  'target_id' => $reference_id,
                ]);
              }
            }
          }
        }
        elseif ($feed->tip->entity->label() === 'Atribute fizice') {
          if ($entity->get('titlu')->value === 'gol') {
            $entity->get('title')->value = $unchanged_entity->get('title')->value;
          }
          // Greutate parțială.
          if ($entity->get('field_weight')->isEmpty()) {
            $entity->get('field_weight')->value = $unchanged_entity->get('field_weight')->value;
          }
          // Înălțimea părții.
          if ($entity->get('field_height')->isEmpty()) {
            $entity->get('field_height')->value = $unchanged_entity->get('field_height')->value;
          }
          // Lățimea părții.
          if ($entity->get('field_width')->isEmpty()) {
            $entity->get('field_width')->value = $unchanged_entity->get('field_width')->value;
          }
          // Adâncimea părții.
          if ($entity->get('field_depth')->isEmpty()) {
            $entity->get('field_depth')->value = $unchanged_entity->get('field_depth')->value;
          }
        }
      }
    }
  }

  /**
   * Acționează pentru a preveni o entitate.
   *
   * @param Drupal\feeds\Event\EntityEvent $event
   * Evenimentul de alimentare.
   */
  funcția publică postsave(EntityEvent $event) {
    $feed = $event->getFeed();
    $feeds = ['oe_references', 'sub_components', 'dimensions'];
    $id = $feed->tip->entity->id();
    if (in_array($id, $feeds)) {
      $entity = $event->getEntity();
      $nume_câmp_părinte = $entitate->nume_câmp_părinte->valoare;
      $parent_id = $entity->parent_id->valoare;
      $vid = \Drupal::entityTypeManager()->getStorage('node')->getLatestRevisionId($parent_id);
      $part = \Drupal::entityTypeManager()->getStorage('node')->loadRevision($vid);
      $paragraph_references = $part->get($parent_field_name)->referencedEntities();
      $paragraph_references_id = [];
      dacă ($paragraph_references) {
        foreach ($paragraph_references ca $paragraph_reference) {
          $paragraph_references_id[] = $paragraph_reference->id();
        }
      }
      if (!in_array($entity->id(), $paragraph_references_id)) {
        $câmpuri = [
          „field_oe_references”, „field_sub_components_”, „field_dimensions”
        ];
        if (în_array($nume_câmp_părinte, $câmpuri)) {
          dacă ($parte) {
            $part->{$parent_field_name}[] = $entity;
            $part->salvare();
          }
        }
      }
    }
  }

}

Am și o definiție a serviciului după cum urmează.

Servicii:
  # Numele acestui serviciu.
  parthsub_feeds_modifications_events_subscriber:
    # Clasa de abonați la eveniment care va asculta evenimentele.
    clasa: Drupal\partshub_feeds_modifications\EventSubscriber\FeedsSubscriber
    # Etichetat ca event_subscriber pentru a înregistra acest abonat cu serviciul event_dispatch.
    Etichete:
      - { nume: event_subscriber }
drapel cn
Modulul personalizat cu acest cod este activat, nu?
drapel cn
da :-) atât de ciudat, deoarece totul a funcționat înainte, am verificat toate elementele de bază, am șters memoria cache etc. M-am uitat la câteva exemple și am văzut câteva nume de servicii cu . așa că am încercat să schimb și numele serviciului în `parthsub_feeds_modifications.events_subscriber`, dar nici asta nu funcționează.
Puncte:0
drapel cn

Niciun răspuns la aceasta, primeam erori de validare înainte ca presava să fie declanșată, ceea ce înseamnă că acest cod nu s-a declanșat niciodată.

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.