エンティティからフィールドの値を取得する


11

私のサイトにインストールしたのは、Entity APIおよびEntityformモジュールです。Entityformモジュールを使用すると、任意のユーザーが送信できるフォームを作成できます。フォームタイプのフィールドは、コンテンツタイプと同様に、ビューで使用できます。

通常、phpを使用してフィールドの値をノードからテンプレートにプルするには、次のようにします。

<?php echo $node->field_name[$node->language][0]['value']; ?>

ただし、これはentityforms / entitiesでは機能しません。

誰かがエンティティフォーム内のフィールドに対してこれを行う方法を知っていますか?一部の人々はdevelとdpm()関数を使用することを提案しましたが、それらの使用方法もわかりません。

このフィールドの値を取得する方法の具体的な例は、本当に非常に役立ちます。

回答:


13

entity_metadata_wrapperで値にアクセスしてみましたか?

$entityform_id = 12; // entity form id
$entityform = entityform_load($entityform_id);
$entityform_wrapper = entity_metadata_wrapper('entityform', $entityform);
// Access fields with $entityform_wrapper->field_name->value() or ->field_name->raw()
drupal_set_message($entityform_wrapper->field_my_field->value()); // for example

4
今後の読者への注意:これは正しいですが、エンティティフィールドにアクセスするためにエンティティAPIモジュールをインストールする必要はありません。Drupalコアには、エンティティフィールドにアクセスする機能がすでにあります。
kiamlaluno

はい。ただし、OPはタグ付けされ、Entity APIモジュールがインストールされていることを指定したため、entity_metadata_wrapper、さらにはentityformsモジュールの依存関係です。
David Thomas

2
entity-apiは、Drupal 7から実装されたEntity APIのタグであり、Entity APIモジュール用ではありません。注は、初心者の開発者がエンティティを処理するためにエンティティAPIモジュールが必要だと考えるのを避けるためです。答えが正しくないとは言いませんでした。:)
kiamlaluno

7

Entity APIモジュールを使用せずに、エンティティに関連付けられたフィールドの値を取得するには、field_get_items()を使用します。エンティティタイプ、エンティティオブジェクト、フィールド名を渡すだけです。

たとえば、コメントの本文を取得するには、次のコードを使用します。

if ($items = field_get_items('comment', $comment, 'comment_body')) {
  // ...
}

ノードの本体を取得するには、次のコードを使用できます。

if ($items = field_get_items('node', $node, 'body')) {
  // ...
}

エンティティオブジェクトは、entity_load()から返されたオブジェクト、またはnode_load()comment_load()taxonomy_term_load()などのそのエンティティの特定のロード関数です。Drupal 8では、これらの関数はのラッパーですentity_load()

フィールドの内容を表示したい場合は、field_view_field()を使用する必要があります。


0

あなたまたはあなたが使用しているいくつかのコードが事前にnode_load()を呼び出しているため、通常$ nodeプロパティで取得できます。

エンティティのプロパティを取得する前に、エンティティを完全にロードする必要があります。

entity_load()を使用しますhttp://api.drupal.org/api/drupal/includes%21common.inc/function/entity_load/7

次に、実際にフィールドで取得できるロードされたエンティティオブジェクトを取得します。

dpm()の使用は他の関数と同じです。開発モジュールをインストールするだけです。

だから、このようなことをしてください:

<?php
$entity = entity_load('myEntityType', $entity_id);
dpm($entity);
?>

0

試してください:

$value= field_get_items('entityform', $entityform, 'field_myfieldname');
print '<p>the value is: '.$value.'</p>';

これにより、フィールドの値が出力されます。

それが配列の場合、これを試してください:

$values = field_get_items('entityform', $entityform, 'field_myfieldname');
$value = $values[0]['value'];
print '<p>the value is: '.$value.'</p>';

これは生の出力であり、値の取得元によっては、ここで手動で値をサニタイズする必要がある場合があることに注意してください。

参照:関数field_get_items


0

これをモジュールの1つに配置し、フォームのページに移動すると、探している情報が見つかります。

function yourmodulename_form_alter(&$form, &$form_state, $form_id) {

  dpm($form);

}

-1

dpmを使用してそのモジュールをインストールするのではなく、次のように使用します。

print_r('<pre>');
print_r($node);
print_r('</pre>');

うまくいけば、これが価値を掘り下げるのに役立ちます。


うーん、それは私のために何を出力していない:(私はentityformの提出を見て、いないノードまたはentityformの提出は、実際にとても混乱ノードだろうだから、それはしていませんか??。
ダスティン

そのときはわかりませんが、$ node以外の別の変数が必要になると思います。
ブライアン、

1
問題は、エンティティを印刷する方法ではなく、エンティティのフィールドにアクセスすることです。
kiamlaluno
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.