Доступ к переменным профиля пользователя - PullRequest
1 голос
/ 17 февраля 2010

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

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

Я также запустил dsm($vars) на phptemplate_preprocess_user_profile и увидел, что он содержит объект с именем account, который содержит необходимую информацию, но этот объект недоступен в переменной $ user.

Большое спасибо

Ответы [ 3 ]

3 голосов
/ 19 февраля 2010

Если вы хотите получить доступ к информации профиля автора в файле node.tpl.php, то вы хотите работать с функцией phptemplate_preprocess_node, а не с user_profile. Функция предварительной обработки узла по умолчанию не имеет объекта $ account, поэтому вам придется загрузить его в:

Это входит в функцию 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

1 голос
/ 17 февраля 2010

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

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

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

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

0 голосов
/ 17 февраля 2010

Если вы хотите сделать это, например, в файле user-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

Надеюсь, это поможет!

...