Сейчас я вам продемонстрирую, каким образом возможно вывести поля пользователей в ноду, т.е мы займёмся выводом полей из профиля пользователя. Данный функционал широко распространён в свободных блоговых системах, где у какого-то пользователя написавшем статью, в качестве информации о пользователе размещена еще и дополнительная информация, например «Увлечения», и находится это всё на одной странице, нет необходимости делать лишние клики, для перехода в профиль пользователя. Далее думаю будет более понятно. Приступим, для начала давайте создадим дополнительное поле для пользователей, которое они будут заполнять при регистрации на сайте. Переходим по пути «Конфигурация»-> «Настройка учётной записи»-> «Управление полями»

И добавляем новое поле, например «Ваши увлечения», вот с такими настройками

Далее «Сохранить»-> «Сохранить настройки поля» -> «Сохранить настройки». Все остальные настройки оставим по умолчанию. Теперь переходим в свой профиль и заполним данное поле

И сохраняем. С полем закончили, теперь необходимо вывести это поле в ноду. Давйте этим и займёмся. Я использую для примера стандартный шаблон Bartik, который идёт из коробки Drupal 7. Первое что нам необходимо это подгрузить поля профиля в ноду, поэтому открываем файл
node.tpl.php
Вашего шаблона и перед началом основного кода пишем вот такую конструкцию
$user_node = user_load($node->uid);

Тем самым мы подгрузили поля из профиля в ноду и занесли ее в переменную. Если вы помните то машинное имя нашего поля имело название
filed_hoby
И именно его теперь нам нужно вытащить. Что бы написать запрос воспользуемся свойством
print "<pre>"; print "</pre>";
и посмотрим к каком массиве находится наше поле

Вот всё теперь у нас отображается , можем смело писать запрос, выглядеть в моём случае он будет вот так
$user_node->field_hoby['und']['0']['safe_value'];
Теперь нам лишь осталось все наши действия соединить и вывести на экран, в результате наш код примет вид
$user_node = user_load($node->uid); print $user_node->field_hoby['und']['0']['safe_value'];

Что даст нам ноду вот такого вида

На этом всё.
Комментарии (39)
"И именно его теперь нам нужно вытащить. Что бы написать запрос воспользуемся свойством " можно по подробнее, как это сделать?
необходимо вписать
в
после чего можно будет писать запрос к объекту.
И что потом надо сделать что бы увидеть картинку как на скриншоте №5, на какую страницу надо зайти?
данный вывод будет отображаться в во всех нодах, для конретного типа материала.
Статья супер!
А вот вопрос - можно ли так вытягивать не только текст? а например аватарку? или термин словаря?
да можно!
а каким образом?
если вытягивать значение, то отображается только путь файла(если речь идет об аватарке)
иными словами, у меня есть поле в профиле - автарка.
вот ее код:
какое значение выводить, что бы в итоге получилась картинка, а не текстовый путь или название ее?
вот так попробуйте
=(
Fatal error: Cannot use object of type stdClass as array in Y:\home\wedd-dru\www\sites\all\themes\w\node--user.tpl.php on line 12
на просторах инета я нашел вот это
типа это собирает поле в кучу(из частей), но вот как спарить это с вашим кодом - не доходит....
тогда сделайте
и дальше посмотрите что она в себя подгружает, через
к сожалению, пока посмотреть не могу.
это в теле ноды писать? Спасибо Вам за содейтвие, голова уже кипит!
да в
и по примеру их этого урока посмотрите, что она в себя подгружает. А чем вам путь до картинки не подходит?
"и по примеру их этого урока посмотрите" - это вы про что? а что в итоге мне даст подгрузка
??? не совсем понимаю=))
Почему не подходит адрес - потому что у меня кроме картинки куча полей типа термин словаря, которые тоже выводят номер словаря а не его обозначение. А вообще это долгая история у меня, бьюсь уже наверно неделю над реализацией, все началось с того, что мне нужно было сделать пользователей с классификацей как на фрилансе, по профессиям, ну и соответственно с профилями, в итоге долгих манипуляций, я дошел до этого плана - я рулсами создаю правило при регистрации пользователя, создается нода(это будет профиль), и в него(по вашему примеру) я хочу интегрировать поля пользователя, что бы получился полноценный профиль, тип нода, с которым можно делать все что угодно. А вот со стандарным профилем зареганого пользователя, я даже комменты в профиль не могу вставить. грустная история. и хз как делать.
да и адрес кривой
тут тоже верно
этот код у меня сработал
как вариант на скорую руку я бы использовал вот такую конструкцию
Спасибо за содействие!!! Вы хороший человек
ответ найден!
Подскажите как вывести поле в шаблон page.tpl.php в не зависимости где находится юзер в ноде или на главнойстранице, в любом случаем необходимо выводить поле юзера
комментарием выше, как раз этот код и написан!
Не получается, выводит ошибку:
Notice: Undefined variable: node в функции include() (строка 7 в файле sites/all/themes/bartik/templates/page.tpl.php).
Notice: Trying to get property of non-object в функции include() (строка 7 в файле sites/all/themes/bartik/templates/page.tpl.php).
Warning: array_flip() [function.array-flip]: Can only flip STRING and INTEGER values! в функции DrupalDefaultEntityController->load() (строка 178 в файле /includes/entity.inc).
p.s. удалите пожалуйста похожий коммент выше
давайте код который в page.tpl.php пишите.
Ну так вот этот код и пишу:
Повторюсь нужно вывести поле field_k_bonus на любой странице сайте, в не зависимости от того находится юзер в ноде или создал данную ноду, просто вывести его поле на сайте.
а название поля на свое изменили? т.е. в вашем варианте это выглядит так
Да, менял поле на свое (field_k_bonus)
Ошибки:
тогда так
Спасибо, это код работает, но выдает ошибку если у пользователя не заполнено это поле, не подскажите как решить?
ну я не знаю, что у вас на 6 строчке написано в page.tpl.php
:)
Решил таким способом:
Полезная статья. Как вывести юзер-поле в ноду разобрался. На сколько возможно вытянуть поле в форму добавления метериала? Например, в профиле пользователя имеется поле телефон(текст, целое число). Пользователь может создать объявление (тип ноды с полем телефон). Логично прдоствить юзеру значение поля по умолчанию - его номер из профиля, в то же время он может его переписать. Пробовал передовать методом GET, но это работает только если пользователь переходит на форму из профиля.
через
забираете значения из $user и переопределяете форму как вам необходимо, что-то вроде этого
Здравствуйте! Прекрасно описано, большое спасибо. Могли бы Вы подсказать как на выведенное поле повесить ссылку на автора (как при выводе $name)?
Павел, просто громаднейшее спасибо!!!
Пытался найти это по "drupal 7 ссылка на автора материала", "передать url автора в ноду" и т.д. Еще раз большое спасибо!
Подскажите, пожалуйста, возможно ли сделать все тоже самое, только наоборот...тоесть записать данные из ноды в профиль пользователя.
Идея такая:
Я заполняю форму ноды (нода определенного типа), после сабмита все данные что я заполнила сохранились в профиле пользователя (Поле Телефон в ноде, в соответствующем поле Телфон в профиле, Имя в ноде - в Имя в профиле и т.д.)
Потом когда я уже вхожу и хочу заполнить эту форму второй раз, уже подтягиваются данные из профиля, которые я вводил раньше (эта часть в принципе просто реализуется токенами в дефолтом значении)
Подскажите как правильно сделать первую часть вопроса?