Entity Metadata Wrapper, Feldsammlung in Feldsammlung abrufen


7

Ich möchte den Wert einer Feldsammlung in einer Feldsammlung (mehrdimensionaler Feldinhalt) abrufen (und danach festlegen).

Das ist mein Code:

// The node is a custom content.

// I get the list of first collections fields.
$temp = field_collection_get($node,'field_top');
// Shows the structure you can see below in the screenshot.
dpm($temp->value()[0]);

// Now, I want to get the value of field_website_informations.
// I've tried several ways but I couldn't find the right way.
// The following line returns an error.
$testage = entity_metadata_wrapper($temp->value()[0], 'field_website_informations');

Ist es möglich, mit der Entity-API zu arbeiten?

Der Screenshot:

Der Screenshot


Tun Sie sich selbst einen Gefallen @ user2137454, indem Sie lernen, wie Sie einen PHP-Debugger wie xdebug einrichten und verwenden. Sie werden nie wieder auf etwas zurückblicken dpm(), insbesondere in Drupal, das stark auf mehrdimensionale Arrays angewiesen ist, um Daten weiterzugeben.
Christopher

Antworten:


16

Ja, es ist möglich. Angenommen, Sie haben einen Inhaltstyp mit einer Feldsammlung mit dem Namen field_collection_parent, in der eine Feldsammlung mit dem Namen field_collection_childund einem Feld mit dem Namen benannt ist field_child.

// First you need to wrap the node with entity_metadata_wrapper
$node_wrapper = entity_metadata_wrapper('node', $node);

// To get the value of field_child:
$value = $node_wrapper
           ->field_collection_parent
           ->field_collection_child
           ->field_child
           ->value();

// UPDATE: If a field accepts multiple values, treat it like an array
// The following line would get the first value of field_collection_child in the 
// first field_collection_parent.
$value = $node_wrapper
           ->field_collection_parent[0]
           ->field_collection_child[0]
           ->value();

// To set/modify the value of field_child
$node_wrapper
  ->field_collection_parent
  ->field_collection_child
  ->field_child
  ->set('Some new value');

// To save the node after modifying
$node_wrapper->save();

Danke für die Hilfe =) Wenn ich versuche: $ value = $ temp-> field_top-> field_website_informations-> value (); Ich erhalte den folgenden Fehler: Undefinierte Eigenschaft: EntityListWrapper :: $ field_website_informations Ich verstehe nicht ... Mein benutzerdefinierter Inhalt enthält eine Feldsammlung mit dem Namen "field_top". Im Admin-Bereich für die Feldsammlung kann ich das "Feld oben" sehen, das das Untersammlungsfeld "field_website_informations" enthält
matthieu lopez

Ok, wie es scheint, ist das Feld field_topein mehrwertiges Feld. Ich habe meine Antwort entsprechend aktualisiert.
Елин Й.

Es ist in Ordnung mit Ihrem Update! ReeeaaalllyyyYYY danke Kerl aus dem französischen Land!
Matthieu Lopez

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.