|
Содержимое файла шаблона template.php
|
|---|
<?
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true)
die();
CPageTemplate::IncludeLangFile(__FILE__);
class CBootstrapPageTemplate
{
function GetDescription()
{
return array(
"name" => GetMessage("bt_wizard_name"),
"description" => GetMessage("bt_wizard_title"),
"modules" => array("bitrix.eshop"),
);
}
function GetFormHtml()
{
$s = '
<tr class="section">
<td colspan="4">'.GetMessage("BT_TYPE").'</td>
</tr>
';
$s .= '
<tr>
<td style="vertical-align: top; padding-top:10px">
<input type="radio" name="BT_COL" value="1" id="BT_COL_1" checked>
<label for="BT_COL_1">'.GetMessage("BT_COL_1").'</label><br>
<img src="/bitrix/images/bitrix.eshop/col_1.png" style="margin-top: 7px; padding-left: 17px;"/><br>
</td>
<td style="padding-top:10px">
<input type="radio" name="BT_COL" value="2_1" id="BT_COL_2_1">
<label for="BT_COL_2_1">'.GetMessage("BT_COL_2_1").'</label><br>
<img src="/bitrix/images/bitrix.eshop/col_2_1.png" style="margin-top: 7px; padding-left: 17px;"/><br>
</td>
<td style="padding-top:10px">
<input type="radio" name="BT_COL" value="1_2" id="BT_COL_1_2">
<label for="BT_COL_1_2">'.GetMessage("BT_COL_1_2").'</label><br>
<img src="/bitrix/images/bitrix.eshop/col_1_2.png" style="margin-top: 7px; padding-left: 17px;"/><br>
</td>
<td style="padding-top:10px">
<input type="radio" name="BT_COL" value="1_2_1" id="BT_COL_1_2_1">
<label for="BT_COL_1_2_1">'.GetMessage("BT_COL_1_2_1").'</label><br>
<img src="/bitrix/images/bitrix.eshop/col_1_2_1.png" style="margin-top: 7px; padding-left: 17px;"/><br>
</td>
</tr>
<tr>
<td style="padding-top:20px">
<input type="radio" name="BT_COL" value="1_1" id="BT_COL_1_1">
<label for="BT_COL_1_1">'.GetMessage("BT_COL_1_1").'</label><br>
<img src="/bitrix/images/bitrix.eshop/col_1_1.png" style="margin-top: 7px; padding-left: 17px;"/><br>
</td>
<td style="padding-top:20px">
<input type="radio" name="BT_COL" value="1_1_1" id="BT_COL_1_1_1">
<label for="BT_COL_1_1_1">'.GetMessage("BT_COL_1_1_1").'</label><br>
<img src="/bitrix/images/bitrix.eshop/col_1_1_1.png" style="margin-top: 7px; padding-left: 17px;"/><br>
</td>
<td style="padding-top:20px">
<input type="radio" name="BT_COL" value="5" id="BT_COL_5">
<label for="BT_COL_5">'.GetMessage("BT_COL_5").'</label><br>
<img src="/bitrix/images/bitrix.eshop/col_5.png" style="margin-top: 7px; padding-left: 17px;"/><br>
</td>
<td style="padding-top:20px">
<input type="radio" name="BT_COL" value="4" id="BT_COL_4">
<label for="BT_COL_4">'.GetMessage("BT_COL_4").'</label><br>
<img src="/bitrix/images/bitrix.eshop/col_4.png" style="margin-top: 7px; padding-left: 17px;"/>
</td>
</tr>
';
return $s;
}
function GetContent($arParams)
{
$gridHtml = '
<div class="row">';
if (isset($_POST['BT_COL']))
{
switch ($_POST['BT_COL'])
{
case '1':
{
$gridHtml.= '
<div class="col-xs-12"></div>';
break;
}
case '2_1':
{
$gridHtml.= '
<div class="col-sm-8"></div>
<div class="col-sm-4"></div>';
break;
}
case '1_2':
{
$gridHtml.= '
<div class="col-sm-4"></div>
<div class="col-sm-8"></div>';
break;
}
case '1_2_1':
{
$gridHtml.= '
<div class="col-sm-3"></div>
<div class="col-sm-6"></div>
<div class="col-sm-3"></div>';
break;
}
case '1_1':
{
$gridHtml.= '
<div class="col-sm-6"></div>
<div class="col-sm-6"></div>';
break;
}
case '1_1_1':
{
$gridHtml.= '
<div class="col-sm-4"></div>
<div class="col-sm-4"></div>
<div class="col-sm-4"></div>';
break;
}
case '5':
{
$gridHtml.= '
<div class="col-sm-8"></div>
<div class="col-sm-4"></div>
</div>
<div class="row">
<div class="col-xs-12"></div>
</div>
<div class="row">
<div class="col-sm-8"></div>
<div class="col-sm-4"></div>';
break;
}
case '4':
{
$gridHtml.= '
<div class="col-sm-8"></div>
<div class="col-sm-4"></div>
</div>
<div class="row">
<div class="col-xs-4"></div>
<div class="col-xs-8"></div>';
break;
}
}
}
$gridHtml.= '
</div>
';
$s = '<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");?>';
$s.= $gridHtml;
$s.= '<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>';
return $s;
}
}
$pageTemplate = new CBootstrapPageTemplate;
?>
|
Активный шаблон
В системе возможно использование активных шаблонов. Активный шаблон - это шаблон, который при создании страницы запрашивает дополнительные данные прямо в мастере создания страницы.
Если Вы всё же решили попробовать создать свой активный шаблон, то имейте ввиду, что при наличии ошибок в шаблоне, публичная часть сайта перестанет работать и отобразит ошибку Для поиска ошибки можно включить режим отладки
'debug' => true в файле /bitrix/.settings.php
.
Активный шаблон
Понять, что такое активный шаблон и как он устроен проще всего на примере. В шаблонах штатной установки дистрибутива "1С-Битрикс: Управление сайтом" есть два таких примера:
\bitrix\templates\.default\page_templates\forumв шаблоне .default;\bitrix\templates\eshop_bootstrap_v4\page_templates\bootstrapв шаблоне eshop_bootstrap_v4.
Рассмотрим подробнее шаблон bootstrap. В папке содержится файл template.php непосредственно с логикой шаблона и папка lang с файлами языковых сообщений.

Результатом работы этого шаблона является выбор сетки создаваемой страницы в мастере создания. В зависимости от того, какой вариант будет выбран, Контент-менеджер получит соответствующий результат в визуальном редакторе:

Подключение шаблона и языковые файлы
Для добавления шаблона в меню, не требуется никаких дополнительных действий (как например внесение записи в .content.php для пассивного шаблона). Достаточно создать папку и файл шаблона. Названия и подписи можно указать прямо в шаблоне или с помощью файла с языковыми сообщениями.
В отличие от пассивных шаблонов, папка lang c языковыми фразами для активного шаблона расположена внутри папки шаблона.
Например для шаблона bootstrap путь к файлу с русскими языковыми фразами такой: /bitrix/templates/eshop_bootstrap_v4/page_templates/bootstrap/lang/ru/template.php
<? $MESS ['bt_wizard_name'] = "Шаблоны сеток страницы"; $MESS ['bt_wizard_title'] = "Раздел с шаблоном сетки"; $MESS ['BT_TYPE'] = "Выберите вариант шаблона сетки страницы"; $MESS ['BT_COL_1'] = "Одна колонка"; $MESS ['BT_COL_2_1'] = "Правое меню"; $MESS ['BT_COL_1_2'] = "Левое меню"; $MESS ['BT_COL_1_2_1'] = "Два меню"; $MESS ['BT_COL_1_1'] = "Две колонки"; $MESS ['BT_COL_1_1_1'] = "Три колонки"; $MESS ['BT_COL_5'] = "Главная"; $MESS ['BT_COL_4'] = "Мозаика"; ?>
Места использования этих фраз Вы можете найти в шаблоне по методу GetMessage.
Пример создания
Задача: В примере урока о пассивных шаблонах мы сделали шаблон для создания страницы объявления. Модифицируем его и дадим Контент-менеджеру возможность выбора при создании страницы:
- Оставить или убрать изображение из шаблона;
- Добавлять или нет секцию с формой обратной связи.
Текстовое описание:
- Скопируем папку шаблона страницы
bootstrap
Путь к папке bootstrap: \bitrix\templates\eshop_bootstrap_v4\page_templates\.
и разместим эту копию в том же месте (папка page_templates). Переименуем папку в new_template:

- Зайдем в новую папку и откроем файл template.php. Внесём в него правки.
Содержимое файла шаблона template.php с комментариями
<? if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die(); CPageTemplate::IncludeLangFile(__FILE__); class CMyNewPageTemplate { function GetDescription() { return array( "name" => GetMessage("bt_wizard_name"), "description" => GetMessage("bt_wizard_title"), ); } // Описываем новый шаг мастера создания страницы function GetFormHtml() { // Первый вопрос $s = ' <tr class="section"> <td>'.GetMessage("BT_TYPE_1").'</td> </tr> '; // Варианты ответа на первый вопрос $s .= ' <tr> <td style="vertical-align: top; padding-top:10px"> <input type="radio" name="BT_COL_1" value="1_1" id="BT_COL_1_1" checked> <label for="BT_COL_1_1">'.GetMessage("BT_COL_1_1").'</label><br> </td> </tr> <tr> <td style="padding-top:10px"> <input type="radio" name="BT_COL_1" value="1_2" id="BT_COL_1_2"> <label for="BT_COL_1_2">'.GetMessage("BT_COL_1_2").'</label><br> </td> </tr> '; // Второй вопрос $s .= ' <tr class="section"> <td>'.GetMessage("BT_TYPE_2").'</td> </tr> '; // Варианты ответа на второй вопрос $s .= ' <tr> <td style="vertical-align: top; padding-top:10px"> <input type="radio" name="BT_COL_2" value="2_1" id="BT_COL_2_1" checked> <label for="BT_COL_2_1">'.GetMessage("BT_COL_2_1").'</label><br> </td> </tr> <tr> <td style="padding-top:10px"> <input type="radio" name="BT_COL_2" value="2_2" id="BT_COL_2_2"> <label for="BT_COL_2_2">'.GetMessage("BT_COL_2_2").'</label><br> </td> </tr> '; return $s; } // Описываем шаблон в зависимости от выбранных вариантов function GetContent($arParams) { // Начало шаблона Объявление $myNewHtml = ' <h3>Объявление!</h3> <hr> <br> <table cellpadding="10" cellspacing="1" align="center" style="width: 500px;"> <tbody> <tr> <td>'; // Изменение шаблона в зависимости от ответа на первой вопрос об изображении if (isset($_POST['BT_COL_1'])) { switch ($_POST['BT_COL_1']) { case '1_1': { $myNewHtml.= ' <img width="131" src="/upload/warning.png" height="157">'; break; } case '1_2': { $myNewHtml.= ' '; break; } } } // Продолжение шаблона $myNewHtml .= ' </td> <td> Внимание! Важная информация о [<i>внесите нужную информацию</i>].<br> ... </td> </tr> </tbody> </table> <br>'; // Изменение шаблона в зависимости от ответа на второй вопрос об обратной связи if (isset($_POST['BT_COL_2'])) { switch ($_POST['BT_COL_2']) { case '2_1': { $myNewHtml.= ' <hr> <span style="color: #555555;"><i>Напишите нам, что Вы думаете об этом объявлении. Для этого воспользуйтесь формой обратной связи. Спасибо!</i></span><br> <br> <?$APPLICATION->IncludeComponent( "bitrix:main.feedback", "", Array( "EMAIL_TO" => "sale@192.168.100.177", "EVENT_MESSAGE_ID" => array("7"), "OK_TEXT" => "Спасибо за Ваше мнение!", "REQUIRED_FIELDS" => array("NAME","EMAIL"), "USE_CAPTCHA" => "Y" ) );?>'; break; } case '2_2': { $myNewHtml.= ' '; break; } } } $myNewHtml.= ' </div> '; // Формируем готовый шаблон $s = '<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");?>'; $s.= $myNewHtml; $s.= '<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>'; return $s; } } $pageTemplate = new CMyNewPageTemplate; ?> - Затем отредактируем файл с языковыми сообщениями в соответствии с нашим новым шаблоном:
<? $MESS ['bt_wizard_name'] = "Объявление"; $MESS ['bt_wizard_title'] = "Уточнение по шаблону"; $MESS ['BT_TYPE_1'] = "Оставить стандартное изображение?"; $MESS ['BT_COL_1_1'] = "Да"; $MESS ['BT_COL_1_2'] = "Нет, установлю своё"; $MESS ['BT_TYPE_2'] = "Нужен блок формы обратной связи?"; $MESS ['BT_COL_2_1'] = "Да, нужен"; $MESS ['BT_COL_2_2'] = "Нет, не нужен"; ?>
- Шаблон готов.
Проверим работу шаблона. В мастере создания страницы появился новый шаг:

В зависимости от выбора, Контент-менеджер получит разный результат в визуальном редакторе.
и Ваше мнение важно для нас