2010-02-17 2 views
1

Используя модуль профиля, я создал текстовое поле profile_real_name, которое пользователь заполняет при регистрации. Как получить доступ к этой переменной в node.tpl.php?Доступ к переменным профиля пользователя

Я использовал функцию dsm($user) для вывода пользовательских переменных и в нем содержится все, за исключением данных для profile_real_name

Я побежал dsm($vars) на phptemplate_preprocess_user_profile, и я мог видеть в нем содержится объект с именем учетной записи, которые содержали необходимую мне информацию, но этот объект недоступен в переменной $ 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

+0

Да, это одно из преимуществ и разочарований Drupal: оценка различных возможных способов решения проблемы и выбор лучшего для вашей ситуации. Мне это тоже нравится. – ashtonium

+0

Должен ли я вставить это в функцию mytheme_preprocess_user_profile? Благодаря! – Rosamunda

0

Если вы хотите сделать это в пределах, например, пользователь-profile.tpl.php всю информацию, которую необходимо существует в $account массиве.

В противном случае вы можете получить доступ к пользовательским данным, загрузив объект пользователя на основе его идентификатора (текущего пользователя, который находится в настоящий момент, или если вы можете запросить БД и получить 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

Hi WmasterJ , не совсем уверен, почему вас забили за ваш ответ, но я дам ему попробовать, глядя в ответ googletorp. Большое спасибо – screenm0nkey

+0

Привет, WmasterJ, ваш ответ сработал хорошо. Я использовал ваш код для получения переменной, и я добавил в массив $ vars на странице phptemplate_preprocess_page. Я до сих пор довольно новичок в Drupal, поэтому я не уверен, что я делаю. Спасибо за вашу помощь. – screenm0nkey

+0

Я думаю, что googletorp забил меня, так как в своем ответе он говорит, что делать это так, как я предлагаю, это перепишет глобального пользователя. Может быть, вы хотите проверить, что, поскольку он отлично работает для меня, но потом я не подтвердил, что он говорит в своем первом предложении. Отлично, что это помогло вам :) – JeroenEijkhof

1

$account - это то, что вы обычно называете пользователем, который не является глобальным пользователем, чтобы избежать случайной перезаписи глобального пользователя, что приведет к тому, что пользователь будет зарегистрирован как пользователь.

Я просто немного проверил, и самый простой способ решить вашу проблему - использовать $ account в шаблоне вместо $ user.

Использование $user в шаблоне или выполнение подобных запросов WmasterJ ошибочно. Вы отправите неверные данные. Вы отправите данные зарегистрированным пользователем не данными пользователя, за которым просматривается профиль. Эта ошибка произойдет, если вы просмотрите профиль других пользователей, чем ваш собственный.

Функции предварительного программирования не сложно сделать, в вашем файле template.php в вашей теме вы просто замените phptemplate на имя вашей темы, определяющее код. В этом случае вам не нужно будет изменять функцию препроцесса, поскольку у вас уже есть то, что вам нужно.

+0

Привет, googletorp, я все еще уверен, как получить переменную из phptemplate_preprocess_user_profile и в другую функцию препроцесса. Честно говоря, я не совсем уверен, как создавать свои собственные функции препроцесса, но я рассмотрю ваш ответ и прочитаю, как это сделать. Также вы бы знали, почему ответ от WmasterJ был забит? Неправильно ли это делать в Drupal? – screenm0nkey

+0

Привет, googletorp, я понимаю, что вы имеете в виду сейчас, но я до сих пор не знаю, как получить доступ к массиву $ account. Я попытался найти его, но ничего не нашел. Я положил dsm ($ account) в свой phptemplate_preprocess_node, и он вернулся ни с чем. – screenm0nkey

+0

$ account доступен в шаблоне, а не в функции препроцесса. Также это не массив, а объект. – googletorp

Смежные вопросы