2011-12-12 45 views
2

我已將一些自定義字段添加到我的用戶註冊表單中。即名和姓。訪問Drupal 7中節點上的用戶字段

註冊用戶可以撰寫文章,並且我已經爲這些文章和節點 - article.tpl.php創建了內容類型。

我想要做的是從用戶註冊表單(名字,姓氏)下面的文章的標題呈現兩個領域。我似乎無法訪問這些數據。 我想要的用戶提供的具體名稱,而不是登錄時提供的用戶名,這可能是完全隨機的。

任何想法如何在node.tpl上呈現這些字段?

乾杯。

回答

-1

當用戶登錄到Drupal時,該用戶被加載,以便您可以在請求期間訪問諸如「用戶名」和「電子郵件」等字段。但是,您定義的自定義字段默認情況下未加載。

你可以做的是在主題中實現預處理功能。也就是說,創建/編輯文件「的template.php」在你的主題文件夾,並添加以下代碼PICE:

function [mythemename]_preprocess_node(&$vars, $hook) { 

    global $user; 
    $account = user_load($user->uid); 

    $vars['firstname'] = $account['path']['to']['field']; 
    $vars['lastname'] = $account['path']['to']['field']; 

} 

現在發生的是,每次Drupal是要顯示一個節點,它運行所有節點變量(如$ title和$ content)通過你的函數,以便你可以改變你需要的東西。但是,您也可以添加更多變量。所以,我們要做的是讓用戶接受請求(可能是匿名的,將'uid'設置爲0)並加載該用戶的帳戶,該帳戶包含您定義的所有字段。

請注意,我不記得這些字段是如何存儲在您的帳戶。你需要看看。

+0

他們很可能會在'$帳戶 - > field_firstname [$帳戶 - >語言] [0] [ '值'];' – Clive

+0

這樣的回答解釋瞭如何訪問*當前登錄用戶的*字段,但最初的問題是詢問如何顯示*作者的*字段。 –

0

記住,你可以給他們的UID所以不是$account = user_load($user->uid);加載任何用戶的個人資料數據,你會做一個user_load($authors_uid)

更具體地講,這裏是我使用收集名字和姓氏用戶字段一個通用的,多用途功能並返回它們分隔的空間。根據我的用戶的要求,返回是大寫,但您明白了。我仍然在將D6轉換爲D7,因此語言檢查可能不是必需的。如果我發現它不是,我會編輯這個回覆。

/** 
* This will return the user's name (first last in caps) 
* @uses user_load() 
* @param int $user_id optional user id to look for 
* @return string 
*/ 
function get_user_name($user_id = 0) { 
    global $user; 
    $active_user = user_load((($user_id > 0)? $user_id : $user->uid)); 
    $first_name = $active_user->field_firstname[(($active_user->language == '')? 'und' : $active_user->language)][0]['value']; 
    $last_name = $active_user->field_lastname[(($active_user->language == '')? 'und' : $active_user->language)][0]['value'];  
    return strtoupper($first_name . ' ' . $last_name); 
} 
相關問題