[Решено] Вывод поля из профиля в любом месте

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

Аватар пользователя orsi orsi 24 февраля 2010 в 14:17

Создал новое поле в админке по адресу: /admin/user/profile

Допустим это поле: "Пол: Мужской/Женский"

Помогите реализовать возможность вывода этого поля в любом месте сайта (например под ником пользователя).

Комментарии

Аватар пользователя wolfXXXL wolfXXXL 24 февраля 2010 в 16:10

Посмотрел на глобальную переменную $user - она таки полей с профиля не содержит (казалось что да)
Извините за дезинформацию тогда так:

global $user;
$result = db_result(db_query("SELECT v.value
                              FROM {profile_fields} f
                              INNER JOIN {profile_values} v ON f.fid = v.fid
                              WHERE f.name = 'название_Вашего_поля' AND uid = %d"
, $user->uid));
Аватар пользователя wolfXXXL wolfXXXL 24 февраля 2010 в 16:16

Да, и учтите global $user это текущий пользователь если Вам нужен другой, то его uid и нужно вставлять в запрос вместо $user->uid

Аватар пользователя direqtor direqtor 24 февраля 2010 в 16:30

"orsi" wrote:
Попробовал так:
<? echo $user->profile_7; ?>
Но ничего не выводит ((
Попробуйте так print_r($user), а там смотрите, куда спрятаны дополнительные поля профиля.

Аватар пользователя orsi orsi 24 февраля 2010 в 16:51

vadim_

Работает, но выводит только поле текущего пользователя, т.е. того, который просматривает страницу.
Если у него в профиле мужской пол, то у всех будет мужской.

wolfXXXL

Что-то у меня ничего не получается.

Делаю например для юзера с номером "3" который точно имеет женский пол:

<?
global $user;
$result = db_result(db_query("SELECT v.value
FROM {profile_fields} f
INNER JOIN {profile_values} v ON f.fid = v.fid
WHERE f.name = 'profile_7' AND uid = %d", 3));
print $result;
?>

И ничего не выводит.

Аватар пользователя direqtor direqtor 24 февраля 2010 в 16:53

"wolfXXXL" wrote:
Да, и учтите global $user это текущий пользователь если Вам нужен другой, то его uid и нужно вставлять в запрос вместо $user->uid
Нет, вы таки не читаете то, что вам пишут. Smile

Аватар пользователя wolfXXXL wolfXXXL 24 февраля 2010 в 17:25

"orsi" wrote:
Делаю например для юзера с номером "3" который точно имеет женский пол:

То есть для global $user - uid = 1 выводит, а для uid = 3 нет. Это может только если у 3 пользователя поле не заполнено.

Аватар пользователя wolfXXXL wolfXXXL 24 февраля 2010 в 17:33

"orsi" wrote:
(например под ником пользователя)

Нужно найти функцию которая выводит его в нужном Вам месте и её переопределить, добавить нужный вывод.
Посмотрите в сторону hook_user думаю с помощью него можно будет подобраться.
"RxB" wrote:
А вроде поля всё-таки есть в объекте юзера

Я чет тоже так думал, но var_dump() показал что нет, скорей всего
"vadim_" wrote:
$profile = profile_load_profile($user);

где $user прошёл через profile_load_profile то да, где нет то нет. Нужно смотреть в конкретном примере.

Аватар пользователя direqtor direqtor 10 ноября 2015 в 11:46

Шоб более не париться. Вот один польлзователь с моего сайта. Там в профиле используется только одно поле - Сайт. Это в последней строчке. Как поле назвали, так и выводится. Причем, это результат работы user_load()

Аватар пользователя direqtor direqtor 24 февраля 2010 в 17:41

Так и есть. Просто если задаюсь таким вопросом, то включаю brain [module=devel] и смотрю там, а не пытаю коллективные разумы. Smile

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 24 февраля 2010 в 17:39

"direqtor" wrote:
Шоб более не париться. Вот один польлзователь с моего сайта. Там в профиле используется только одно поле - Сайт. Это в последней строчке. Как поле назвали, так и выводится. Причем, это результат работы user_load()

Я ж говорил шо есть оно в юзере

Аватар пользователя orsi orsi 24 февраля 2010 в 18:06

wolfXXXL

У "3" точно женский в профиле выставлен.

Выводит только если прописано так: $user->uid
Если вместо него ставлю просто "3" то ничего не выводит.

Аватар пользователя wolfXXXL wolfXXXL 24 февраля 2010 в 18:17

Может в Вашей ситуации я чего-то не знаю у меня всё работает (проверил).
Вам предложили ещё одно решение попробуйте:

$user = user_load(3);
// теперь в $user есть все необходимые Вам поля.
Аватар пользователя orsi orsi 24 февраля 2010 в 18:25

wolfXXXL

Может быть я вывожу как-то не правильно.

Я делаю так:
<?
global $user;
$result = db_result(db_query("SELECT v.value
FROM {profile_fields} f
INNER JOIN {profile_values} v ON f.fid = v.fid
WHERE f.name = 'profile_7' AND uid = %d", 3));
print $result;
?>

Аватар пользователя direqtor direqtor 24 февраля 2010 в 18:39

Я тут уже в мозгах поисключал все возможные истоки вашей проблемы...
Не слишком большой спец в написании кошерного SQL, но мне кажется несколько неправильно пихать в WHERE поля (uid) из (JOIN) таблиц. Пользуйте лучше user_load()

Аватар пользователя wolfXXXL wolfXXXL 24 февраля 2010 в 18:43

По конкретно этому случаю могу предложить лишь:
1. Проверить что у Вас в uid может каким-то модулем оно переопределяется и потому не работает 3 (хотя это так чисто гипотетически)

global $user;
var_dump($user->uid);
// зайти под этим пользователем 3 и проверить, или создать нового и проверить.

2. Попробовать вывести другое поле (просто чтоб удостовериться что тут всё OK)
Или

"orsi" wrote:
Выводит вообще все поля с каким-то "мусором".

Так и выводите не всё, а то что нужно:
$user->ваше_поле;

Аватар пользователя orsi orsi 24 февраля 2010 в 18:45

wolfXXXL

Спасибо!!!
Всё заработало )))

Вторично выбрал в профиле "женский" и стало показываться. Странный глюк.

Теперь осталось как определить uid пользователя. Т.е. какая переменная его выводит для разных пользователей?

Аватар пользователя orsi orsi 24 февраля 2010 в 18:49

Ёлы-палы.... теперь у всех пользователей женский.....
Даже у тех у кого мужской.
Кошмар какой-то....

Вывожу так:

<?
$user = user_load(3);
echo $user->profile_7;
?>

Аватар пользователя wolfXXXL wolfXXXL 24 февраля 2010 в 18:51

Если честно запрос я с profile_load_profile() и взял.

"direqtor" wrote:
но мне кажется несколько неправильно пихать в WHERE поля (uid) из (JOIN) таблиц.

Но ведь запрос ему выдает результат если подать $user->uid, не работает при 3, дело скорей всего не в структуре запроса.

Аватар пользователя wolfXXXL wolfXXXL 24 февраля 2010 в 18:55

"orsi" wrote:
Теперь осталось как определить uid пользователя. Т.е. какая переменная его выводит для разных пользователей?

Когда это решите и будет у Вас соответствие, а не у каждого женский или мужской Smile

Аватар пользователя orsi orsi 24 февраля 2010 в 19:13

Окончательный вариант (если кому понадобится):

<?php
$user = user_load($comment->uid);
echo $user->profile_7;
?>

Спасибо всем!
Блин, такой напряг для чайника )))