エンティティメタデータラッパー、フィールドコレクション内のフィールドコレクションを取得


7

フィールドコレクション(多次元フィールドコンテンツ)のフィールドコレクションの値を取得(および設定)したい。

これは私のコードです:

// 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');

Entity APIで行うことは可能ですか?

スクリーンショット:

スクリーンショット


xdebugのようなphpデバッガーをセットアップして使用する方法を学ぶことにより、@ user2137454を自分で利用してください。dpm()特にDrupalでは、データを渡すために多次元配列に大きく依存しているため、二度と振り返ることはありません。
クリストファー

回答:


16

はい、可能です。という名前のフィールドコレクションが含まれているコンテンツタイプがあり、そのフィールドに名前が付けられfield_collection_parentているフィールドコレクションが含まれてfield_collection_childいるとし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();

助けてくれてありがとう=)私が試したとき:$ value = $ temp-> field_top-> field_website_informations-> value(); このエラーが発生しました:未定義のプロパティ:EntityListWrapper :: $ field_website_informationsわからない...カスタムコンテンツに「field_top」という名前のフィールドコレクションが含まれています。フィールドコレクションの管理パネルで、サブコレクションフィールド「field_website_informations」を含む「フィールドトップ」を見ることができます
matthieu lopez '13 / 07/13

わかりました、フィールドfield_topは複数値フィールドです。私はそれに応じて私の答えを更新しました。
ЕлинЙ.

それはあなたの更新で大丈夫です!ReeeaaalllyyyYYYフランスの国の人に感謝!
matthieu lopez 14

それが機能してうれしい:)
линЙ。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.