Доступ к пользовательским полям на узлах в Drupal 7 - PullRequest
2 голосов
/ 12 декабря 2011

Я добавил несколько пользовательских полей в мою регистрационную форму пользователя.А именно: Имя и Фамилия.

Зарегистрированные пользователи могут писать статьи, и я создал тип контента для этих статей и узел - article.tpl.php.

Что бы я хотелДля этого нужно отобразить два поля из формы регистрации пользователя (Имя, Фамилия) под заголовком статьи.Я не могу получить доступ к этим данным.Мне нужны конкретные имена, которые пользователь вводит вместо имени пользователя, указанного при входе в систему, которое может быть совершенно случайным.

Есть идеи, как я могу отобразить эти поля в файле node.tpl?

Приветствия.

Ответы [ 2 ]

0 голосов
/ 22 мая 2013

помните, что вы можете загружать данные профиля любого пользователя, учитывая его 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);
}
0 голосов
/ 13 декабря 2011

Когда пользователь входит в Drupal, этот пользователь загружается, так что вы можете получить доступ к таким полям, как «имя пользователя» и «электронная почта» во время запроса. Однако определяемые вами пользовательские поля не загружаются по умолчанию.

Что вы можете сделать, это реализовать функцию предварительной обработки в вашей теме. То есть создайте / отредактируйте файл template.php в папке вашей темы и добавьте следующий фрагмент кода:

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) и загружаем учетную запись этого пользователя, которая содержит все поля, которые вы определяете.

Обратите внимание, что я не могу вспомнить, как эти поля хранятся в вашей учетной записи. Тебе нужно это найти.

...