[Решено] - Как привязать определенный field из профиля к самому профилю?

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

Аватар пользователя khalid khalid 15 января 2009 в 7:58

Здравствуйте!

Проблема описана в заголовке. Теперь подробней:
имеется поле "Название организации", это поле надо привязать к профилю в виде ссылки. Т.е. надо чтобы отображалось не "имя" пользователя, (т.к. при регистрации организация не может использовать в качестве имени своё название), а именно название.

Например в стандартном виде публикация выглядит так:

Posted Ср, 01/14/2009 - 12:06 by username

так вот этот username не нужен. вместо него надо отобразить название организации, т.е. должно быть так:

Posted Ср, 01/14/2009 - 12:06 by ТОО "Фирма"

Комментарии

Аватар пользователя khalid khalid 15 января 2009 в 12:51

Судя по примерам просто, но не так то просто найти нужную переменную.
Например в шаблоне, при выводе автора материала используется

$author = theme('username', $vars['node']);

я просто взял и тоже самое прописал в шаблоне профиля:

<?php print theme('username', $vars['node']); ?>

но выводится Гость вместо текущего пользователя

я только только с друпалом разбираться начал и в пыхпыхе не силен тоже, так что не судите строго

Аватар пользователя seaji seaji 15 января 2009 в 13:22

http://drupal.ru/node/19895
Тут рассмотрен вопрос кеширования имен пользователей, но в принципе именно эту функцию и нужно ковырять.
Почитайте мой комментарий внизу этого поста. Я именно использовал такой способ чтобы вместо логина ставить значение из поля профиля user_name.

Вот мой код:
<?php
function bein_username($object) {
static $users = array();
if ($object->uid && $object->name) {
if ($users[$object->uid]->uid) {
$user_object = $users[$object->uid];
}
else {
$user_object = user_load(array('uid' => $object->uid));
$users[$object->uid] = $user_object;
}
// Shorten the name when it is too long or it will break many tables.
if (drupal_strlen($object->name) > 20) {
$name = drupal_substr($object->name, 0, 15) .'...';
}
else {
$name = $object->name;
}
if (user_access('access user profiles')) {
if ($user_object->user_name) {
$output = l($user_object->user_name, 'user/'. $object->uid, array('title' => t('View user profile.')));
}
else {
$output = l($name, 'user/'. $object->uid, array('title' => t('View user profile.')));
}
}
else {
$output = check_plain($name);
}
}
elseif ($object->name) {
// Sometimes modules display content composed by people who are
// not registered members of the site (e.g. mailing list or news
// aggregator modules). This clause enables modules to display
// the true author of the content.
if ($object->homepage) {
$output = l($object->name, $object->homepage);
}
else {
$output = check_plain($object->name);
}
$output .= ' ('. t('not verified') .')';
}
else {
$output = variable_get('anonymous', t('Anonymous'));
}
return $output;
}
?>

Аватар пользователя khalid khalid 15 января 2009 в 13:53

Спасибо!

Через http://drupal.ru/node/19895 нашел модуль Real name, который делает как раз то, что мне нужно! Правда как оказалось он немного "бажный" что-ли... в общем при активации модуля вываливалась ошибка
Cannot redeclare phptemplate_username()...
пришлось полностью удалить содержимое realname_theme.inc и всё заработало!

Аватар пользователя seaji seaji 15 января 2009 в 14:15

Возникает вопрос, зачем ставить модуль, если потом придется удалять содержимое из файла модуля?

Аватар пользователя khalid khalid 15 января 2009 в 15:05

это мелочи. а ваш код надо, как я понял, добавить в template.php?

P.S. Сделал по вашему методу. Работает Smile

А можно ли заставить views видеть, что это ссылка? Т.е. у меня есть страница, созданная при помощи views2. Страница выводит дату, заголовок (как ссылка на сам материал, фирма, сайт, и т.д. Так вот столбец "фирма" отображается простым текстом. Хотелось бы чтобы отображалось как ссылка на профиль

Аватар пользователя khalid khalid 15 января 2009 в 15:15

Разобрался. Просто заменил во вьювсе поле profile_org на стандартное и все заработало... почти. Анонимный пользователь видит имя пользователя (логин) а в моём случае это не нужно.