我正在用drupal构建我的第一个站点。我创建了一个自定义用户字段:全名。 现在我想在我的模板中获取此fild的值,说“Hello,%username%”。 我该怎么做?
答案 0 :(得分: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));
}
答案 1 :(得分: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
。
答案 2 :(得分:0)
我知道很久以前就问过这个问题,但我想发布一个替代方案。看起来您要将$ variables数组中$variables['name']
的字段更改为您在自定义字段中的名称field_real_name
。如果使用预处理函数,则无需引入全局$user
对象。您可以访问$variables
数组,因此您可以获取用户信息 - 它将加载与uid(see 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;
}
}
答案 3 :(得分:0)
我们可以在模板文件的任何位置添加以下代码。
[STAThread]
static void Main()
{
bool result;
var mutex = new System.Threading.Mutex(true, "UniqueAppId", out result);
if (!result)
{
MessageBox.Show("Another instance is already running.");
return;
}
Application.Run(new Form1());
GC.KeepAlive(mutex); // mutex shouldn't be released - important line
}