2010-02-17 90 views
1

使用配置文件模塊我創建了一個名爲profile_real_name的文本字段,用戶在註冊時填寫該字段。如何在node.tpl.php中訪問這個變量?訪問用戶配置文件變量

我用dsm($user)功能輸出的用戶變量,它包含了除profile_real_name

我也對phptemplate_preprocess_user_profiledsm($vars),我能看到的數據一切它包含其中確實包含一個對象調用帳戶我需要的信息,但是這個對象在$ user變量中不可用。

非常感謝

回答

3

如果您想訪問node.tpl.php中作者的配置文件信息,那麼您想使用phptemplate_preprocess_node函數而不是user_profile函數。節點預處理功能沒有默認爲$帳戶對象的,所以你必須將其加載到:

這正好在phptemplate_preprocess_node功能在你的template.php文件中:

if ($vars['uid']) { 
    $vars['account'] = user_load(array('uid' => $vars['uid'])); 
} 

然後,您將能夠在您的node.tpl.php中訪問作者的配置文件值。你問到具體的值將是:

print($account->profile_real_name); 

然而,這聽起來像你可能希望節點作者的名字出現作爲profile_real_name值,而不是他們的帳戶名?

如果是這樣,一個更有效的方法是覆蓋theme_username函數。

這不是你直接問怎麼樣,所以我不會進入這裏,但這個職位上的drupal.org論壇將是開始爲Drupal 5或6的好地方: http://drupal.org/node/122303#comment-204277

+0

感謝ashtonium。也許我錯了,但似乎有幾種方法可以用Drupal實現同樣的事情,這對於新手來說有點混亂,但我也很享受。 – screenm0nkey 2010-02-21 20:47:15

+0

是的,這是Drupal的好處和挫折之一:評估解決挑戰的各種可能方法,併爲您的情況選擇最好的方法。我也喜歡它。 – ashtonium 2010-02-22 16:23:38

+0

我應該將它插入mytheme_preprocess_user_profile函數嗎?謝謝! – Rosamunda 2013-01-13 03:18:34

0

如果你想要從例如用戶profile.tpl.php的$account陣列內所有你需要的信息存在這樣做。

否則,您可以通過根據用戶對象(當前登錄人員的ID)加載用戶對象來訪問用戶數據,或者如果您可以查詢數據庫並以此方式獲取uid)。

首先獲取當前用戶的uid

$uid = $user->uid; 

然後加載用戶對象:

// Create user objets based on uid() 
$user_obj = user_load($user->uid); 

然後加載用戶配置文件變量:

// Load profile 
profile_load_profile($user_obj); 

現在$user_obj變量(通過引用傳遞給profile_load_profile)有一個對象,可以像這樣訪問配置文件信息:

$user_obj->profile_real_name 

希望它有幫助!

+0

嗨WmasterJ ,並不完全確定爲什麼你的回答得分很低,但我會在考慮googletorp的回覆時嘗試。 非常感謝 – screenm0nkey 2010-02-18 10:12:26

+0

嗨WmasterJ,你的反應很好。我使用你的代碼來獲取變量,並將其添加到phptemplate_preprocess_page中的$ vars數組中。我對Drupal仍然很陌生,所以我不確定自己在做什麼。感謝您的幫助 – screenm0nkey 2010-02-18 10:52:11

+0

我認爲googletorp讓我失望了,因爲他在回答中表示,按照我建議的方式來覆蓋全球用戶。也許你想驗證一下,因爲它對我很好,但是我沒有再次驗證他在第一句話中所說的話。偉大的,它幫助你:) – JeroenEijkhof 2010-02-19 06:16:52

1

$account是您通常稱爲不是全球用戶的用戶,以免意外覆蓋全局用戶,導致用戶以該用戶身份登錄。

我只是做了一些檢查,解決問題的最簡單方法是在模板中使用$ account而不是$ user。

在模板中使用$user或者像WmasterJ所說的那樣做是錯誤的。你會發布錯誤的數據。您將張貼登錄用戶的數據,而不是正在監視配置文件的用戶的數據。當您查看所有其他用戶的配置文件比您自己的配置文件時會發生此錯誤。

預處理函數並不難,在您的主題的template.php文件中,您只需用您的主題名稱替換phptemplate定義的代碼。在這種情況下,你不需要改變預處理函數,因爲你已經有了你所需要的。

+0

嗨googletorp,我仍然非常確定如何將變量從phptemplate_preprocess_user_profile和另一個預處理函數。說實話,我不完全確定如何創建自己的預處理功能,但我會研究你的反應,並閱讀如何做到這一點。 你也可以知道爲什麼從WmasterJ下面的回答得分?在Drupal中做事情是錯誤的嗎? – screenm0nkey 2010-02-18 10:21:58

+0

嗨googletorp,我可以理解你的意思,但我仍然不知道如何訪問$賬戶數組。我試圖查找它,但我找不到任何東西。我把dsm($ account)放到我的phptemplate_preprocess_node中,它沒有任何東西。 – screenm0nkey 2010-02-19 11:45:00

+0

$賬戶可以在模板中使用,而不是預處理功能。它也不是一個數組,而是一個對象。 – googletorp 2010-02-19 15:37:13