Wie lade ich eine Feldsammlung von einem Knoten?


72

Ich habe einen Knoten, auf dem sich einige Feldsammlungen befinden.

Wenn ich mir die node_load()Ausgabe anschaue , sehe ich:

[field_rich_text_group] => Array
        (
            [und] => Array
                (
                    [0] => Array
                        (
                            [value] => 6
                        )

                    [1] => Array
                        (
                            [value] => 7
                        )

                    [2] => Array
                        (
                            [value] => 8
                        )

                )

        )

Welche API-Funktion kann ich verwenden, um die in der Auflistung enthaltenen Felddaten mit einer Entity-ID von 6, 7, 8 usw. tatsächlich zu laden?

Antworten:


88

Doh! Ich hätte in das Feldsammelmodul schauen sollen:

entity_load('field_collection_item', array($item_id))

1
Ich suche nach einer ähnlichen Lösung. Wie schreibt man die Ausgabe und platziert sie in einem gerenderten Array? Danke
Swan

Ich habe eine Reihe von benutzerdefinierten Funktionen geschrieben, um das Layout für diese Elemente zu erstellen. Leider geben sie HTML zurück, keine darstellbaren Arrays. Es wäre schön, renderbare Arrays zu verwenden, aber ich bin mir nicht ganz sicher (ich bin mir sicher, dass es einen guten Grund dafür gibt, ich habe nur keine Erklärung gefunden, die mitschwingt).
Justin

Vielen Dank. Feldkollektion ist in der Tat nützlich, um Formulare und Ausgaben zu vereinfachen, aber wenn es um benutzerdefinierte Abfragen geht, muss ich anscheinend in die verschachtelten Arrays eintauchen, selbst mit entity_metadata_wrapper.
Schwan

Oh yah, ich habe Wrapper geschrieben, die die dichten Arrays in das verwandeln, was ich brauche.
Justin

entity_load () gibt eine Menge von Knoten zurück, die spezifisch für "entity" sind, und zusammen mit diesen erhalten wir auch die benutzerdefinierten Felder. Wie unterscheiden wir die Benutzerfelder von den Feldern einer Entität? Irgendwelche Hinweise?
Raj Pawan Gumdal

38

Es gibt auch eine Wrapper-Funktion, die denselben Trick ausführt:

field_collection_item_load($id, $reset = FALSE)

oder laut Kommentar verwenden:

field_collection_item_load_multiple($ids = array(), $conditions = array(), $reset = FALSE)

um mehrere Sammlungen zu laden (z. B. wenn Sie eine Schaltfläche Weitere hinzufügen haben).


5
Gemäß der obigen Antwort von @ vasiliy-grotov können Sie auch verwenden field_collection_item_load_multiple($ids = array(), $conditions = array(), $reset = FALSE), um mehrere Sammlungen zu laden (zum Beispiel, wenn Sie ein "Add more" -Btn haben).
Mediaashley

21

field_collection_field_get_entity () sollte verwendet werden, um die korrekte Revision zu laden.

Anwendungsbeispiel:

$node = node_load(1);
$items = field_get_items('node', $node, 'field_fc');
foreach ($items as $item) {
 $fc = field_collection_field_get_entity($item);
 // Do something.
}

1
Wie werden die Datumsfelder in der Feldsammlung zugewiesen? Ich habe folgendes benutzt: $ item = field_collection_field_get_entity ($ itemid); print $ item-> field_course_starts_on ['und'] [0] ['safe_value']; Es werden jedoch keine Werte gedruckt.
Harikris

Danke dafür. Ich wurde konstant Warnung: array_flip (): Kann nur STRING- und INTEGER-Werte spiegeln! mit ... item_load () und dies löste das Problem.
Naidim

11

Sie können entity_metadata_wrapperaus dem Entity-API- Modul Folgendes verwenden :

$node_wrapper = entity_metadata_wrapper('node', $node);
$field_collection = $node_wrapper->field_rich_text_group[0]->value();
dpm($field_collection);

Sie können auch alle Sammlungen durchlaufen:

$node_wrapper = entity_metadata_wrapper('node', $node);
foreach ($node_wrapper->field_rich_text_group as $field_collection_wrapper) {
  $field_collection = $field_collection_wrapper->value();
  dpm($field_collection);
}
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.