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

matthieu lopez
quelle
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();
Елин Й.
quelle
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
Schön,