Есть такой код:
<nav>
<div class="name">Законопроекты</div>
<?php if (isset($_SESSION['logged_user'])) { ?>
<ul>
<a id="exit" href="#"><li>Выход</li></a>
</ul>
<?php } else { ?>
<ul>
<a data-fancybox data-options='{"src": "#login", "touch": false, "toolbar" : false, "smallBtn" : false}' href="javascript:;"><li>Вход</li></a>
<a data-fancybox data-options='{"src": "#register", "touch": false, "toolbar" : false, "smallBtn" : false}' href="javascript:;"><li>Регистрация</li></a>
</ul>
<?php } ?>
</nav>
То есть когда человек залогинен видно одно, когда нет - другое. Логин происходит без перезагрузки страницы, от чего данное меню меняется только после принудительного обновления страницы. Как сделать так, чтобы меню менялось моментально без перезагрузки в зависимости от наличия данных в сессии php?
Есть несколько вариантов, как это сделать.
Вариант первый:
Напримеp:
CSS:
.signIn{
visibility: visible;
//other styles
}
.notSignIn{
visibility:collapsed; //or hidden
//other styles
}
HTML & PHP:
<nav>
<div class="name">Законопроекты</div>
<?php if (isset($_SESSION['logged_user'])) { ?>
<ul class="notSignIn">
<a id="exit" href="#"><li>Выход</li></a>
</ul>
<ul class="signIn">
<a data-fancybox data-options='{"src": "#login", "touch": false, "toolbar" : false, "smallBtn" : false}' href="javascript:;"><li>Вход</li></a>
<a data-fancybox data-options='{"src": "#register", "touch": false, "toolbar" : false, "smallBtn" : false}' href="javascript:;"><li>Регистрация</li></a>
</ul>
<?php } else { ?>
<ul class="signIn">
<a id="exit" href="#"><li>Выход</li></a>
</ul>
<ul class="notSignIn">
<a data-fancybox data-options='{"src": "#login", "touch": false, "toolbar" : false, "smallBtn" : false}' href="javascript:;"><li>Вход</li></a>
<a data-fancybox data-options='{"src": "#register", "touch": false, "toolbar" : false, "smallBtn" : false}' href="javascript:;"><li>Регистрация</li></a>
</ul>
<?php } ?>
Потом после Ajax запроса, Вы просто подменяете классы для Ваших ul
.
Классы можно назвать visible
и notVisible
соответсвенно. Или вообще сделать один класс visible
:
.visible{
visibility: visible !important;
}
а к элементам применить visibility:hidden
Вариант второй:
На стороне бэкенда (тот скрипт, где Ваш Аjax "логинит" пользователя), сделать примерно следующее:
<?php
/*
* Check auth
* $isAuth = **auth result**(true/false)
*/
if($isAuth){
return
"<ul><a id="exit" href="#"><li>Выход</li></a></ul>";
} else {
return
"<ul>
<a data-fancybox data-options='{"src": "#login", "touch": false, "toolbar" : false, "smallBtn" : false}'href="javascript:;"><li>Вход</li></a>
<a data-fancybox data-options='{"src": "#register", "touch": false, "toolbar" : false, "smallBtn" : false}' href="javascript:;"><li>Регистрация</li></a>
</ul>"
}
В JS (JQuery же используете?):
success: function(data) { //часть JQuery Ajax call'a
$('#authWrap').html(data);
},
Код HTML/PHP страницы:
<nav>
<div class="name">Законопроекты</div>
<div id="authWrap">
<?php if (isset($_SESSION['logged_user'])) { ?>
<ul>
<a id="exit" href="#"><li>Выход</li></a>
</ul>
<?php } else { ?>
<ul>
<a data-fancybox data-options='{"src": "#login", "touch": false, "toolbar" : false, "smallBtn" : false}' href="javascript:;"><li>Вход</li></a>
<a data-fancybox data-options='{"src": "#register", "touch": false, "toolbar" : false, "smallBtn" : false}' href="javascript:;"><li>Регистрация</li></a>
</ul>
<?php } ?>
</div>
</nav>
Таким образом, при вызова Ajax функции в зависимости от результата Вы будете подменять содержимое <div id="authWrap"></div>
.
Полезные ссылки:
div'a
с помощью JQuery;div'a
без JQuery;Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Хочу создать эмулятор гитары на android с передачей нажатий на компьютер, чтобы нажатые на экране клавиши воспринимались игрой как нажатие реальных...
Настраиваю Spring Security и столкнулся с проблемой когда в конфигурации указано доступ к определенным адресам предоставлять только при авторизации...