Куда идем?

Тренды современного дизайна диктуют нам легкость, адаптивность и удобство использования каждого элемента сайта. Не знаю как вам, а мне кажется, что большая форма авторизации на сайте (да, как на wedal.ru справа) давно уже не является необходимостью, а представляет собой скорее раздражающий фактор. Почему бы не заменить ее одной красивой кнопкой или ссылкой «Вход», при нажатии на которую появляется всплывающее окно с формой для ввода логина и пароля? Мне кажется, это смотрится очень лаконично. В этой статье я расскажу, как добавить такую функцию к вашему сайту на Joomla.

Данная задача решается быстро и просто. Ниже я распишу ее по пунктам.

1) Подключение JQuery и Facebox

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

JQuery в вашем шаблоне может быть уже подключен. Если вы используете Joomla 3, то скорее всего подключен. Как узнать наверняка? Откройте главную страницу сайта, кликните по ней правой кнопкой мыши и выберите код «Просмотр исходного кода»(в разных браузерах этот пункт называется по-разному, но смысл такой же). В открывшимся окне html-кода страницы нажмите «ctrl + F» и введите в строке поиска «jquery». Если текст будет найдет, то библиотека JQuery подключена. Если же нет, значит нет и нужно ее подключить.

Скрипт Facebox нужно скачать по этой ссылке. После скачивания извлеките архив. Из него нам понадобится только папка src. Переименуйте ее в facebox и закачайте на сайт в папку templates/ваш_шаблон/

Подключить JQuery и Facebox можно добавив в файле index.php вашего шаблона между тегами <head></head> следующий код:

Если  JQuery уже подключен:

<script src="/templates/<?php echo $this->template ?>/facebox/facebox.js"></script>
<link href="/templates/<?php echo $this->template ?>/facebox/facebox.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
	jQuery(document).ready(function(jQuery) {
	  jQuery('a[rel*=facebox]').facebox({
	  })
	})
</script>

Если JQuery еще не подключен:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">jQuery.noConflict();</script>
<script src="/templates/<?php echo $this->template ?>/facebox/facebox.js"></script>
<link href="/templates/<?php echo $this->template ?>/facebox/facebox.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
	jQuery(document).ready(function(jQuery) {
	  jQuery('a[rel*=facebox]').facebox({
	  })
	})
</script>

После подключения в исходном коде страницы появятся ссылки, которые ведут к файлам. При клике по ним должен открываться код файлов. Так можно проверить, что все подключено правильно.

Еще одна деталь – в файле templates/ваш_шаблон/facebox/facebox.js в строках 88, 89, 96 нужно указать правильные пути к картинкам. Это будет:

/templates/ваш_шаблон/facebox/loading.gif и остальные по аналогии.

2) Создание позиции для модуля

Теперь, когда скрипт подключен, нам нужно создать специальную скрытую позицию для модуля авторизации. Для этого открываем файл templates/ваш_шаблон/index.php, находим в нем закрывающий тег </body> и перед ним добавляем:

<div id="login-modal" style="display:none;">
	<jdoc:include type="modules" name="login" style="none" />
</div>

Этим кодом мы создали позицию с именем login, которую теперь можем использовать в админке. При чем, эта позиция скрыта по умолчанию и все, что в ней опубликовано, будет в коде страницы, но не будет на ней видно. Так нужно.

3) Создание модуля

После того, как позиция создана, нужно создать сам модуль. Для этого идем в менеджер модулей, добавляем новый модуль типа Авторизация(login), либо, если он уже создан, редактируем его, изменяя позицию на login. В списке позиций таковой не будет. Нужно просто записать ее вручную. Модуль нужно опубликовать.

4) Создание кнопки/ссылки

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

Куда вставить этот код дело ваше. Кому куда удобнее.  Я предложу интересный вариант с видом в верхней части браузера. Для него нужно:

4.1) Добавить в templates/ваш_шаблон/index.php, сразу после открывающего тега <body>:

<a id="login-button" href="#login-modal" rel="facebox">Вход</a>

4.2) В файле templates/ваш_шаблон/facebox/facebox.css добавить в конец:

#login-button{
    background: none repeat scroll 0 0 #0088CC;
    border-radius: 0 0 5px 5px;
    color: #FFFFFF;
    display: block;
    font-size: 14pt;
    height: 30px;
    left: 45%;
    line-height: 20pt;
    position: absolute;
    text-align: center;
    top: 0;
    width: 10%;
}

Вот и все. Если вы нигде не ошиблись, то справа экрана появится вот такая кнопка, открывающая всплывающее окно:

joomla modal login

Напоследок добавлю, что таким способом можно выводить не только модуль авторизации. Вообще любой модуль, который будет помещен в позицию login. Можно придумать много интересных решений.

----------------------------------------

Если вам интересна данная тема, а также Joomla и Virtuemart в общем, то советую заглянуть на сайт http://site-on.net. Этот сайт приятно удивил. Я даже задержался и прочитал несколько статей автора. Удивительно, но почерпнул для себя кое-что новое. Есть статьи по Joomla и Virtuemart 2 c готовыми решениями. Также есть раздел, посвященный продвижению сайтов. Короче говоря, посмотрите.

Об авторе
Wedal
(Виталий). Веб-разработчик полного цикла (Full Stack). Создатель и автор сайта Wedal.ru.
Основной профиль – создание сайтов и расширений на CMS Joomla.
Добавить комментарий

Комментарии  
1
Нормуль статья. Сталкивался с подобной необходимостью сделать авторизацию во всплывающем окне, правда тогда решал ее с помощью одного из многочисленных модулей.
0
Вопрос к знающим.
Сайт на Joomla 3. Пока тестируется на локалке. Проблема в том, что после авторизации пользователя, сайт заметно очень тормозит. Если не авторизоваться, то работает "на щелчок". Сторонние расширения авторизации отключены. На форуме Joomla говорят, что на реальном хостинге эта проблема исчезнет ввиду ряда причин, связанных с работой на локалке. Так ли это? Буду благодарен.
Андрей.
0
Тоже делаю сайты на joomla авторизацию для сайта во всплывающем окне еще делать не приходилось но возможно столкнусь с этим. Возьму статью на заметку.
0
Прошу заметить, что с этим я столкнулся лишь после того, как на сайте стал устанавливать права доступа. Вариантов авторизации протестировал n-е количество, включая предложенный автором статьи. Чтобы исключить любые ошибки, связанные со сторонними расширениями, я их просто удалил и оставил авторизацию "родную" Joomla 3. Оказалось, что результат тот же: - после авторизации скорость загрузки страниц падает в разы (сайт на локалке). Остается только вариант с установкой на хостинг.
С уважением Андрей.
0
kanevlife, включите в настройках Joomla отладку системы и сравните данные, которые она выдаст(внизу страницы) до и после авторизации.
0

Цитирую Wedal:

kanevlife, включите в настройках Joomla отладку системы и сравните данные, которые она выдаст(внизу страницы) до и после авторизации.


Спасибо за совет. Включил отладку. Так выглядят запросы к базе данных до авторизации: , а так после:. Если Вас не затруднит, то подскажите, пожалуйста, как удалить дубликаты запросов. Может где-то уже есть такой урок для чайников?
Буду благодарен.
С уважением Андрей.
2
Добрый день! хотел бы спросить как можно сделать что бы при нажатии на ссылки,например Регистрация,модуль регистрации нового пользователя открывались в этом же окне,как это сделать?
0
вот таких статей миллион, на тему как сделать всплывающее окно (кстати, а чем вас предустановленный скрипт не устроил? зачем подключать еще?)
и ни в одной из подобных статей почему-то нет дальнейшей обработки формы, обработки ошибок в том же всплывающем окне... или может я чего-то не понимаю? напишите пожалуйста про это, полезнее будет, имхо
0
Привет Wedal! Очень полезная статья. Поставил скрипт, все работает. Только ты забыл указать что в файле tempaleDetails.xml надо прописать в разделе files каталог facebox и в разделе position login.
0
Ilchyk, это необходимо только если вы собираетесь устанавливать этот шаблон где-то еще. Если в уже установленном, то не обязательно.
0
Привет! Недавно заметил что у меня этот кейс конфликтует с корзиной. Добавляем товар, заходим в корзину видим добавленный товар. Внизу кликаем по ссылке "Условия обслуживания" и открывается всплывающее окно с этими условиями. Но вместе с этим окном на заднем плане открывается еще одно вспл. окно авторизация. Писал jQuery.noConflict() не помогает. Когда убираю подключения jQuery с этим кейсом тогда корзина работает правильно. Если вставляю код первого варианта "jQuery уже подключен" то корзина вообще не работает.
0
Ilchyk, дело в том, что всплывающее окно с условиями обслуживания вызывается тем же атрибутом, что и с авторизацией. Просто измените код:

Код:

 jQuery('a[rel*=facebox]').facebox({ 


на:

Код:


jQuery('a[rel*=facebox2]').facebox({


и ссылку:

Код:

<a id="login-button" href="#login-modal" rel="facebox">Вход</a>


на:

Код:

<a id="login-button" href="#login-modal" rel="facebox2">Вход</a>

0
добрый день!
Все сделала, как вы сказали, но форма авторизации не открывается.
В чем может быть проблема?

http://iti.yostudio.ru
0
получилось сделать форму во всплывающем окне
теперь другой вопрос, а как сделать так чтобы модуль был виден авторизованному пользователю?
0
falmael, сам модуль можно настроить с помощью уровней доступа. Эта опция есть в настройках модуля. А вот ссылка "Вход" - это уже другой вопрос. Проще всего создать под нее еще один модуль простого HTML и настроить для него аналогичный уровень доступа. Подробнее про контроль доступа можно почитать здесь: http://wedal.ru/uroki-joomla/joomla-1-6-chast-4-acl.html
0
Отличная статья! Но возник вопрос как например вместо слова Вход вывести например: Привет "имя пользователя"! я пытался, но ничего не вышло, вот что я писал в index.php в head:

Код:

<?php if($user->id!=0){ <div><ins><a href="#login-modal" rel="facebox" class="linkvhoda">Вход в интернет-магазин</a></ins><div>} endif; ?>

но кроме белого экрана я ничего не увидел..
1
hels, про белый экран можно почитать здесь: http://wedal.ru/uroki-joomla/joomla-faq.html
Это ошибка PHP. Направление мыслей у вас верное, но проверка на авторизованного пользователя выполняется немного не так. Вот правильный код:

Код:


$user = JFactory::getUser();
if (!$user->guest) {
echo 'Привет, ' . $user->username;
}

0

Цитирую Wedal:

hels, про белый экран можно почитать здесь: http://wedal.ru/uroki-joomla/joomla-faq.html
Это ошибка PHP. Направление мыслей у вас верное, но проверка на авторизованного пользователя выполняется немного не так. Вот правильный код:

Код:


$user = JFactory::getUser();
if (!$user->guest) {
echo 'Привет, ' . $user->username;
}



Спасибо, но уже сделал по своему, вот можно глянуть на сайте fetra.com.ua (там ссылка в хедере, я просто накладываю сверху через z-index при входе новую надпись с белым фоном, может как-то коряво но как смог.. очень интересно была бы реализация без такой химии, а через php (но я в нем не силен, я учил только С билдер..) я понимаю как должно быть по логике, что if ($user->guest) {
Вход в интернет магазин
}
ELSE { echo 'Привет, ' . $user->username; } но так не пашет.. и да в моем варианте коряво выглядит ссылка в IE(одни проблемы с ним..)
0
hels, все правильно написали в этот раз. Почему не работает? Включите отображение ошибок PHP и увидите, где ошиблись. Скорее всего где-то в синтаксисе. В логике ошибок нет.
1
Привет Wedal! Делал всё по инструкции. Ссылку разместил в HTML-модуле. Всплывающее окно открывается, но затемнённым как и вся страница. При клике в любом месте, уходит. Где может быть ошибка? Спасибо!
1
Masnerin, скорее всего какой-то конфликт с CSS шаблона. Так не сказать. Нужно смотреть. Покажите живой пример.
1
Вот сайт:
http://www.interart.masnerin.com/index.php/ru/
Ссылка на "вход/регистрацию" в правом верхнем углу.
1
Masnerin, в файле:
/templates/ot_sexyqueen/facebox/facebox.css
исправьте:

Код:


#facebox {
left: 0;
position: absolute;
text-align: left;
top: 0;
z-index: 100;
}


на:

Код:


#facebox {
left: 0;
position: absolute;
text-align: left;
top: 0;
z-index: 65560;
}

0
Спасибо большое! Заработало!!!
0
Подскажите пожалйста, все сдела как написано, несколько раз перечитал перепроверил, кнопка есть но при нажатии ничего не происходит в низу ссылка ведет мой сайт/#login-modal ? Что может быть не так? шаблон использую Helix3 (Joomla 3.7)
0
Евгений, если всплывающее окно не появляется, значит facebox не срабатывает. Вам нужно нажать в браузере F12, в появившемся веб-инспекторе перейти на вкладку "консоль", обновить страницу сайта, кликнуть по ссылке. Веб-инспектор покажет ошибку, которую нужно исправить.
0
Здравствуйте, спасибо за понятное и аккуратное, как всегда, описание процесса.)))
Сделал по вашей инструкции, все получилось. Но - мне нужно открыть форму регистрации, а не входа. И вот с этим засада: В открытой по вашей инструкции форме входа есть ссылка на Регистрацию, при переходе по ней уже открывается обычная страница. Если в код Вход
0
Валерий, регистрации нет в виде модуля. Это отдельная страница компонента users. С ней посложнее, но тоже возможно. Вам нужно при клике по ссылке через JS вызывать по AJAX страницу по такой ссылке:
index.php?option=com_users&view=registration&tmpl=component
и далее заменять ей блок авторизации, открытый во всплывашке, либо, если вы хотите вызывать регистрацию сразу, сделайте ссылку для Facebox для вызова AJAX по инструкции из документации. И вставьте этот же адрес.
0
вопрос не по теме статьи.
Как ты встроил рейтинг организации в Яндексе в описание профиля?
0
Максим, Яндекс.Справочник дает код для своего виждета. Остается только вставить его в нужное место на сайте.
0
Здраствуйте.
Сделал по инструкции, но с отличием: Joomla 4, Helix Ultimate 2
Вышло вот так: могу уловить кнопку под хеадером.

Подскажите, как можно это подправить?
0
bshumylo, не подскажу только по описанию - нужно смотреть стили. Скорее всего или какае-то стили перехватываются другими, или есть проблемы со скриптом всплывающего окна.
0
Спасибо пригодилось