Лаконичная замена блока «Вход» (+всплывающая форма входа)

Прислано: Химический Али

вт, 18/03/2008 - 06:58

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

Представленный сниппет позволяет экономить пространство, не засорять дизайн увесистым блоком для входа, удачно вписывается во многие темы. такое решение модное!

ЛайвИнтернет:

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

1:
2:

YaHoo:

Google:

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

Разумеется, этот сниппет можно доработать, сделав картинку пользователя ссылкой на профиль. Тогда он станет еще симпатичнее!
Или еще похлеще: имя пользователя сделать ссылкой на профиль, а картинку - ссылкой на страницу правки профиля.

Код в приложении. Просто вставьте его в нужное место шаблона, не забыв подсунуть в шаблон и иконку пользователя с именем user.gif.
Отображение можно изменить путем добавления в css-файл стиля #login.

Недостатки

Если вы испольузете какие-то расширения (например, модуль OpenID), изменяющие форму входа, вам прийдется дорабатывать сниппет, хотя на странице входа (/user) Все будет штатно.

зы. Картинка нагло украдена с известного сервиса и пока носит лишь характер рабочей заглушки, замените ее своей.

Всплывающая форма. 7 июля 2009

Время течет непрерывно и все вокруг меняется. Пришло время измениться и образу входа.

От блока входа мы уже избавились, но приобрели новое неудобство: чтобы войти на сайт нам требовалось перейти на новую страницу. Это лишний траффик, от которого нужно всегда избавляться. Чтобы решить эту проблему, люди придумали всплывающие формы входа. Вы кликаете по ссылке входа, но не переходите к новой странице - форма входа тут же отображается на экране и вы можете вводить логин/пароль.

Но как это сделать? Да запросто.

Скачайте и установите модуль ThickBox. Это модуль для вского рода всплываний со спецэффектами, часто используется для показа картинок в галереях. Но его можно использовать и для нашего случая, причем для этого вообще ничего делать не надо - просто отметьте соотвествующую опцию в настройках модуля и все!

Модуль самостоятельно отыщет на странице ссылку на вход, с помощью jQuery обработает ее и сделает так, что при клике по ссылке будет всплывать форма входа!

Прикрепленный файлРазмер
drupal_pretty_login.txt910 байтов

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано Valeratal в вт, 18/03/2008 - 09:41.

интересная мысль, надо будет обдумать


Опубликовано player в вт, 18/03/2008 - 12:19.

Спасибо. В дополнение к вопросу о компактности Compact Forms Перевод есть у Sa_Bo_Nim


Опубликовано VladSavitsky в вт, 18/03/2008 - 21:38.

Идея хорошая. Сейчас попробую применить. Спасибо.
Над юзабилити действительно нужно работать!


Опубликовано igor701 в ср, 19/03/2008 - 11:56.

Молодец! Давно хотел чего-нить подобного!
ИМХО удобно ссылку на профиль делать с имени пользователя - если для самого пользователя, то для редактирования (правки профиля), если для других пользователей или гостей - то только для просмотра.


Опубликовано Zlata в сб, 22/03/2008 - 05:51.

Спасибо большое!
уже установила, нравится!
правда, почему то вылезли вопросики - ну это несложно вручную было заменить на русские буквы )


Опубликовано Химический Али в сб, 22/03/2008 - 13:38.

Zlata написал(а):

Спасибо большое!
уже установила, нравится!
правда, почему то вылезли вопросики - ну это несложно вручную было заменить на русские буквы )

Думаю, в вашем случае было бы полезно убрать ссылку "Забыли пароль", т.к. происходит это редко и ссылка на восстановление есть на старнице входа, зато у вас все влезет в одну строку.

Вопросики из-за несоответствия кодировки, хотя я вроде в utf8 делал...


Опубликовано Zlata в сб, 22/03/2008 - 14:14.

Slavyansk.net.ru написал(а):
Zlata написал(а):

Спасибо большое!
уже установила, нравится!
правда, почему то вылезли вопросики - ну это несложно вручную было заменить на русские буквы )

Думаю, в вашем случае было бы полезно убрать ссылку "Забыли пароль", т.к. происходит это редко и ссылка на восстановление есть на старнице входа, зато у вас все влезет в одну строку.

Вопросики из-за несоответствия кодировки, хотя я вроде в utf8 делал...

да, я хотела убрать, но не смогла кусок из кода убрать по незнанию :)
а теперь еще раз попробовала - и получилось! :) спасибо!! :)


Опубликовано gestapo в сб, 05/04/2008 - 16:54.

Спасибо, автору прегодилсоь!!


Опубликовано VladSavitsky в вт, 27/05/2008 - 09:39.

Переделал чуток ваш скрипт.
В 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/


Опубликовано Empiric в вт, 27/05/2008 - 11:39.

Да, только к такому решению привязывать thickbox обязательно. Иначе вы обрубаете функционал и заставляете пользователя грузить еще одну страницу просто так, чтобы только залогиниться.

Хотя thickbox мне не очень нравится - форма входа грузится только по клике на ссылку входа, хотя в идеале проверка на яваскипт и подгрузка этой формы входа должна идти сразу с разрузкой страницы, чтобы она появлялась сразу без всяких прелоадеров.


Опубликовано Химический Али в ср, 28/05/2008 - 05:34.

Избаловали вас аяксы всякие :)

Я исхожу из того, что пользователь логинится один раз на пару недель, пока куки позволяют ему заходить на сайт автоматически. Загрузить раз в неделю-другую страницу входа, простите, не за падло.


Опубликовано VladSavitsky в ср, 28/05/2008 - 06:54.

Согласен с Али. При этом нужно учесть, что для одного сайта форма входа должна быть в центре на главной, а для других она нужна редко...

Я кстати в своём варианте добавил микроформат rel="nofollow" для ссылок - мне кажется, что ссылки на страницу регистрации на по всему сайту совершенно не нужно индексировать. Ваше мнение?


Опубликовано VladSavitsky в ср, 28/05/2008 - 15:39.

Переписал код, чтобы было легче им управлять и настраивать. Элементы выводятся в виде списка в одну строку...
В 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;} /* Выводим в одну строку элементы списка и отступы между ними */

Пока так.


Опубликовано VladSavitsky в ср, 28/05/2008 - 19:32.

Drupal CookBook - Готовить может каждый!Решение было сохранено на сайте DrupalCookBook.ru:
Компактный блок входа и регистрации пользователей.
Авторы, предложившие решения, также указаны в сохранённой статье.


Опубликовано Химический Али в чт, 29/05/2008 - 07:03.

VladSavitsky, при использовании вашего варианта возникает проблемка при заходе на сайт без авторизации:

warning: htmlspecialchars() expects parameter 1 to be string, array given in z:\home\node.ru\www\includes\bootstrap.inc on line 635.

разведка боем показала, что причина в добавлении

, array('attributes' => array('rel'=>'nofollow')) 

Пока убрал - ошибка исчезла.


Опубликовано kiev1 в чт, 29/05/2008 - 07:40.

спасибо, а то закладки не работают


Опубликовано Valeratal в ср, 27/08/2008 - 09:07.

а как быть с блоком навигация у авторизировашегося пользователя?
куда деть эту кучу ссылок? :)


Опубликовано Химический Али в ср, 27/08/2008 - 13:18.

Вообще-то, это уже другой блок, но...
из нужного там только трекер, "Создать..." и ссылка на админку. Админка нужна толкьо админу, трекер выносится для удобства на видное место в любом месте типа "Новенькое". "Создать" я бы тоже куда-нить в сторону убрал.


Опубликовано sadmin в ср, 27/08/2008 - 13:22.

Спасибо, интересное решение


Опубликовано Valeratal в чт, 28/08/2008 - 11:53.

Да, там не только "создать" У меня например

Входящие
Мои баллы
Мои друзья
Мои закладки
Мои учетные данные
Мой блог
Мой HR-Portal
Пригласить друга
Добавить:
HR-Лента


Опубликовано Химический Али в пт, 29/08/2008 - 13:33.

И что мешает вынести все это в свой блок или профиль?


Опубликовано Valeratal в пт, 10/10/2008 - 06:01.

в профиль не умею выводить


Опубликовано Химический Али в пт, 10/10/2008 - 10:44.

В натсройках блока "Показывать только на указанных страницах:

user/*
users/*"


Опубликовано Valeratal в пт, 10/10/2008 - 10:58.

ок, попробую


Опубликовано rmcippo в чт, 26/03/2009 - 07:45.

VladSavitsky написал(а):

Drupal CookBook - Готовить может каждый!Решение было сохранено на сайте DrupalCookBook.ru:
Компактный блок входа и регистрации пользователей.
Авторы, предложившие решения, также указаны в сохранённой статье.

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


Опубликовано Valeratal в чт, 26/03/2009 - 08:28.

добавить снипет в блок
и блок выводить где надо :)


Опубликовано rmcippo в чт, 26/03/2009 - 08:48.

Valeratal написал(а):

добавить снипет в блок
и блок выводить где надо :)

Блок выводится где надо, но пустой :-) В блок вставил <?php echo phptemplate_flat_login();?>, но не работает, подскажите пож-та, как надо?


Опубликовано Valeratal в чт, 26/03/2009 - 08:58.

я вставлял код из
drupal_pretty_login.txt

в блок
не забудьте включить фильтр php


Опубликовано rmcippo в чт, 26/03/2009 - 09:41.

Все понял, как надо спасибо


Опубликовано rmcippo в чт, 26/03/2009 - 11:00.

Valeratal написал(а):

я вставлял код из
drupal_pretty_login.txt

в блок
не забудьте включить фильтр php

Не работает на D6, может из-за того, что это только для D5?


Опубликовано Valeratal в чт, 26/03/2009 - 11:02.

да у меня вроде 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;
?>


Опубликовано rmcippo в чт, 26/03/2009 - 16:52.

Valeratal написал(а):

да у меня вроде 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?>   

Подскажите, пожалуйста, в чем может быть дело? Спасибо


Опубликовано Valeratal в чт, 26/03/2009 - 17:03.

это у вас tiny или fck режет php :)


Опубликовано rmcippo в чт, 26/03/2009 - 17:32.

Да я через BUEditor ввожу, но режется это факт.:-( Не подскажете, что нужно сделать, чтобы не резалось?


Опубликовано Valeratal в чт, 26/03/2009 - 19:09.

к сожалению не использую этот редактор
лучше создать отдельную тему, спросить
тут, ведь тоже буедитор


Опубликовано rmcippo в чт, 26/03/2009 - 20:15.

Valeratal написал(а):

не забудьте включить фильтр php

А я забыл :-( Спасибо за помощь


Опубликовано rmcippo в вт, 07/04/2009 - 20:00.

Здравствуйте, если в блоке входа поменять ссылку: user/login на user/login?destination=main_page, то попадаешь сразу не в свой профиль, а на главную страницу. В связи с этим вопрос: Как нужно поменять php код блока, чтобы выводилась при входе в эккаунт эта ссылка: user/login?destination=main_page, а не user/login Насколько я понял, ссылку с параметрами напрямую вводить в php код нельзя? Спасибо


Опубликовано rmcippo в вс, 12/04/2009 - 11:51.

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


Опубликовано Химический Али в вс, 12/04/2009 - 12:24.

поиск по слову destination


Опубликовано rmcippo в вс, 12/04/2009 - 15:29.

Химический Али написал(а):

поиск по слову destination

Нашел решение только для D5, для D6 решение найти не могу. Помогите, пожалуйста.


Опубликовано Химический Али в пн, 13/04/2009 - 06:37.

можно модуль login_destination, а можно дописать к урлу входа ?destination=put/kuda/nado/perenapravit/posle/vhoda


Опубликовано rmcippo в пн, 13/04/2009 - 08:22.

Химический Али написал(а):

можно модуль 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. Может быть, можно как-то эту функцию переопределить, чтобы не править прямо в модуле?


Опубликовано Химический Али в пн, 13/04/2009 - 08:37.

<?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');
    }
?>


Опубликовано vadbars@drupal.org в пн, 13/04/2009 - 10:15.

Или поставьте модуль loginTobbogan


Опубликовано rmcippo в пн, 13/04/2009 - 12:44.

Химический Али написал(а):

<?php
    
global $user;
    if (!
$user->uid) {
       ...   }
?>

Большое спасибо, очень помогли


Опубликовано rmcippo в пн, 13/04/2009 - 12:46.

vadbars@drupal.org написал(а):

Или поставьте модуль loginTobbogan

Так в том модуле можно вроде только поменять переадресацию при регистрации и переадресацию при подтверждении нового эккаунта? Или я что-то неправильно понял?


Опубликовано Freedom в ср, 22/04/2009 - 19:01.

В закладку! не запутаться бы только в них


Опубликовано Химический Али в вт, 07/07/2009 - 12:30.

Много слов "вход". Мозги скисают, нужно классику читать.


Опубликовано afishi в ср, 19/05/2010 - 08:23.

есть новости?


Опубликовано Химический Али в пн, 24/05/2010 - 11:19.

Ммм... Россия-Германия 1:0.


Новое на сайте

Ссылки партнёров