Задача, которая решалась нижеследующим способом заключалась в следющем:
- Есть около 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)
Не писать ответ