Создать раздел с паролем на сайте MODX

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

  • Есть около 50 юзеров, каждому из которых нужно открыть доступ к их папке на Google Disc
  • После ввода пароля человека перекидывает на соответствующую ссылку
  • Пользователей регистрирует администратор сайта, он же внутри админки добавляет новые сочетания логин-пароль-ссылка

Что интерестного тут есть:

  • MIGX
  • Сниппеты, вызов чанка из сниппета
  • JS таймер
  • Сессии

План работ:

  • Создать TV MIGX
  • Создать сниппет
  • Создать чанки
  • Прописать CSS

MIGX TV migx_drivers

Тип ввода: migx

Вкладки формы:

[
  {
    "caption": "Ссылки для водителей",
    "fields": [
      {
        "field": "userid",
        "caption": "Логин (ID)"
      },
      {
        "field": "userpass",
        "caption": "Пароль"
      },
      {
        "field": "userlink",
        "caption": "Ссылка",
        "inputTVtype": "textarea"
      }
    ]
  }
]

Разметка колонок:

[
  {
    "header": "Логин",
    "dataIndex": "userid"
  },
  {
    "header": "Пароль",
    "dataIndex": "userpass"
  },
  {
    "header": "Ссылка",
    "dataIndex": "userlink"
  }
]

Сниппет [[!USgetDriverLink]]

// SESSION EXIT
if(!empty($_GET['us_session_exit'])){
    unset($_SESSION['us_userid'],$_SESSION['us_userpass']);
    $url = $modx->makeUrl($modx->resource->get('id'));
    $modx->sendRedirect($url);
}
$form = $modx->getChunk('USgetDriverLink_form');
// Session auth
if(!empty($_SESSION['us_userid']) && !empty($_SESSION['us_userpass'])){
    $input_userid = $_SESSION['us_userid'];
    $input_userpass = $_SESSION['us_userpass'];
}else{
    // Form auth
    if(empty($_POST['userid']) || empty($_POST['userpass'])){
        return $form;
    }else{
        $input_userid = strtolower(strip_tags(trim($_POST['userid'])));
        $input_userpass = strtolower(strip_tags(trim($_POST['userpass'])));
    }
}
// GET DATA FROM MIGX TV
$driver_data = json_decode($modx->resource->getTVValue('migx_drivers'), true);
$oa = array(
    "userid_true" => 0
    ,"userpass_true" => 0
    ,"userlink" => 0
    );
$return_data = false;

foreach($driver_data as $v){
    if($v['userid'] == $input_userid AND $v['userpass'] == $input_userpass){
        $oa['userlink'] = $v['userlink'];
        $return_data = $modx->getChunk('USgetDriverLink_tpl', $oa);
        if(!empty($_POST['userremember'])){
            $_SESSION['us_userid'] = $input_userid;
            $_SESSION['us_userpass'] = $input_userpass;
        }
    }else{
        if($v['userid'] == $input_userid){$oa["userid_true"] = 1;}
        if($v['userpass'] == $input_userpass){$oa["userpass_true"] = 1;}
    }
    if($return_data){
        break;
    }
}
if(!$return_data){
    unset($_SESSION['us_userid'],$_SESSION['us_userpass']);
    $return_data = $form;
    $return_data .= $modx->getChunk('USgetDriverLink_empty', $oa);
}
return $return_data;

Чанк [[$USgetDriverLink_form]]

<form action="[[~[[*id]]]]" method="POST">
    <input type="text" name="userid" placeholder="Логин (id)" class="fbw-text">
    <input type="text" name="userpass" placeholder="Пароль" class="fbw-text"><br>
    <label><input type="checkbox" name="userremember"> Запомнить меня</label><br><br>
    <input type="submit" value="Вход" class="gd_submitBtn">
</form>

Чанк [[$USgetDriverLink_empty]]

<div class="USgetDriverLink_empty">
    Ошибка доступа.
    [[+userid_true:is=`0`:then=`<strong>Не верно указан <span>логин</span>!</strong>`]]
    [[+userpass_true:is=`0`:then=`<strong>Не верно указан <span>пароль</span>!</strong>`]]
</div>

Чанк [[$USgetDriverLink_tpl]]

<div class="USgetDriverLink">
    Переход должен быть автоматически. 
    Вы успешно авторизаровались. Через <span id="DriverLink_timer">4</span> сек. Произойдет переход в Google Disc. Если этого не произошло — <a href="[[+userlink]]">перейдите по ссылке вручную</a>.<br><br>
    <a href="[[~[[*id]]]]?us_session_exit=1" style="font-weight:bold;">Сменить пользователя (Выйти)</a>
</div>
<script>
    setInterval(function(){
        $("#DriverLink_timer").html(function(){
            var timeLeft = parseInt($("#DriverLink_timer").text()) - 1;
            if(timeLeft >= 0){
                return timeLeft;
            }else{
                window.location = "[[+userlink]]";
                return 0;
            }
        });
    }
    , 1000);
</script>

CSS

.fbw-text{
    margin: 6px 0;
    box-sizing: border-box;
    padding: 6px;
    border: 1px solid #ccc;
    outline: none;
    -webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);
    box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);
    width:100%;
    font-family:inherit;
}
.fbw-text:focus {
    border-color: #66afe9 !important;
    outline: 0;
    -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,1);
    box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,1);
}
.gd_content_wr{
    text-align: center;
}
.gd_content_wr .fbw-text{
    width: 200px;
    display: inline-block;
}
.gd_content_wr form {
    width: 520px;
    margin: 0 auto;
    padding: 23px 30px;
    border: 8px solid #8dbd7e;
}
.gd_title{
    font-size:24px;
    font-weight: 600;
    margin-bottom: 15px;
}
.gd_submitBtn {
    padding: 6px 20px;
}
.USgetDriverLink_empty {
    margin-top: 10px;
    width: 520px;
    margin: 10px auto;
    background: #ef8080;
    color: #fff;
    padding: 10px 0;
}

В итоге на нужной странице размещаем сниппет [[!USgetDriverLink]] и все должно работать:)

Комментарии (0)

  1. Напишите первый комментарий
*Комментарий будет опубликован после проверки модератором

Похожие статьи

Генератор настроек MIGX

Документация на русском по MODX MIGX

Подсказки по работе и заготовки для MiniShop2

pdoPage и getImageList - Постраничная навигация MIGX

Импорт и экспорт в MiniShop2. Реализация 1

Как включить HTTPS (SSL) в MODX - Подробная инструкция

Генерация YML для выгрузки в маркет

Примеры работы с API MODX

Примеры выборки where, optionFilters, innerJoin

pThumb - ресайз изображений. Примеры использования.

Расширение свойств товаров minishop2

Примеры использования

Сайт на обслуживании (выключить сайт)

Добавить в письмо контактную информацию

Вывести getImageList только если он не пустой

Тип поля "Список ресурсов" (resourcelist) с ограничением по родителю (parents)

Оформление и настройка easyComm. Комментарии и отзывы на сайте.

Поиск на сайте с пакетом SimpleSearch

Простая и симпатичная галерея fancybox

Подсчет и вывод количества потомков ресурса в MODX

Галерея. Вывести обложки альбомов и фотографии

Вывод tv-параметров в формате -

Отредактировать письмо о заказе - добавить ТВ поле, или что-то еще

Quip для MODX. Более рабочий вариант

pdoResources Заготовки для работы

Сниппет для вывода размера и расширения файла

Простой аудио-плеер HTML5

Вывести список всех опций MiniShop2

Слайдер Slick slider в контенте ресурса

Как контролировать кэш CSS и скриптов

Изменить цену на товар в зависимости от количества при добавлении в корзину minishop2

Подключить MODX в стороннем PHP файле

Простейшая авторизация

Как создать ресурс процессором $modx->runProcessor('resource/create', $props)

Красивое адаптивное меню под pdoMenu

Массово обновить ТВ, или другое поле через базу

Создать свою страницу в админке

Изменить формат номера заказа

Сообщение о том, что сайт использует Cookie

Получить grandparent. Вывести родитель родителя

Симпатичный список файлов, загружаемых к ресурсу через MIGX

Установить шаблон по-умолчанию для новых, создаваемых ресурсов

Вывести все доступные плейсхолдеры

Создать источник файлов

Отредактировать шаблон письма

Добавить скрипт перед тегом body

Общая сумма по каждому товару в корзине Minishop2

Создать раздел с паролем на сайте MODX

Что делать если ее приходит почта администратору

Фильтрация по TV параметрам в msProducts

Дата на русском

FontAwesome - часто используемые иконки для шаблонов MODX

Создать пакет с пользовательской таблицей

Заготовки для работы

Курсы валют с cbr.ru на PHP

Загрузка сниппета после загрузки страницы через AjaxSnippet

getResources заготовки

Обязательный чекбокс при оформлении заказа

Обработка остатков заказа в miniShop2

Соответствие названия классов с названиями таблиц в MySQL

Разбить вывод pdoResources на несколько колонок (блоков)

Баннеры с использованием BannerY

Обновить alias (псевдоним) у всех ресурсов

CSS для постраничной навигации pdoPage

Вывести время загрузки (формирования) страницы

Расширить таблицу site_content (объект modResource) за 5 минут

Вырезать кавычки — фильтр-сниппет MODX

Счетчик посещений и скачиваний для сортировки ресурсов

Бесплатная доставка от 5000 рублей в MiniShop2

Динамическое поле emailSubject в FormIt

Скрыть информацию о том, что сайт работает на MODX

Отсортировать ресурсы по количеству комментариев Quip MODx

Изменить цену на товар, если в корзине лежит товар из особой категории minishop2

Создать редирект через autoRedirector API

Ответ для сервиса moneta.ru

Cортировать по списку id в pdoResources и pdoTools

Вывести 404 ошибку по настройке TV MODX

Email сделать не обязательным полем

Как разместить исходный код сниппета на сайте, в документации

Ускорить установку MODX revo до пары кликов

Постраничная навигация — набор параметров и CSS PdoPage

Сделать все элементы статичными для Git и IDE

Не работает подгрузка товаров ajax mfilter2 на мобильном

Сделать поле размер обязательным

Настройка стилей для комментариев Tickets

Подключить текстовой редактор к доп. полям ресурса

Кастомный чанк для AdminPanel

Динамическая замена шаблона ресурса - плагин

Разместить корзину внутри блока с оформлением заказа

Плагин для формирования замороженных URL с редиректом

xPDO Выборка из одной таблицы с зацепкой значения из другой

Приветственный экран / заглушка на сайт

Вложенные условия в xPDO MODX

Вывести список всех родителей в ТВ поле ресурса

Как получить данные пользователя сразу после авторизации через API

Вывести список всех емэйлов miniShop2

Если getParentIds не работает в плагине

Контролировать кэширование файлов CSS и JS MiniShop2

Не приходят / не отправляются письма - в чем причина?

Кэширование в MODX: использование $modx->cacheManager

Наш сайт использует куки, нажмите «ОК» если вы не против
OK