回答:
これは別の解決策だと思うので、https: //stackoverflow.com/questions/8124089/get-value-of-custom-user-field-in-drupal-7-templateから私の回答を再投稿しています。この例は、デフォルトのユーザー名の代わりにfield_real_nameのようなものを使用する方法を示しています。
前処理関数を使用している場合、グローバル$user
オブジェクトを取得する必要はありません。$ variables配列の$variables['name']
フィールドを、私が呼び出したカスタムフィールドのフィールドに変更できますfield_real_name
。$variables
配列にアクセスできるので、これでユーザー情報を取得できます-uidに関連付けられた情報をロードします(template_preprocess_usernameを参照):
function mythemename_preprocess_username(&$variables) {
$account = user_load($variables['account']->uid);
...more code will go here in a moment
}
あなたdpm($account)
(またはkpr($account)
develを使用していない場合)は、グローバル$user
オブジェクトを使用せずにすべてのユーザー情報にアクセスできることがわかります。
そして、あなたはの出力を変更することができます$variables['name']
あなたのことfield_real_name
として、次のとおりです。
function mythemename_preprocess_username(&$variables) {
// Load user information with user fields
$account = user_load($variables['account']->uid);
// See if user has real_name set, if so use that as the name instead
$real_name = $account->field_real_name[LANGUAGE_NONE][0]['safe_value'];
if (isset($real_name)) {
$variables['name'] = $real_name;
}
}
奇妙な理由で、Drupal 7のプロフィールフィールドは、以前のものとは異なります。ただし、ユーザープロファイルオブジェクトは、追加のプロファイルフィールドに配列要素としてアクセスできるようにします。例えば:
$profile->field_fieldname['und'][0]['value']
は使用できませんが、次のように書き換えると機能します。
$user_profile['field_fieldname']['#object']->field_fieldname['und'][0]['value'];
だから私は単に私のコードで次のことをしました:
/*
* Create simplified variables as shortcuts for all fields.
* Use these variables for read access lateron.
*/
$firstname = $user_profile['field_first_name']['#object']
->field_first_name['und'][0]['value'];
$middlename = $user_profile['field_middle_name']['#object']
->field_middle_name['und'][0]['value'];
$surname = $user_profile['field_surname']['#object']
->field_surname['und'][0]['value'];
$image = $user_profile['field_user_picture']['#object']
->field_user_picture['und'][0]['uri'];
$user
オブジェクトをもう一度呼び出すのではなく、物事を機能させるための別の方法。
Drupal 7コアでユーザーデータ(カスタムフィールドを含む)をロードできます
$user = entity_load($entity_type = "user", $ids = Array($user->uid), $conditions = array(), $reset = FALSE);
詳細については、Drupal 7> API>エンティティのロードをご覧ください。