Посмотрел на глобальную переменную $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
Что-то у меня ничего не получается.
Делаю например для юзера с номером "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;
?>
Нужно найти функцию которая выводит его в нужном Вам месте и её переопределить, добавить нужный вывод.
Посмотрите в сторону hook_user думаю с помощью него можно будет подобраться.
"RxB" wrote:
А вроде поля всё-таки есть в объекте юзера
Я чет тоже так думал, но var_dump() показал что нет, скорей всего
"vadim_" wrote:
$profile = profile_load_profile($user);
где $user прошёл через profile_load_profile то да, где нет то нет. Нужно смотреть в конкретном примере.
Шоб более не париться. Вот один польлзователь с моего сайта. Там в профиле используется только одно поле - Сайт. Это в последней строчке. Как поле назвали, так и выводится. Причем, это результат работы user_load()
Шоб более не париться. Вот один польлзователь с моего сайта. Там в профиле используется только одно поле - Сайт. Это в последней строчке. Как поле назвали, так и выводится. Причем, это результат работы user_load()
Я делаю так:
<?
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;
?>
Я тут уже в мозгах поисключал все возможные истоки вашей проблемы...
Не слишком большой спец в написании кошерного SQL, но мне кажется несколько неправильно пихать в WHERE поля (uid) из (JOIN) таблиц. Пользуйте лучше user_load()
По конкретно этому случаю могу предложить лишь:
1. Проверить что у Вас в uid может каким-то модулем оно переопределяется и потому не работает 3 (хотя это так чисто гипотетически)
global$user; var_dump($user->uid); // зайти под этим пользователем 3 и проверить, или создать нового и проверить.
2. Попробовать вывести другое поле (просто чтоб удостовериться что тут всё OK)
Или
"orsi" wrote:
Выводит вообще все поля с каким-то "мусором".
Так и выводите не всё, а то что нужно:
$user->ваше_поле;
Комментарии
Вы ж по идее в любом месте можете объявить:
И из $user вытянуть нужные Вам поля.
Если бы уметь как....
Попробовал так:
<? echo $user->profile_7; ?>
Но ничего не выводит ((
Посмотрел на глобальную переменную $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));
Да, и учтите global $user это текущий пользователь если Вам нужен другой, то его uid и нужно вставлять в запрос вместо $user->uid
<?php
global $user;
$profile = profile_load_profile($user);
echo $user->profile_7;
?>
В самом $user их нет
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;
?>
И ничего не выводит.
Я всё внимательно читаю.
И подставил "3".....
Это вы невнимательны.
А вроде поля всё-таки есть в объекте юзера
То есть для global $user - uid = 1 выводит, а для uid = 3 нет. Это может только если у 3 пользователя поле не заполнено.
Нужно найти функцию которая выводит его в нужном Вам месте и её переопределить, добавить нужный вывод.
Посмотрите в сторону hook_user думаю с помощью него можно будет подобраться.
Я чет тоже так думал, но var_dump() показал что нет, скорей всего
где $user прошёл через profile_load_profile то да, где нет то нет. Нужно смотреть в конкретном примере.
Шоб более не париться. Вот один польлзователь с моего сайта. Там в профиле используется только одно поле - Сайт. Это в последней строчке. Как поле назвали, так и выводится. Причем, это результат работы user_load()
Я чуть позже сам завардамплю, помню что было что-то вроже $user->profile_field
Так и есть. Просто если задаюсь таким вопросом, то включаю
brain[module=devel] и смотрю там, а не пытаю коллективные разумы.Я ж говорил шо есть оно в юзере
wolfXXXL
У "3" точно женский в профиле выставлен.
Выводит только если прописано так: $user->uid
Если вместо него ставлю просто "3" то ничего не выводит.
Поле называется profile_7?
Да.
Попробуйте таки
print_r($user);
Может в Вашей ситуации я чего-то не знаю у меня всё работает (проверил).
Вам предложили ещё одно решение попробуйте:
// теперь в $user есть все необходимые Вам поля.
Не успел
Да не важно. У меня уже просто зоологический интерес, когда у товарища включится модуль [module=brain].
Без кавычек надо, потому что в запросе стоит %d
Не помогло.
Выводит вообще все поля с каким-то "мусором".
vadim_
Без кавычек ставил и с кавычками. Не выдаёт.
Вообще на номера не реагирует.
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;
?>
Я тут уже в мозгах поисключал все возможные истоки вашей проблемы...
Не слишком большой спец в написании кошерного SQL, но мне кажется несколько неправильно пихать в WHERE поля (uid) из (JOIN) таблиц. Пользуйте лучше user_load()
По конкретно этому случаю могу предложить лишь:
1. Проверить что у Вас в uid может каким-то модулем оно переопределяется и потому не работает 3 (хотя это так чисто гипотетически)
var_dump($user->uid);
// зайти под этим пользователем 3 и проверить, или создать нового и проверить.
2. Попробовать вывести другое поле (просто чтоб удостовериться что тут всё OK)
Или
Так и выводите не всё, а то что нужно:
$user->ваше_поле;
wolfXXXL
Спасибо!!!
Всё заработало )))
Вторично выбрал в профиле "женский" и стало показываться. Странный глюк.
Теперь осталось как определить uid пользователя. Т.е. какая переменная его выводит для разных пользователей?
Да я на нём и остановился.
Ёлы-палы.... теперь у всех пользователей женский.....
Даже у тех у кого мужской.
Кошмар какой-то....
Вывожу так:
<?
$user = user_load(3);
echo $user->profile_7;
?>
Если честно запрос я с profile_load_profile() и взял.
Но ведь запрос ему выдает результат если подать $user->uid, не работает при 3, дело скорей всего не в структуре запроса.
Короче,
$user=user_load(3);print $user->profile_7
, а я пойду займусь своим сайтом.Когда это решите и будет у Вас соответствие, а не у каждого женский или мужской
Точно, тормознул... )))
Окончательный вариант (если кому понадобится):
<?php
$user = user_load($comment->uid);
echo $user->profile_7;
?>
Спасибо всем!
Блин, такой напряг для чайника )))
Здесь как всё это может выглядеть:
http://www.drupal.ru/node/40846