Изменение внешнего вида (кастомизация) служебных страниц

Служебные страницы системы управления, например: окно редактирования регистрационных данных, можно отображать в стиле вашего сайта. Причем выводить их можно на отдельной странице, в отдельном блоке или в модальном окне.

Изучим этот вопрос на примере страницы авторизации. Страница авторизации открываются по запросу href="?login". Это означает, что будет отработан служебный скрипт BLOX/scripts/login.php, который выведет страницу с помощью шаблона BLOX/scripts/login.tpl. Второй файл нам и понадобиться в дальнейшем.

Шаг 1. Создание пользовательского шаблона

  • Копируем файл BLOX/scripts/login.tpl в папку сайта templates.
  • Переделываем html-разметку так, как нам нужно. Переменные шаблона, имена форм, URL изменять нельзя.
  • Файл можно переименовать. Переименуем его, скажем, в mylogin.tpl.
Примечания

В элементах массива $terms находятся тексты на языке, указанном в настройках. Вместо этих текстов вы можете написать свои.

В переменных $cancelButton и $submitButtons записаны несложные коды кнопок подтверждения формы. Коды этих кнопок можно посмотреть в файлах BLOX/includes/submitButtons.php и BLOX/includes/cancelButton.php, соответственно. При необходимости вы можете вставить в пользовательский шаблон mylogin.tpl свои коды кнопок.

Шаг 2. Вывод

Существует несколько способов вывода пользовательского шаблона. Во всех способах делается запрос к служебному скрипту, данные которого затем выводятся в созданный нами пользовательский шаблон.

Вывод через запрос к служебному скрипту

Обычный запрос на открывание служебной страницы выглядит так (на примере авторизации): <a href="?login">Войти</a>, где на первом месте стоит параметр с именем скрипта, и далее могут идти различные url-параметры.
Чтобы сработал не служебный шаблон, а созданный вами пользовательский шаблон, к запросу нужно добавить параметр template с имением нового шаблона:

  1. URL-запрос к служебному скрипту <a href="?login&template=mylogin">Войти</a>

  2. 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. Запрос можно создать тремя способами:

    1. 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>';
    2. Прямой служебный запрос к блоку <?php Request::add('block=2&script=login') ?>
      Этот вариант проще, но придется создать дескриптор mylogin.tdd, и поместить туда данный код, или поместить код в любой файле, который вызывается раньше.

    3. Ajax запрос к блоку

      <script> ... Blox.ajax('?block=2&script=login', 'login-box'); ... </script>
      Ответ аякса будет выведен в элементе #login-box. Этот способ по своему действию эквивалентен аяксовому способу '?login&template=mylogin, изложенному выше, однако он менее удобен, так как требует предварительного назначения пользовательского шаблона.

     

    Примечания
    • Некоторые служебные скрипты вызываются запросами, в составе которых уже имеется параметр block. Например, штатный запрос на редактирование блока в окне редактирования выглядит так: <a href="?edit&block=4&rec=5". В таких случаях необходимо в части, относящейся к скриптовому запросу, заменить имя параметра block на src: <?php Request::add('src=2&script=edit&block=4&rec=5') ?>
      Данный запрос можно расшифровать так: "В блоке 2 вывести пользовательский шаблон для редактирования записи 5 блока 4.

      Описанный здесь способ редактирования можно использовать при создании "Личного кабинета". Блок назначен и отображается на одной странице, а редактируется на другой приватной странице, где тот же блок выводится сразу в виде формы, то есть, редактирование производится не через штатное окно редактирования, и не через модальное окно (через Ajax, как было рассмотрено выше).

    • Для пользовательского шаблона, отрабатывающего служебный скрипт, дескриптор, в принципе, не нужен, однако, вы можете создать этот файл, объявить в нем штатные редактируемые данные, и использовать их через массив $tab в шаблоне, как обычно.