Служебные страницы системы управления, например: окно редактирования регистрационных данных, можно отображать в стиле вашего сайта. Причем выводить их можно на отдельной странице, в отдельном блоке или в модальном окне.
Изучим этот вопрос на примере страницы авторизации.
Страница авторизации открываются по запросу href="?login"
. Это означает, что будет отработан служебный скрипт BLOX/scripts/login.php, который выведет страницу с помощью шаблона BLOX/scripts/login.tpl. Второй файл нам и понадобиться в дальнейшем.
В элементах массива $terms
находятся тексты на языке, указанном в настройках. Вместо этих текстов вы можете написать свои.
В переменных $cancelButton
и $submitButtons
записаны несложные коды кнопок подтверждения формы. Коды этих кнопок можно посмотреть в файлах BLOX/includes/submitButtons.php и BLOX/includes/cancelButton.php, соответственно. При необходимости вы можете вставить в пользовательский шаблон mylogin.tpl свои коды кнопок.
Существует несколько способов вывода пользовательского шаблона. Во всех способах делается запрос к служебному скрипту, данные которого затем выводятся в созданный нами пользовательский шаблон.
Обычный запрос на открывание служебной страницы выглядит так (на примере авторизации): <a href="?login">Войти</a>
, где на первом месте стоит параметр с именем скрипта, и далее могут идти различные url-параметры.
Чтобы сработал не служебный шаблон, а созданный вами пользовательский шаблон, к запросу нужно добавить параметр template с имением нового шаблона:
URL-запрос к служебному скрипту
<a href="?login&template=mylogin">Войти</a>
Ajax-запрос к служебному скрипту.
Данный способ удобен для вывода в модальном окне.
Мы делаем ajax-запрос к скрипту, точно также дополнительно указав в запросе имя пользовательского шаблона.
<script> ... Blox.ajax('?login&template=mylogin','login-box'); ... </script>
.
Ответ аякса будет выведен в элементе страницы
<div id="login-box"></div>
Примечание.
Если пользовательский шаблон находится в подпапке папки templates, например: admin/, то имя шаблона пишется со слешем: admin/mylogin
.
Слешы в URL запрещены, поэтому слеш нужно заменить на url-аналог: admin%2Fmylogin
, или применить php-функцию urlencode() :
<script>Blox.ajax('?login&template=<?=urlencode('admin/mylogin')?>, 'login-box');</script>
Назначаем пользовательский шаблон mylogin блоку, в котором должна отображаться форма авторизации, .
К этому блоку создаем запрос с параметром script со значением, равным имени соответствующего служебного скрипта: &script=login
.
Запрос можно создать тремя способами:
URL-запрос к блоку <a href="?page=5&block=2&script=login">Войти</a>
,
Данный запрос можно расшифровать так: "В блоке 2 страницы 5 вывести пользовательский шаблон авторизации (назначенный в этот блок ранее)".
# Номер страницы и блока можно вычислить: $loginBlock = Blox::getInstancesOfTpl('mylogin')[0]; // Первый блок-экземпляр с шаблоном mylogin $loginPage = Blox::getBlockPageId($loginBlock); echo'<a href="?page='.$loginPage.'&block='.$loginBlock.'&script=login">Войти</a>';
Прямой служебный запрос к блоку <?php Request::add('block=2&script=login') ?>
Этот вариант проще, но придется создать дескриптор mylogin.tdd, и поместить туда данный код, или поместить код в любой файле, который вызывается раньше.
<script> ... Blox.ajax('?block=2&script=login', 'login-box'); ... </script>
Ответ аякса будет выведен в элементе #login-box. Этот способ по своему действию эквивалентен аяксовому способу '?login&template=mylogin
, изложенному выше, однако он менее удобен, так как требует предварительного назначения пользовательского шаблона.
<a href="?edit&block=4&rec=5"
.
В таких случаях необходимо в части, относящейся к скриптовому запросу, заменить имя параметра block на src:
<?php Request::add('src=2&script=edit&block=4&rec=5') ?>
Описанный здесь способ редактирования можно использовать при создании "Личного кабинета". Блок назначен и отображается на одной странице, а редактируется на другой приватной странице, где тот же блок выводится сразу в виде формы, то есть, редактирование производится не через штатное окно редактирования, и не через модальное окно (через Ajax, как было рассмотрено выше).
Для пользовательского шаблона, отрабатывающего служебный скрипт, дескриптор, в принципе, не нужен, однако, вы можете создать этот файл, объявить в нем штатные редактируемые данные, и использовать их через массив $tab в шаблоне, как обычно.