Всем привет.
Как заменить на D7 название "Моя учетная запись" на $user->name
хочу сделать как на всех нормальных сайтах и на drupal.ru. Выводить имя пользователя и прицепить font-awesome иконку, а не просто "Моя учетная запись".
п.с. Модуль menu token не нужен.
Вложение | Размер |
---|---|
этот сайт | 5.11 КБ |
мой сайт (не красиво, не интуитивно, хромает юзабилити) | 2.3 КБ |
fxsyf.png | 218.52 КБ |
Комментарии
Реализация на конкретно этом сайте.
спасибо, но я мало что понял.
нужно для семерки..
Это 7ка.
В целом, реализовано с помощью хука theme_menu_link.
Спасибо, респект!
Вот функция, если в будущем кто-нибудь захочет поменять:
<?php function имя темы_translated_menu_link_alter(&$item, $map) {
global $user;
if ($item['href'] == 'user') {
$item['title'] = t($user->name);
}
}
?>
Вроде мелочь, но Друпал весь состоит из таких "приятных" мелочей, которые иногда вгоняют в уныние) И из-за которых целые модули ставить расточительно как-то.
Хотя может быть данный вопрос дело вкуса, но во всех современных и топовых сайтах, включая соц-сети, кнопка профиля называется либо именем профиля, либо аватарка + имя.
я не очень в php. Функция выше выдает ошибки
Notice: Array to string conversion в функции _menu_tree_check_access() (строка 1530 в файле \includes\menu.inc).
и
Notice: Undefined property: stdClass::$name в функции promotion_translated_menu_link_alter() (строка 231 в файле \sites\all\themes\promotion\template.php).
Не совсем понятно зачем Вам hook_translated_menu_link_alter, когда есть обычный hook_menu_link_alter, но и его назначение не особо очевидно.
И конструкции вида t($user->name) - уж точно не правильны.
Вам вполне подошел бы тот вариант, который был рекомендован изначально, что-то вроде:
<?php
function THEME_menu_link($variables) {
global $user;
if ($variables['element']['#href'] == 'user') {
$variables['element']['#title'] = $user->name;
}
}
?>
Эта функция не работает. Ее дополнять надо как-то?
Не работает. Попробовал на стандартном Бартике - тоже. в template.php папки включенной темы. Предыдущих альтеров нет, кэш почищен, название изменено на машинное имя темы.
п.с. для теста удалил форматы ввода в template.php. Значит файл читается темой.
Постараюсь оттестить завтра.
Ок. На тесте, реализовал следующим образом:
<?php
/**
* Implements hook_menu_alter().
*/
function MYMODULE_menu_alter(&$items) {
$items['user']['title callback'] = 'MYMODULE_user_menu_title';
}
/**
* Rewrite menu item title callback for the 'user' path.
*
* Anonymous users should see "User account", but authenticated users are
* expected to see them name.
*/
function MYMODULE_user_menu_title() {
return user_is_logged_in() ? $GLOBALS['user']->name : t('User account');
}
?>
Спасибо большое. Этот код работает!