Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Одна страница в разных шаблонах

00 голосов
4
Предусмотрена ли возможность отображать страничку сайта в разных шаблонах? Например, я хочу сделать версию для печати, где не должно быть меню, форм и прочих блоков.
спросил 08 Сен, 13 от Safran (120 баллов)

4 Ответы

00 голосов
Вы можете разработать специальные формы пролога и эпилога в которых не будет никаких лишних элементов дизайна и интерфейса, а затем управлять их выбором. В простейшем случае - это вообще отказаться от вывода какого-либо дизайна страницы, используя пролог и эпилог,(
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_after.php");
и
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog.php")smile;)
а выводить на страницу только необходимую для печати информацию.
ответил 08 Сен, 13 от Kania (5,180 баллов)
00 голосов
Давайте рассмотрим конкретный пример:
Требуется сделать версию для печати в новостях. Создаю файл news_print.php в папке ru/about/news/. Исключаю из него require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/incl ude/prolog_after.php");
и
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/incl ude/epilog.php"). Далее открываю /ru/about/news/news_print.php?ID=221 - получилось!
А как со странички в шаблоне news_detail.php сделать ссылку на просмотр в шаблоне news_print.php?
ответил 04 Дек, 13 от Safran (120 баллов)
00 голосов
В общем случае когда необходимо сделать версию для печати для любой страницы сайта, мы поступаем следующим образом:

1) Размещаем ссылку в дизайне сайта (в файле prolog_main.php) озаглавленную как "Версия для печати".
И ведущую на ту же страницу, но с параметром print=Y.
Код такой ссылки необходимо задавать в виде
Код
<a title="Версия для печати" href="<?echo $GLOBALS["APPLICATION"]->GetCurPage().(($s=DeleteParam(array("print")))=="" ? "?print=Y" : "?$s&print=Y");?>">Печать</a>


2) Модифицируем файлы prolog_main.php и epilog_main.php так, чтобы они корректно выдавали пролог и эпилог в зависимости от значения параметра print.


Теперь рассмотрим это на примере файла из дистрибутива демо-версии:

У вас есть страница /ru/about/news/index.php, со следующим содержимым:
Код
 
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
// код для работы с панелью, он нас не интересует
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_after.php");
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/include/news/news.php");
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog.php");
?>


Структура этой страницы:
1) /bitrix/modules/main/include/prolog_before.php
В данном файле выполняются такие действия как: установление связи с базой данных, подключение всех необходимых модулей и т.д.
В нем ничего не выводится на экран.

2) /bitrix/modules/main/include/prolog_after.php
В этом файле в зависимости от языка подключается
либо
/bitrix/php_interface/ru/prolog_main.php
либо
/bitrix/php_interface/en/prolog_main.php

В этих двух файлах как раз выводится "шапка" сайта (HTML) (или как мы ее называем - пролог сайта).
И в них обоих необходимо обработать параметр "print", используя код наподобии:
Код
<?
if ($_GET["print"]=="Y") :
// выводим шапку для печати
include(GetLangFileName($_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/lang/", "/prolog_main.php"));

?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?echo LANG_CHARSET?>">
<META NAME="ROBOTS" content="ALL">
<style>
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/".LANG."/styles.css")?>
<?if (strlen($APPLICATION->GetAdditionalCSS())>0) require($_SERVER["DOCUMENT_ROOT"].$APPLICATION->GetAdditionalCSS());?>
</style>
</head>
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" bgcolor="#FFFFFF" link="#2974B2" alink="#3A8DD1" vlink="#7E0143"><?

else : // выводим обычную шапку сайта

?>
<!-- Первоначальное содержимое файла prolog_main.php -->
...
<?
endif;
?>


Другими словами мы подменяем шапку сайта на более упрощенную, пустую и без всякого дизайна в том случае если на страницу поступил параметр print=Y.

Возвратимся к содержимому страницы /ru/about/news/index.php

3) /bitrix/php_interface/include/news/news.php
В данном файле выводится непосредственно содержимое страницы. Именно то что необходимо распечатать.

4) /bitrix/modules/main/include/epilog.php
Данный файл выводит эпилог сайта, и в зависимости от языка подключает
либо
/bitrix/php_interface/ru/epilog_main.php
либо
/bitrix/php_interface/en/epilog_main.php

В этих файлах также необходимо провести ряд изменений наподобии:
Код
<? 

if ($_GET["print"]=="Y") : 

?></body></html><?

else : 
// выводим обычный эпилог сайта

?>
<!-- Первоначальное содержимое файла epilog_main.php -->
...
<?
endif;
?>


Таким образом мы модифицируем только пролог и эпилог сайта и получаем возможность выводить на печать любую страницу сайта без внесения в нее каких либо изменений.
ответил 16 Март, 14 от Kania (5,180 баллов)
00 голосов
Большое спасибо! Все получилось.
ответил 07 Июль, 14 от Safran (120 баллов)

Похожие вопросы

0 голосов
1 ответ
спросил 13 Авг, 13 от tishka (200 баллов)
0 голосов
3 ответов
0 голосов
1 ответ
спросил 16 Дек, 13 от MartinGot (100 баллов)
0 голосов
4 ответов
0 голосов
2 ответов