field_get_itemsの「セット」バージョン?


9

エンティティからフィールドアイテムを取得するには

// Find all terms on $node in field 'field_tags'.
$terms = field_get_items('node', $node, 'field_tags');

しかし、リバース、コア、またはその他を行うための便利な方法はありますか?

// Attach new term $term to $node in field 'field_tags'.
$term = taxonomy_term_load($tid);
$node = field_set_items('node', $node, 'field_tags', 'taxonomy_term', $term);
node_save($node);

$ termを手動で割り当てる手間を省き、配列構造がどのように見えるかを詳細に調べてから、手作業で配列を作成します。

ぼんやりと似ているコアキューの唯一の問題は、フィールド言語API DXに関するものでした。

回答:


6

いいえ、そのような機能はありません。

エンティティフィールドの言語サポートで私のコメントを参照してください。


1
Berdirに感謝します。私はあなたが現れることを望んでいました;)そして私はあなたがそう言うのも恐れていました。コメント内のコードの問題は、多くのフィールドで、「値」が不十分であるか、まったく間違っている可能性があることです。
Letharion

field_get_items()もそれを支援しません。値を含む項目の配列を返します。または、フィールドタイプが定義するものは何でも。それを抽象化する方法はありません。
Berdir 2012

たとえば、field_get_items()はarray(array( 'tid' => 123))を返します。あなたのコードはfield_tagsが分類用語の参照であり、それはTIDキーセットを持っていることをことを知っている必要がありますし、それが分類用語にteferenceです。
Berdir 2012

特定のリンクに従って、コメントがそのページに表示されなくなります。
Junaid、2016年

コメントは今議論ページにあります:drupal.org/node/1500308/discuss
Berdir

2

このような関数が存在field_set_items()するためには、stdClassオブジェクトを分類用語のオブジェクトとして識別し、オブジェクトをデコードしてフィールド配列を作成できる関数にマッピングできる必要があります。

そのためのコア機能はないので、これは簡単ではないと思います。


$ entity-> entity_typeプロパティが(まだ)ないことは非常に苛立たしいことですが、それにもかかわらず、サンプルのコールバックに簡単に追加できます。これを反映するように質問を更新しました。
Letharion

1
の欠如はentity_type本当に私見の問題ではありません...問題はまさにあなたがあなたの質問に追加したものです:「それは時々自明ではない」。データは自明ではないため、field_set_itemsが希望どおりに機能するためには、システムの各フィールドタイプに、オブジェクト/任意の変数からデータ配列をリバースエンジニアリングする方法を説明する、ある種のインターフェイスを実装する必要があります。
クライヴ

2

これは時々複雑な配列構造を構築するのに役立ちませんが、私が探しているものがある程度Drupal 8で導入されたと思います。おそらくそれは将来さらに拡張されるでしょう。:)

フィールド、プロパティ、言語情報にアクセスするために利用できる新しいシンプルなAPI

リンク先ページの使用例:

<?php
// Change a field value.
$body = $comment->get('comment_body');
$body[0]['value'] = 'This is actually a perverted tango';
$comment->set('comment_body', $body);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.