Перейти к содержанию

Примеры работы и решения проблем

Подробную информацию об условиях применения шаблонов можно посмотреть в следующих уроках:

Простые примеры применения шаблонов в зависимости от различных условий

Если свойство раздела phone равно Y

$APPLICATION->GetDirProperty("phone")=="Y"

Если текущий раздел равен /ru/catalog/phone/

$APPLICATION->GetCurDir()=="/ru/catalog/phone/"

Если текущий пользователь - администратор

$USER->IsAdmin()

Если нужно привязать шаблон к динамической странице (в примере - к детальной странице(карточке) товара.)

preg_match("#/catalog/\?SECTION_ID=\d+&ELEMENT_ID=\d+#i",$_SERVER['REQUEST_URI']);

Подключение favicon.ico для разных шаблонов

Для того чтобы в разных шаблонах сайтов были разные значки, надо в шаблоне в header.php добавить вызов значка из шаблона:

<link rel="icon" type="image/x-icon"
href="<?=SITE_TEMPLATE_PATH;?>/images/favicon.ico" />

Отдельный шаблон для главной страницы сайта

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

Вдобавок к основному шаблону для всех страниц сайта необходимо подключить требуемый шаблон через условие Для папки или файла, в котором указать /index.php с учетом индекса сортировки применения шаблона.

Изменение шаблона сайта, в зависимости от временного параметра

Цитата: Как реализовать изменение шаблона сайта, в зависимости от временного параметра (Всего два шаблона, но они должны меняться каждый час)?

Для этого необходимо сделать изменение текущего шаблона по условию Выражение PHP.

Первый вариант

По нечетным часам: ((date("H")+6)%2) == 1

По четным часам: ((date("H")+6)%2) == 0

где +6 - указывает временную зону.

Второй вариант

date("H")%2

или

!date("H")%2

Применение шаблона сразу по двум условиям

Цитата: Подскажите, как задать шаблон одновременно по 2 условиям (для группы пользователей и для папки и файла) в настройках БУС.

Для этого необходимо использовать изменение текущего шаблона по условию Выражение PHP:

in_array($groupID, $USER->GetUserGroupArray()) || strpos($APPLICATION->GetCurDir(), "/dir/")!==false || $APPLICATION->GetCurPage()=="/dir/file.php"

Применение шаблона только к файлам с определённым расширением

Цитата: Подскажите, пожалуйста, выражение PHP, чтобы шаблон действовал на все страницы, заканчивающиеся на .php, а .html не трогал.

Решение: изменение шаблона по условию Выражение PHP:

substr($APPLICATION->GetCurPage(true), -4) == ".php"

Аналогично для файлов с расширением html:

substr($APPLICATION->GetCurPage(true), -5) == ".html"

Изменение дизайна «шапки» сайта для разных разделов

Задача: Сайт разделен на несколько разделов. По замыслу у каждого раздела должна быть своя «шапка» в дизайне. Более в дизайне ничего не меняется. Как лучше реализовать смену «шапок» разделов?

Решение: В шаблон подключается компонент Включаемая область (для раздела):

<div id="header">
<?$APPLICATION->IncludeComponent("bitrix:main.include", ".default", array(
    "AREA_FILE_SHOW" => "sect",
    "AREA_FILE_SUFFIX" => "headerinc",
    "AREA_FILE_RECURSIVE" => "Y",
    "EDIT_TEMPLATE" => "sect_headerinc.php"
    ),
    false
);?>
</div>

Код шапки каждого из разделов будет храниться в файле sect_headerinc.php. Параметр "AREA_FILE_RECURSIVE" => "Y" означает, что такая же "шапка" появится у всех подразделов данного раздела, если родительский sect_headerinc.php не будет специально перекрыт у кого-то из нижележащих разделов.

Особенности работы с ajax

Использование режима ajax имеет свои особенности. Чтобы строка навигации в открываемой по ajax странице имела в цепочке навигации своё название, необходимо, чтобы в шаблоне обязательно присутствовал элемент с id="navigation". Это необязательно должен быть div, это может быть span, h1, p и так далее.

Аналогично, для заголовка обязательно наличие элемента с id="pagetitle".