2011-11-14 9 views

答えて

11

セットアップ/フィールド名、(テンプレートファイルの前処理機能)template.phpでこのような何かによって:

function mytheme_preprocess_page() { 
    global $user; 
    $user = user_load($user->uid); // Make sure the user object is fully loaded 

    $vars['full_name'] = $user->field_full_name[LANGUAGE_NONE][0]['value']; 
} 

その後page.tpl.phpでこのような何か:

if (isset($full_name) && !empty($full_name)) : 
    echo 'Hello ' . $full_name; 
endif; 

なおLANGUAGE_NONE多言語サイトを運営している場合は変更する必要があります。

+0

field_get_itemsを使用してください。ダイレクトアクセスでは、多言語のWebサイトやフィールドの構造が変更された場合でも中断する可能性があります。 – gagarine

+0

@ gagarineこれは長く、ずっと前です。フィールド構造はFYIを変更することはできません。そのためのメカニズムはありません。 – Clive

+0

これはテンプレートまたはモジュール内でのみ機能しますか? '$ account = user_load($ uid);'でユーザを読み込むと、カスタムフィールドの代わりに空の配列しか得られません: '$ account-> pwyw_balance'は内容のない配列()です。カスタムフィールドに余分なコードをロードする必要がありますか? '$ wrapper = entity_metadata_wrapper( 'user'、$ account) - > value()'を使ってユーザーを読み込むと、同じことが起こります。 '$ wrapper ['pwyw_balance']'は空の配列です。 – nerdoc

19

フィールドの値を取得するには、field_get_itemsを使用する以外は、クライブの答えが正しいです。それはあなたのための言語を処理します。また、その値をサニタイズする必要があります。

function THEME_preprocess_page() { 
    global $user; 
    $user = user_load($user->uid); // Make sure the user object is fully loaded 
    $full_names = field_get_items('user', $user, 'field_full_name'); 
    if ($full_names) { 
    $vars['full_name'] = check_plain($full_names[0]['value']); 
    } 
} 

サイトがEntity APIモジュールを使用している場合、あなたもこの

function THEME_preprocess_page() { 
    global $user; 
    $user = user_load($user->uid); // Make sure the user object is fully loaded 
    $wrapper = entity_metadata_wrapper('user', $user); 
    $vars['full_name'] = $wrapper->field_full_name->get(0)->value(array('sanitize' => TRUE)); 
} 

のようなエンティティのメタデータラッパーを使用することができますが、私はこの質問はかなり長い間前に頼まれた知ってもWriting robust code that uses fields, in Drupal 7

+1

'entity_metadata_wrapper()'の '$'記号がないので、 'user'ではなく' $ user'でなければなりません。 – FLY

+0

修正ありがとうございます。 –

+0

こんにちはピエール、次のコードはデータを取得していません。$ user = user_load('72 '); $ first_name = field_get_items( 'user'、$ user、 'field_first_name'); – Ananth

0

を参照してください。私は代替案を投稿したかったのです。あなたがfield_real_nameと呼んだカスタムフィールドに持っているものに$variables['name']という$ variables配列のフィールドを変更したいようです。前処理機能を使用している場合は、グローバル$userオブジェクトをプルする必要はありません。あなたはこれでユーザー情報を得ることができるので、あなたは、$variables配列へのアクセス権を持っている - それは、UID(see template_preprocess_username)に関連した情報をロードします:あなたdpm($account)(またはkpr($account)場合は、使用していない場合

function mythemename_preprocess_username(&$variables) { 
    $account = user_load($variables['account']->uid); 
    ...more code will go here in a moment 
} 

をdevel)を使用すると、グローバル$userオブジェクトを使用せずにすべてのユーザー情報にアクセスできることがわかります。

その後、あなたは次のようにあなたのfield_real_nameする$variables['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; 
    } 
} 
0

私たちは、テンプレートファイル内の任意の場所に以下のコードを追加することができます。

<?php 
global $user; 
$user = user_load($user->uid); 
print $user->name; 
?> 
関連する問題