Лаконичная замена блока «Вход» (+всплывающая форма входа)
Прислано: Химический Али
вт, 18/03/2008 - 06:58
Предлагаю избавляться от стандартного блока входа и заменять его более компактным, лаконичным и симпатичным решением, которое, помимо прочего, можно удобно встаивать практически в любом свободном месте вашей темы.
Представленный сниппет позволяет экономить пространство, не засорять дизайн увесистым блоком для входа, удачно вписывается во многие темы. такое решение модное!
ЛайвИнтернет:

Аскетичный Яndex:
1: 
2: 
YaHoo:

Google:

А вот так это будет выглядеть у нас (виды для гостя и для пользователя):


Разумеется, этот сниппет можно доработать, сделав картинку пользователя ссылкой на профиль. Тогда он станет еще симпатичнее!
Или еще похлеще: имя пользователя сделать ссылкой на профиль, а картинку - ссылкой на страницу правки профиля.
Код в приложении. Просто вставьте его в нужное место шаблона, не забыв подсунуть в шаблон и иконку пользователя с именем user.gif.
Отображение можно изменить путем добавления в css-файл стиля #login.
Недостатки
Если вы испольузете какие-то расширения (например, модуль OpenID), изменяющие форму входа, вам прийдется дорабатывать сниппет, хотя на странице входа (/user) Все будет штатно.
зы. Картинка нагло украдена с известного сервиса и пока носит лишь характер рабочей заглушки, замените ее своей.
Всплывающая форма. 7 июля 2009
Время течет непрерывно и все вокруг меняется. Пришло время измениться и образу входа.
От блока входа мы уже избавились, но приобрели новое неудобство: чтобы войти на сайт нам требовалось перейти на новую страницу. Это лишний траффик, от которого нужно всегда избавляться. Чтобы решить эту проблему, люди придумали всплывающие формы входа. Вы кликаете по ссылке входа, но не переходите к новой странице - форма входа тут же отображается на экране и вы можете вводить логин/пароль.
Но как это сделать? Да запросто.
Скачайте и установите модуль ThickBox. Это модуль для вского рода всплываний со спецэффектами, часто используется для показа картинок в галереях. Но его можно использовать и для нашего случая, причем для этого вообще ничего делать не надо - просто отметьте соотвествующую опцию в настройках модуля и все!
Модуль самостоятельно отыщет на странице ссылку на вход, с помощью jQuery обработает ее и сделает так, что при клике по ссылке будет всплывать форма входа!
| Прикрепленный файл | Размер |
|---|---|
| drupal_pretty_login.txt | 910 байтов |
- Химический Али's blog
- Для комментирования войдите или зарегистрируйтесь
интересная мысль, надо будет обдумать
- Для комментирования войдите или зарегистрируйтесь
Спасибо. В дополнение к вопросу о компактности Compact Forms Перевод есть у Sa_Bo_Nim
- Для комментирования войдите или зарегистрируйтесь
Идея хорошая. Сейчас попробую применить. Спасибо.
Над юзабилити действительно нужно работать!
- Для комментирования войдите или зарегистрируйтесь
Молодец! Давно хотел чего-нить подобного!
ИМХО удобно ссылку на профиль делать с имени пользователя - если для самого пользователя, то для редактирования (правки профиля), если для других пользователей или гостей - то только для просмотра.
- Для комментирования войдите или зарегистрируйтесь
Спасибо большое!
уже установила, нравится!
правда, почему то вылезли вопросики - ну это несложно вручную было заменить на русские буквы )
- Для комментирования войдите или зарегистрируйтесь
Спасибо большое!
уже установила, нравится!
правда, почему то вылезли вопросики - ну это несложно вручную было заменить на русские буквы )
Думаю, в вашем случае было бы полезно убрать ссылку "Забыли пароль", т.к. происходит это редко и ссылка на восстановление есть на старнице входа, зато у вас все влезет в одну строку.
Вопросики из-за несоответствия кодировки, хотя я вроде в utf8 делал...
- Для комментирования войдите или зарегистрируйтесь
Спасибо большое!
уже установила, нравится!
правда, почему то вылезли вопросики - ну это несложно вручную было заменить на русские буквы )
Думаю, в вашем случае было бы полезно убрать ссылку "Забыли пароль", т.к. происходит это редко и ссылка на восстановление есть на старнице входа, зато у вас все влезет в одну строку.
Вопросики из-за несоответствия кодировки, хотя я вроде в utf8 делал...
да, я хотела убрать, но не смогла кусок из кода убрать по незнанию :)
а теперь еще раз попробовала - и получилось! :) спасибо!! :)
- Для комментирования войдите или зарегистрируйтесь
Спасибо, автору прегодилсоь!!
- Для комментирования войдите или зарегистрируйтесь
Переделал чуток ваш скрипт.
В template.php добавляем код:
function phptemplate_flat_login() { 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 вставляем:
<div id="login"><?php echo phptemplate_flat_login();?></div>
Стиль и сахар - по вкусу...
Иконку взял из famfamfam.
Посмотреть можно в шапке сайта: http://drupalcookbook.ru/
- Для комментирования войдите или зарегистрируйтесь
Да, только к такому решению привязывать thickbox обязательно. Иначе вы обрубаете функционал и заставляете пользователя грузить еще одну страницу просто так, чтобы только залогиниться.
Хотя thickbox мне не очень нравится - форма входа грузится только по клике на ссылку входа, хотя в идеале проверка на яваскипт и подгрузка этой формы входа должна идти сразу с разрузкой страницы, чтобы она появлялась сразу без всяких прелоадеров.
- Для комментирования войдите или зарегистрируйтесь
Избаловали вас аяксы всякие :)
Я исхожу из того, что пользователь логинится один раз на пару недель, пока куки позволяют ему заходить на сайт автоматически. Загрузить раз в неделю-другую страницу входа, простите, не за падло.
- Для комментирования войдите или зарегистрируйтесь
Согласен с Али. При этом нужно учесть, что для одного сайта форма входа должна быть в центре на главной, а для других она нужна редко...
Я кстати в своём варианте добавил микроформат rel="nofollow" для ссылок - мне кажется, что ссылки на страницу регистрации на по всему сайту совершенно не нужно индексировать. Ваше мнение?
- Для комментирования войдите или зарегистрируйтесь
Переписал код, чтобы было легче им управлять и настраивать. Элементы выводятся в виде списка в одну строку...
В template.php:
function phptemplate_flat_login() { 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> для Яндекса:<noindex><div id="login"><?php echo phptemplate_flat_login();?></div></noindex>
Стили (style.css):
/*Inline Login form */ #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, при использовании вашего варианта возникает проблемка при заходе на сайт без авторизации:
warning: htmlspecialchars() expects parameter 1 to be string, array given in z:\home\node.ru\www\includes\bootstrap.inc on line 635.
разведка боем показала, что причина в добавлении
Пока убрал - ошибка исчезла.
- Для комментирования войдите или зарегистрируйтесь
спасибо, а то закладки не работают
- Для комментирования войдите или зарегистрируйтесь
а как быть с блоком навигация у авторизировашегося пользователя?
куда деть эту кучу ссылок? :)
- Для комментирования войдите или зарегистрируйтесь
Вообще-то, это уже другой блок, но...
из нужного там только трекер, "Создать..." и ссылка на админку. Админка нужна толкьо админу, трекер выносится для удобства на видное место в любом месте типа "Новенькое". "Создать" я бы тоже куда-нить в сторону убрал.
- Для комментирования войдите или зарегистрируйтесь
Спасибо, интересное решение
- Для комментирования войдите или зарегистрируйтесь
Да, там не только "создать" У меня например
Входящие
Мои баллы
Мои друзья
Мои закладки
Мои учетные данные
Мой блог
Мой HR-Portal
Пригласить друга
Добавить:
HR-Лента
- Для комментирования войдите или зарегистрируйтесь
И что мешает вынести все это в свой блок или профиль?
- Для комментирования войдите или зарегистрируйтесь
в профиль не умею выводить
- Для комментирования войдите или зарегистрируйтесь
В натсройках блока "Показывать только на указанных страницах:
user/*
users/*"
- Для комментирования войдите или зарегистрируйтесь
ок, попробую
- Для комментирования войдите или зарегистрируйтесь
Решение было сохранено на сайте DrupalCookBook.ru:
Компактный блок входа и регистрации пользователей.
Авторы, предложившие решения, также указаны в сохранённой статье.
Скажите, пожалуйста, а как вывести компактную регистрацию через блок, чтобы можно было отключать его на определенных страницах? Спасибо
- Для комментирования войдите или зарегистрируйтесь
добавить снипет в блок
и блок выводить где надо :)
- Для комментирования войдите или зарегистрируйтесь
добавить снипет в блок
и блок выводить где надо :)
Блок выводится где надо, но пустой :-) В блок вставил <?php echo phptemplate_flat_login();?>, но не работает, подскажите пож-та, как надо?
- Для комментирования войдите или зарегистрируйтесь
я вставлял код из
drupal_pretty_login.txt
в блок
не забудьте включить фильтр php
- Для комментирования войдите или зарегистрируйтесь
Все понял, как надо спасибо
- Для комментирования войдите или зарегистрируйтесь
я вставлял код из
drupal_pretty_login.txt
в блок
не забудьте включить фильтр php
Не работает на D6, может из-за того, что это только для D5?
- Для комментирования войдите или зарегистрируйтесь
да у меня вроде 6-ка и работает
на всякий случай даю код
<?php 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; ?>
- Для комментирования войдите или зарегистрируйтесь
да у меня вроде 6-ка и работает
на всякий случай даю код
Вставил ваш код в блок, формат ввода: PHP code, выбрал для блока регион, но вместо результата выполнения кода вижу сам код, причем какой-то порезанный:
<?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 ввожу, но режется это факт.:-( Не подскажете, что нужно сделать, чтобы не резалось?
- Для комментирования войдите или зарегистрируйтесь
к сожалению не использую этот редактор
лучше создать отдельную тему, спросить
тут, ведь тоже буедитор
- Для комментирования войдите или зарегистрируйтесь
не забудьте включить фильтр php
А я забыл :-( Спасибо за помощь
- Для комментирования войдите или зарегистрируйтесь
Здравствуйте, если в блоке входа поменять ссылку: user/login на user/login?destination=main_page, то попадаешь сразу не в свой профиль, а на главную страницу. В связи с этим вопрос: Как нужно поменять php код блока, чтобы выводилась при входе в эккаунт эта ссылка: user/login?destination=main_page, а не user/login Насколько я понял, ссылку с параметрами напрямую вводить в php код нельзя? Спасибо
- Для комментирования войдите или зарегистрируйтесь
Уважаемые, подскажите, пожалуйста, как сделать, чтобы после авторизации не перебрасывало автоматически на страницу профиля пользователя, а загружалась бы, например, главная страница
- Для комментирования войдите или зарегистрируйтесь
поиск по слову destination
- Для комментирования войдите или зарегистрируйтесь
поиск по слову destination
Нашел решение только для D5, для D6 решение найти не могу. Помогите, пожалуйста.
- Для комментирования войдите или зарегистрируйтесь
можно модуль login_destination, а можно дописать к урлу входа ?destination=put/kuda/nado/perenapravit/posle/vhoda
- Для комментирования войдите или зарегистрируйтесь
можно модуль 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
- Для комментирования войдите или зарегистрируйтесь
<?php
global $user;
if (!$user->uid) {
... }
?>Большое спасибо, очень помогли
- Для комментирования войдите или зарегистрируйтесь
Или поставьте модуль loginTobbogan
Так в том модуле можно вроде только поменять переадресацию при регистрации и переадресацию при подтверждении нового эккаунта? Или я что-то неправильно понял?
- Для комментирования войдите или зарегистрируйтесь
В закладку! не запутаться бы только в них
- Для комментирования войдите или зарегистрируйтесь
Много слов "вход". Мозги скисают, нужно классику читать.
- Для комментирования войдите или зарегистрируйтесь
есть новости?
- Для комментирования войдите или зарегистрируйтесь
Ммм... Россия-Германия 1:0.
- Для комментирования войдите или зарегистрируйтесь














Комментарии