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