(Решено)Как правильно сделать ссылки?

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

Аватар пользователя Alex_R Alex_R 28 мая 2010 в 0:14

Честно понимаю, что в самом Друпале это повсеместно используется, но как реализовано в коде не нашел.
пишу:
 l($user->name, 'user/'. $user->uid)
Все нормально работает, но эта ссылка показывается всем, а как сделать, чтобы она показывалась только тем, кто может просматривать чужие профили? И чтобы для остальных была просто текстом. Неужели каждый раз проверку делать? Или есть готовая функция вывода ссылки на пользователя?
P.S. Поиск при запросе "ссылка на пользователя" находит кучу всего, но все не то. Sad

Комментарии

Аватар пользователя Alex_R Alex_R 28 мая 2010 в 0:49

olk wrote:
Правильней наверное будет все-же theme('username',$user); которая сделает за вас все остальное.

В предыдущем примере $user я использовал только для примера, на самом деле есть только $node->uid
Если правильно понял, то чтобы получить подобную ссылку нужно написать
theme('username',user_load(array('uid' => $node->uid)))
да, уж....

Аватар пользователя Alex_R Alex_R 28 мая 2010 в 1:15

Переименовал тему, чтобы не плодить новую.
Задача выглядит так.
Есть номер ноды (NID)
Нужно получить строчку типа:
"Заголовок ноды опубликовано Имя автора" и чтобы все было красиво.
Со второй частью разобрались, первая часть как я догадываюсь тоже должна вызываться через theme(),
а не через L() как это у меня сейчас, чтобы путь на ноду был не стандартным, а в виде синонима.
прочитал http://api.drupal.ru/api/function/theme/6 вроде почти все понятно, кроме самого главного, где узнавать допустимые значения первого параметра функции?

Аватар пользователя Alex_R Alex_R 28 мая 2010 в 14:53

graker wrote:
l(), кстати, синонимы умеет подставлять.

Спасибо за развернутый ответ!
А можно узнать как должен выглядеть вызов функции l() чтобы подставился синоним? А то у меня обратное получается - (подаешь синоним, выводится путь), а наоборот никак не получается. Sad

Аватар пользователя olk olk 28 мая 2010 в 11:22

"Alex_R" wrote:
"Заголовок ноды опубликовано Имя автора" и чтобы все было красиво.

Если объект ноды уже загружен, то

print l($node->title, "node/$node->nid"). ' ' . t('public') . ' ' . theme('username', $node);
Аватар пользователя graker graker 28 мая 2010 в 11:35

Насчет загруженного объекта ноды, уже включающего в себя $user - очень толково!

Но вот t() нехорошо так использовать, т.к. при переводе строки сразу возникнет проблема с порядком следования слов (который разный в разных языках и пользователь может захотеть его изменить). Лучше примерно так:

print t('!nodetitle published by !username',
array('!nodetitle' => l($node->title, "node/$node->nid"),
'!username' => theme('username', $node),));

Аватар пользователя graker graker 28 мая 2010 в 15:19

Не понял вашего вопроса. А синоним существует вообще?
Просто когда я пользуюсь функцией l(), это обычно выглядит примерно так. Есть нода с заголовком 'About', nid=5 а синоним='about'. Я пишу l('About','node/5'), и функция возвращает мне ссылку на mysite/about, сама, автоматически.