Поля из профиля автора на страничке ноды

Главные вкладки

Аватар пользователя Master_S Master_S 22 марта 2011 в 1:56

Задача:
Нужно вывести данные из профиля пользователя (автора node) на странице отображения конкретного материала.При этом желательно использовать node.tpl.php (в шаблоне доступно $nid автора). Решение через views знаю, но надо постараться обойтись без него. Первым пришло в голову

 <?php
global $user;
$original_user $user;    
$user user_load(array('uid' => 1)); // загружаем юзера
profile_load_profile(&$user);// загружаем данные из профиля
// вытаскиваем из профиля нужные поля
$user $original_user;              //загружаем себя назад
?>

но помоему это как-то стремно... должен быть способ поизящние:)
З. Ы. Просить больше не буду... розберусь до конца - помогать буду))

Комментарии

Аватар пользователя glu2006 glu2006 22 марта 2011 в 14:11

т.е. использовать 1 запрос во вьюсах вы считаете зазорным, а 3 нод лоада сделать на странице это фуфло Smile (user_load примерно = node_load).

Аватар пользователя olk olk 22 марта 2011 в 14:43

По моему при показе ноды ее юзер (создатель) уже полностью подгружен со всеми полями (в том числе из профиля)
т.е. вам остается только в препроцессе ноды определить переменную какую вы хотите вывести и в шаблоне ее напечатать

<?php
function ваша_тема_preprocess_node(&$variables){
$u $variables['user'];
// здесь в $u ваш юзер уже с полностью заполненными полями
// определяем нашу новую переменную
  
$variables['author_node'] = $u->profile_user_name;
}

// в шаблоне node.tpl.php просто
print $author_node;
?>

PS. Извиняюсь наврал Smile в $variables['user'] все же текущий юзер а не автор, так что без user_load не обойтись
но вот profile_load_profile уже излишен т.е. где то так

<?php
function ваша_тема_preprocess_node(&$variables){
$u user_load($variables['node']->uid);
// здесь в $u ваш юзер уже с полностью заполненными полями
// определяем нашу новую переменную
  
if (isset($u->profile_user_name)) {
  
$variables['author_node'] = $u->profile_user_name;
  }
}
?>
Аватар пользователя glu2006 glu2006 22 марта 2011 в 14:58

olk wrote:

<?php
function ваша_тема_preprocess_node(&$variables){
$u user_load($variables['node']->uid);
// здесь в $u ваш юзер уже с полностью заполненными полями
// определяем нашу новую переменную
  
if (isset($u->profile_user_name)) {
  
$variables['author_node'] = $u->profile_user_name;
  }
}
?>

Это если юзается стандартный модуль профайл, а если content_profile? Получаем node_load ;).

PS. Не боюся я синкор Smile у меня может тоже обострение весеннее, на холивары всяческие тянет и матом ругаться хочется.

Оффтоп: Подскажите лучше скрипт на jQuery который умеет линейную структуру (к примеру теги li) разбивать на страницы с кнопками next и prev. (http://www.geckonewmedia.com/blog/2009/8/20/simplepager---jquery-paging-... не предлагать) Wink (самому писать лениво, вестна однако).

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 22 марта 2011 в 14:38

"glu2006" wrote:
т.е. использовать 1 запрос во вьюсах вы считаете зазорным, а 3 нод лоада сделать на странице это фуфло Smile (user_load примерно = node_load).

Синкору же накликаешь, итак весна

Аватар пользователя Master_S Master_S 22 марта 2011 в 18:25

"olk" wrote:
PS. Извиняюсь наврал Smile в $variables['user'] все же текущий юзер а не автор, так что без user_load не обойтись
но вот profile_load_profile уже излишен т.е. где то так

Не излишен:) Проверено на практике)