Предлагаю избавляться от стандартного блока входа и заменять его более компактным, лаконичным и симпатичным решением, которое, помимо прочего, можно удобно встаивать практически в любом свободном месте вашей темы.
Представленный сниппет позволяет экономить пространство, не засорять дизайн увесистым блоком для входа, удачно вписывается во многие темы. такое решение модное!
ЛайвИнтернет:
Аскетичный Яndex:
YaHoo:
Google:
А вот так это будет выглядеть у нас (виды для гостя и для пользователя):
Разумеется, этот сниппет можно доработать, сделав картинку пользователя ссылкой на профиль. Тогда он станет еще симпатичнее!
Или еще похлеще: имя пользователя сделать ссылкой на профиль, а картинку - ссылкой на страницу правки профиля.
Код в приложении. Просто вставьте его в нужное место шаблона, не забыв подсунуть в шаблон и иконку пользователя с именем user.gif.
Отображение можно изменить путем добавления в css-файл стиля #login.
Недостатки
Если вы испольузете какие-то расширения (например, модуль OpenID), изменяющие форму входа, вам прийдется дорабатывать сниппет, хотя на странице входа (/user) Все будет штатно.
зы. Картинка нагло украдена с известного сервиса и пока носит лишь характер рабочей заглушки, замените ее своей.
Всплывающая форма. 7 июля 2009
Время течет непрерывно и все вокруг меняется. Пришло время измениться и образу входа.
От блока входа мы уже избавились, но приобрели новое неудобство: чтобы войти на сайт нам требовалось перейти на новую страницу. Это лишний траффик, от которого нужно всегда избавляться. Чтобы решить эту проблему, люди придумали всплывающие формы входа. Вы кликаете по ссылке входа, но не переходите к новой странице - форма входа тут же отображается на экране и вы можете вводить логин/пароль.
Но как это сделать? Да запросто.
Скачайте и установите модуль ThickBox. Это модуль для вского рода всплываний со спецэффектами, часто используется для показа картинок в галереях. Но его можно использовать и для нашего случая, причем для этого вообще ничего делать не надо - просто отметьте соотвествующую опцию в настройках модуля и все!
Модуль самостоятельно отыщет на странице ссылку на вход, с помощью jQuery обработает ее и сделает так, что при клике по ссылке будет всплывать форма входа!
Вложение | Размер |
---|---|
drupal_pretty_login.txt | 910 байт |
Комментарии
интересная мысль, надо будет обдумать
Спасибо. В дополнение к вопросу о компактности Compact Forms Перевод есть у Sa_Bo_Nim
Идея хорошая. Сейчас попробую применить. Спасибо.
Над юзабилити действительно нужно работать!
Молодец! Давно хотел чего-нить подобного!
ИМХО удобно ссылку на профиль делать с имени пользователя - если для самого пользователя, то для редактирования (правки профиля), если для других пользователей или гостей - то только для просмотра.
Спасибо большое!
уже установила, нравится!
правда, почему то вылезли вопросики - ну это несложно вручную было заменить на русские буквы )
Думаю, в вашем случае было бы полезно убрать ссылку "Забыли пароль", т.к. происходит это редко и ссылка на восстановление есть на старнице входа, зато у вас все влезет в одну строку.
Вопросики из-за несоответствия кодировки, хотя я вроде в utf8 делал...
да, я хотела убрать, но не смогла кусок из кода убрать по незнанию
а теперь еще раз попробовала - и получилось! спасибо!!
Спасибо, автору прегодилсоь!!
Переделал чуток ваш скрипт.
В template.php добавляем код:
global $user;
if (!$user->uid) {
$message .= '<img src="'. base_path() . path_to_theme() .'/user.png" border="0" align="absmiddle"> '.
l(t('Вход'),'user/login', array('attributes' => array('rel'=>'nofollow')) ).
' : '.l(t('Регистрация'), 'user/register', array('attributes' => array('rel'=>'nofollow')) ).
' : '.l(t('Забыли пароль?'), 'user/password', array('attributes' => array('rel'=>'nofollow')));
} else {
$message .= '<img src="'. base_path() . path_to_theme() .'/user.png" border="0" align="absmiddle"> ' .
l($user->name, 'user/'.$user->uid).
' : '.l(t('Изменить'), 'user/' . $user->uid . '/edit').
' : '.l(t('Выход'), 'logout');
}
return $message;
}
В page.tpl.php вставляем:
Стиль и сахар - по вкусу...
Иконку взял из famfamfam.
Посмотреть можно в шапке сайта: http://drupalcookbook.ru/
Да, только к такому решению привязывать thickbox обязательно. Иначе вы обрубаете функционал и заставляете пользователя грузить еще одну страницу просто так, чтобы только залогиниться.
Хотя thickbox мне не очень нравится - форма входа грузится только по клике на ссылку входа, хотя в идеале проверка на яваскипт и подгрузка этой формы входа должна идти сразу с разрузкой страницы, чтобы она появлялась сразу без всяких прелоадеров.
Избаловали вас аяксы всякие
Я исхожу из того, что пользователь логинится один раз на пару недель, пока куки позволяют ему заходить на сайт автоматически. Загрузить раз в неделю-другую страницу входа, простите, не за падло.
Согласен с Али. При этом нужно учесть, что для одного сайта форма входа должна быть в центре на главной, а для других она нужна редко...
Я кстати в своём варианте добавил микроформат rel="nofollow" для ссылок - мне кажется, что ссылки на страницу регистрации на по всему сайту совершенно не нужно индексировать. Ваше мнение?
Переписал код, чтобы было легче им управлять и настраивать. Элементы выводятся в виде списка в одну строку...
В template.php:
global $user;
if (!$user->uid) {
$message= '<ul>
<li>'.l('Вход','user/login', array('attributes' => array('rel'=>'nofollow')) ).'</li>
<li>'.l('Регистрация', 'user/register', array('attributes' => array('rel'=>'nofollow')) ).'</li>
<li>'.l('Забыли пароль', 'user/password', array('attributes' => array('rel'=>'nofollow'))).'?</li>
</ul>';
} else {
$message= '<ul>
<li>'.l($user->name, 'user/'.$user->uid).'</li>
<li>'.l('Изменить', 'user/' . $user->uid . '/edit').'</li>
<li>'.l('Выход', 'logout').'</li>
</ul>';
}
return $message;
}
В page.tpl.php обернул всё тегами
<noindex>
для Яндекса:Стили (style.css):
#login ul{background: url('images/user.png') 0 center no-repeat;padding: 0 0 0 0.5em;margin:0;} /* Картинка юзера слева */
#login ul li {display: inline; padding-left:1em;} /* Выводим в одну строку элементы списка и отступы между ними */
Пока так.
Решение было сохранено на сайте DrupalCookBook.ru:
Компактный блок входа и регистрации пользователей.
Авторы, предложившие решения, также указаны в сохранённой статье.
VladSavitsky, при использовании вашего варианта возникает проблемка при заходе на сайт без авторизации:
разведка боем показала, что причина в добавлении
Пока убрал - ошибка исчезла.
спасибо, а то закладки не работают
а как быть с блоком навигация у авторизировашегося пользователя?
куда деть эту кучу ссылок?
Вообще-то, это уже другой блок, но...
из нужного там только трекер, "Создать..." и ссылка на админку. Админка нужна толкьо админу, трекер выносится для удобства на видное место в любом месте типа "Новенькое". "Создать" я бы тоже куда-нить в сторону убрал.
Спасибо, интересное решение
Да, там не только "создать" У меня например
Входящие
Мои баллы
Мои друзья
Мои закладки
Мои учетные данные
Мой блог
Мой HR-Portal
Пригласить друга
Добавить:
HR-Лента
И что мешает вынести все это в свой блок или профиль?
в профиль не умею выводить
В натсройках блока "Показывать только на указанных страницах:
user/*
users/*"
ок, попробую
добавить снипет в блок
и блок выводить где надо
я вставлял код из
drupal_pretty_login.txt
в блок
не забудьте включить фильтр php
Все понял, как надо спасибо
да у меня вроде 6-ка и работает
на всякий случай даю код
global $user;
if (!$user->uid) {
$message .= '<div id="login"><img src="'. base_path() . path_to_theme() .'/images/mini-user-light-blue.png" border="0" align="absmiddle"> ' . t('<a href="login">Вход</a> | <a href="register">Регистрация</a>', array('login' => url('user/login'), 'register' => url('user/register')));
$message .= t(' | <a href="password">Забыли пароль?</a>', array('password' => url('user/password'))) . '</div>';
}
else {
$message .= '<div id="login"><img src="'. base_path() . path_to_theme() .'/images/mini-user-light-blue.png" border="0" align="absmiddle"> ' . t('<b>user</b> ', array('user' => $user->name));
$message .= t('<a href="view">Профиль</a> | <a href="logout">Выход</a>', array('view' => url('user/' . $user->uid), 'edit' => url('user/' . $user->uid . '/edit'), 'logout' => url('logout'))) . '</div>';
}
echo $message;
?>
<?phpuid) { $message .= '
' . t('Вход | Регистрация', array('login' => url('user/login'), 'register' => url('user/register'))); $message .= t(' | Забыли пароль?', array('password' => url('user/password'))) . '
'; } else { $message .= '
' . t('user ', array('user' => $user->name)); $message .= t('Профиль | Выход', array('view' => url('user/' . $user->uid), 'edit' => url('user/' . $user->uid . '/edit'), 'logout' => url('logout'))) . '
'; } echo $message; ?>
Подскажите, пожалуйста, в чем может быть дело? Спасибо
это у вас tiny или fck режет php
Да я через BUEditor ввожу, но режется это факт.:-( Не подскажете, что нужно сделать, чтобы не резалось?
к сожалению не использую этот редактор
лучше создать отдельную тему, спросить
тут, ведь тоже буедитор
Здравствуйте, если в блоке входа поменять ссылку: user/login на user/login?destination=main_page, то попадаешь сразу не в свой профиль, а на главную страницу. В связи с этим вопрос: Как нужно поменять php код блока, чтобы выводилась при входе в эккаунт эта ссылка: user/login?destination=main_page, а не user/login Насколько я понял, ссылку с параметрами напрямую вводить в php код нельзя? Спасибо
Уважаемые, подскажите, пожалуйста, как сделать, чтобы после авторизации не перебрасывало автоматически на страницу профиля пользователя, а загружалась бы, например, главная страница
поиск по слову destination
можно модуль login_destination, а можно дописать к урлу входа ?destination=put/kuda/nado/perenapravit/posle/vhoda
1. Модуль login_destination, похоже, делает редирект только из блока стандартной регистрации, но не из формы
2. Если напрямую прописать ссылку: my_site/user/login?destination=kuda_nado, то выводится ссылка такого вида: my_site/user/login%3Fdestination%3Dkuda_nado и как следтсвие - страница не найдена
3. Вообще, как я понял, за редирект отвечает функция:
function user_login_submit($form, &$form_state) {
global $user;
if ($user->uid) {
$form_state['redirect'] = 'user/'. $user->uid;
return;
}
}
в user.module модуля user. Может быть, можно как-то эту функцию переопределить, чтобы не править прямо в модуле?
<?php
global $user;
if (!$user->uid) {
$path = isset($_GET['q']) ? $_GET['q'] : '';
if ($path != '') { $path = '?destination='. urlencode($path); }
$message .= '<a href="/user/login' . $path . '">Войти</a>' . ' | '.l(t('Регистрация'), 'user/register');
}
?>
Или поставьте модуль loginTobbogan
В закладку! не запутаться бы только в них
Много слов "вход". Мозги скисают, нужно классику читать.
есть новости?
Ммм... Россия-Германия 1:0.
Потребовалось, чтобы выводилась после регистрации не одна картинка на всех, а аватар
чуть изменил
<?php
global $user;
$message .= '<div id="login" class="clearfix"><img src="'. base_path() .'/vniissok.mdmix.ru/user.gif" border="0" align="left" height="90" > ' . t('<a href="login">Вход</a> <br> <a href="register">Регистрация</a>', array('login' => url('user/login'), 'register' => url('user/register')));
if (!
$user->uid) {$message .= t(' <br> <a href="password">Забыли пароль?</a>', array('password' => url('user/password'))) . '</div>';
}
else {
$message .= t('<div id="login" class="clearfix"><img src="/picture" align="left"> ', array('picture' => $user->picture)). t('<b>user</b><br> ', array('user' => $user->name));
$message .= t('<a href="view">Профиль</a> <br> <a href="logout">Выход</a>', array('view' => url('user/' . $user->uid), 'edit' => url('user/' . $user->uid . '/edit'), 'logout' => url('logout'))) . '</div>';
}
$message; ?>echo
но как оказалось, не выводиться дефолтная аватарка, если у пользователя нет своей.
Можно ли как-то ввести проверку на отсутствие своей аватары и в зависимости от этого выводить или дефолтную, или ту которую загрузил пользователь?
Подскажите, а в d7 надо что-то менять в коде? Работает, но пишет Notice: Undefined variable: message в функции eval() (строка 9 в файле /modules/php/php.module(75) : eval()'d code).
Notice: Undefined variable: message в функции eval() (строка 5 в файле /modules/php/php.module(75) : eval()'d code).