ノードからフィールドコレクションを読み込むにはどうすればよいですか?


72

いくつかのフィールドコレクションを持つノードがあります。

node_load()出力を見ると、次のことがわかります。

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

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

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

                )

        )

entity_idが6、7、8などのコレクションに含まれるフィールドデータを実際にロードするには、どのAPI関数を使用できますか?

回答:


88

ど!フィールドコレクションモジュールを確認する必要がありました。

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

1
同様のソリューションを探しています。出力をどのように書き込み、レンダリングされた配列に配置しますか?ありがとう
白鳥

これらのアイテムのレイアウトを作成するためのカスタム関数をたくさん書きました。残念なことに、レンダリング可能な配列ではなくHTMLを返します。レンダリング可能な配列を使用するのは良いことですが、その点については完全には明確ではありません(それを行う正当な理由があると確信しています。共鳴する説明は見つかりませんでした)。
ジャスティン

ありがとう。フィールドコレクションは、フォームと出力を簡単にするために実際に役立ちますが、カスタムクエリに関しては、entity_metadata_wrapperを使用しても、ネストされた配列に飛び込む必要があるようです。
白鳥

ああ、密集した配列を必要なものに変えるラッパーを作成しました。
ジャスティン

entity_load()は、「エンティティ」に固有のノードのセットを返し、それらとともにユーザー定義フィールドも取得します。ユーザーフィールドとエンティティのフィールドをどのように区別しますか?手がかりはありますか?
ラージパワンガムダル

38

同じトリックを行うラッパー関数もあります。

field_collection_item_load($id, $reset = FALSE)

またはコメントごとに、次を使用します。

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

複数のコレクションをロードする(たとえば、[ 追加]ボタンがある場合)。


5
上記の@ vasiliy-grotovの回答に従ってfield_collection_item_load_multiple($ids = array(), $conditions = array(), $reset = FALSE)、を使用して複数のコレクションをロードすることもできます(たとえば、「追加」btnがある場合)。
mediaashley

21

正しいリビジョンをロードするには、field_collection_field_get_entity()を使用する必要があります。

使用例:

$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
フィールドコレクションに割り当てられた日付フィールドを取得する方法は?私は次のものを使用しました。$ item = field_collection_field_get_entity($ itemid); print $ item-> field_course_starts_on ['und'] [0] ['safe_value']; しかし、値は出力されません。
ハリクリス

これをありがとう。一定の警告が表示されていました:array_flip():STRINGとINTEGERの値のみを反転できます!... item_load()を使用して、問題を解決しました。
ナイディム

11

Entity APIモジュールentity_metadata_wrapperから使用できます:

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

すべてのコレクションもループできます:

$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);
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.