Erstellen Sie Entitäten programmgesteuert in Drupal


7

Ich habe eine Entität über das Entity Construction Kit erstellt. Anfangs wollte ich Regeln verwenden, um die neue Entität zu erstellen, aber die Entität ist feldweise und die Felder werden nicht in Regeln angezeigt (ab sofort versucht jemand, an einem Patch dafür zu arbeiten ), aber in der Zwischenzeit wollte ich eine einfache Funktion schreiben, die eine Entität erstellt, von der ich annahm, dass sie einem programmgesteuerten Erstellen eines Knotens ähnelt, aber ich bin seit ungefähr 4 Stunden dabei und habe keinen Zentimeter zugenommen. Ich habe entity_create und entity_save, aber sie machen nicht viel und ich kann keine Dokumentation dazu finden.

Was ich sehen möchte, ist, wie man eine Beispielentität aus einem Bundle erstellt, das mit eck oder durch Code erstellt wurde, der in ein Feld eingefügt wird.

Vielen Dank

Bearbeiten: Als letztes muss ich herausfinden, wie der Name der Felder angegeben wird, die an die Entität angehängt sind, damit ich auch Werte für diese eingeben kann.

$values = array('uid' => 1, 'field_receipt_prod_ref' => 1, 'type' => 'receipt');        
$new_ent = entity_create('receipt', $values)->save();

Antworten:


15

Das meiste von dem, was du hast, sieht nicht schlecht aus. Das Wichtigste bei Feldern, die Ihnen fehlen, ist, dass sie eine Sprache haben, dass sie mehrwertig sein können und dass der Wert im Allgemeinen in einem Unterschlüssel 'Wert' gespeichert ist. Ich gehe davon aus, dass das ref-Feld eine Nodereferenz ist, was bedeutet, dass es tatsächlich mit nidstatt gespeichert wird value.

Um zu sehen, wie dies strukturiert ist, können Sie am einfachsten das DevelModul installieren und auf der DevelRegisterkarte die Struktur anzeigen. Ich bin mir nicht sicher, ob dies bei ECK-Entitäten angezeigt wird, aber bei Knoten.

Versuche dies:

$new_ent = entity_create('receipt', array(
  'uid' => 1,
  'type' => 'receipt', //bundle
  'field_receipt_prof_ref' => array(      
    LANGUAGE_NONE => array(
      0 => array(
        'nid' => 1,
      ),
    ),
  ),
))->save();

3
Ich wünschte, ich könnte dies in Punkt 72 eingeben. Vielen Dank !!!!!!!!!!!!!! : D
Antonio Torres

27

Der einfachere Ansatz ist mit Hilfe von entity_metadata_wrapper().

$e = entity_create($entityType, array('type' => $bundleName));
$ew = entity_metadata_wrapper($entityType, $e);
$ew->field_name->set('value');
$ew->save();
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.