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

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

Аватар пользователя Химический Али Химический Али 18 марта 2008 в 9:58

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

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

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

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

1:
2:

YaHoo:

Google:

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

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

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

Недостатки

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

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

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

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

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

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

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

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

ВложениеРазмер
Иконка простого текстового файла drupal_pretty_login.txt910 байт

Комментарии

Аватар пользователя igor701 igor701 19 марта 2008 в 14:56

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

Аватар пользователя Zlata Zlata 22 марта 2008 в 8:51

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

Аватар пользователя Химический Али Химический Али 22 марта 2008 в 16:38

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

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

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

Аватар пользователя Zlata Zlata 22 марта 2008 в 17:14

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

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

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

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

Аватар пользователя VladSavitsky VladSavitsky 27 мая 2008 в 13: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 Empiric 27 мая 2008 в 15:39

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

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

Аватар пользователя Химический Али Химический Али 28 мая 2008 в 9:34

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

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

Аватар пользователя VladSavitsky VladSavitsky 28 мая 2008 в 10:54

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

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

Аватар пользователя VladSavitsky VladSavitsky 28 мая 2008 в 19: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;} /* Выводим в одну строку элементы списка и отступы между ними */

Пока так.

Аватар пользователя rmcippo rmcippo 26 марта 2009 в 10:45

VladSavitsky wrote:
Drupal CookBook - Готовить может каждый!Решение было сохранено на сайте DrupalCookBook.ru:

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

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

Аватар пользователя Химический Али Химический Али 29 мая 2008 в 11: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'))

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

Аватар пользователя Химический Али Химический Али 27 августа 2008 в 17:18

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

Аватар пользователя Valeratal Valeratal 28 августа 2008 в 15:53

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

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

Аватар пользователя rmcippo rmcippo 26 марта 2009 в 11:48

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

Аватар пользователя rmcippo rmcippo 26 марта 2009 в 14:00

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

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

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

Аватар пользователя Valeratal Valeratal 26 марта 2009 в 14: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 rmcippo 26 марта 2009 в 19:52

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

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

Аватар пользователя rmcippo rmcippo 8 апреля 2009 в 0:00

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

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

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

Аватар пользователя rmcippo rmcippo 12 апреля 2009 в 19:29

Химический Али wrote:
поиск по слову destination
Нашел решение только для D5, для D6 решение найти не могу. Помогите, пожалуйста.

Аватар пользователя rmcippo rmcippo 13 апреля 2009 в 12:22

Химический Али wrote:
можно модуль login_destination, а можно дописать к урлу входа ?destination=put/kuda/nado/perenapravit/posle/vhoda
Не получается чего-то. Sad
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 апреля 2009 в 12: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');
    }
?>
Аватар пользователя rmcippo rmcippo 13 апреля 2009 в 16:46

<a href="mailto:vadbars@drupal.org">vadbars@drupal.org</a> wrote:
Или поставьте модуль loginTobbogan
Так в том модуле можно вроде только поменять переадресацию при регистрации и переадресацию при подтверждении нового эккаунта? Или я что-то неправильно понял?

Аватар пользователя noymen@drupal.org noymen@drupal.org 10 августа 2010 в 2:21

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

 <?php

  

global $user;

  if (!

$user->uid) {

    

$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')));
    
$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>';

  }
  echo 

$message;

?>

но как оказалось, не выводиться дефолтная аватарка, если у пользователя нет своей.
Можно ли как-то ввести проверку на отсутствие своей аватары и в зависимости от этого выводить или дефолтную, или ту которую загрузил пользователь?

Аватар пользователя veleslab veleslab 22 января 2011 в 7:55

Подскажите, а в 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).