次の場所にあるすべてのユーザーにノード参照フィールド(マシン名:field_node)を追加しました。
example.com/admin/config/people/accounts/fields/
私は今カスタムモジュールで働いています& hook_node_access
ユーザーがログインしているときに、プログラムでノード参照フィールドにアクセスするにはどうすればよいですか?
次の場所にあるすべてのユーザーにノード参照フィールド(マシン名:field_node)を追加しました。
example.com/admin/config/people/accounts/fields/
私は今カスタムモジュールで働いています& hook_node_access
ユーザーがログインしているときに、プログラムでノード参照フィールドにアクセスするにはどうすればよいですか?
回答:
を使用して、任意のエンティティからフィールド値を取得できますfield_get_items()
。ログインしたユーザーはグローバル$user
オブジェクトで使用でき、そのオブジェクトにフィールドをロードするにはを使用できますuser_load()
。
それらをまとめると、次のようなものが得られます。
// Get a fully loaded entity object for the logged in user.
$account = user_load($GLOBALS['user']->uid);
// Extract the field items
$field_items = field_get_items('user', $account, 'field_node');
if ($field_items) {
// This will be 'target_id' if you're using the Entity Reference module,
// or 'nid' if you're using References
$column_name = '?';
$nid = $field_items[0][$column_name];
}
あなたが望むなら、それは抽象的なコードです。
オブジェクト(既にアクセスチェックが行われている場合はログインしているユーザー)hook_node_access()
が渡されていることを覚えておく$account
とよいでしょう。そのため、これを使用してチェックする方がよいでしょう。それでも実行する必要があるかもしれませんがuser_load()
、少しデバッグするだけで簡単に確認できます。
ここでは、コアAPIまたはentity_metadata_wrapperを使用する2つのオプション
global $user;
// Load full user account object
$account = user_load($user->uid);
// Get field;
$items = field_get_items('user', $account, 'field_node');
// Debug info
drupal_set_message('<pre>'.var_export($items,1).'</pre>');
// This gets the sanitized output, from the first field delta value (0)
$output = field_view_value('user', $account, 'field_node', $items[0]);
関連する機能:
Entity APIモジュールを使用している場合は、entity_metadata_wrapperを使用することもできます。
global $user;
$user_wrapper = entity_metadata_wrapper('user', $user);
drupal_set_message('<pre>'.var_export($user_wrapper->field_node->raw(),1).'</pre>'); // Raw value
drupal_set_message('<pre>'.var_export($user_wrapper->field_node->value(),1).'</pre>'); // Loaded value
編集:申し訳ありませんが、私がこの回答を投稿しているときに回答が投稿されました。