it-swarm.com.de

Was ist der geeignete Weg, um Elemente aus einer Entityqueue abzurufen?

Ich hatte Probleme, API-Beispiele für die Entityqueue in Drupal 8) zu finden.

Am Ende schrieb ich eine Abfrage, um die Artikel zu erhalten.

$query = $this->database->select('entity_subqueue__items', 'esi')
  ->fields('esi', array('items_target_id'))
  ->condition('esi.bundle', $name_of_queue)
  ->orderBy('delta', 'ASC');

$nids = $query->execute()->fetchCol();

Aber ich möchte wenn möglich eine eingebaute Funktion verwenden. Wo ist die Funktion zum Abrufen von Elementen aus einer Entitätswarteschlange?

9
oknate

Bei $ sid ist Ihre Subqueue-ID angegeben:

$entity_subqueue = \Drupal::entityManager()->getStorage('entity_subqueue')->load($sid);

Lädt das Subqueue-Objekt. Sie können dies bearbeiten, um Ihre Entityqueue abzurufen oder zu aktualisieren.

So erhalten Sie die Artikel:

$items = $entity_subqueue->get('items')->getValue();

Um die Elemente zu aktualisieren, fügen Sie dem Array $ items ein weiteres Element hinzu und speichern Sie das Entitätsobjekt:

$items[] = ['target_id' => 69];

$entity_subqueue->set('items', $items);

$entity_subqueue->save();

Voila!

Sie können in der Datenbank überprüfen, ob Ihre Entitätswarteschlange aktualisiert wurde:

select * from entity_subqueue__items where bundle = :sid;

Ich möchte auch hinzufügen, dass es eine großartige Alternative zur Verwendung von entityqueue in Drupal 8: das Modul Config Pages ) gibt. Sie können damit nur Entity-Bundles erstellen Sie können dann einen beliebigen Feldtyp hinzufügen, einschließlich Entitätsreferenzfelder. Ich habe kürzlich eine Entitätswarteschlange in einem Projekt durch eine Konfigurationsseite durch ein Entitätsreferenzfeld ersetzt und die Benutzererfahrung bevorzugt.

12
oknate

Es gibt auch eine Verknüpfung zum Laden der Unterwarteschlange: \Drupal\entityqueue\Entity\EntitySubqueue::load($sid);

0
rémy