Сегодня речь пойдёт о том, что ещё недавно меня мучило самого. Был сделан php скрипт, использующий API Битрикс, однако при выводе во включаемой области через AJAX у меня дублировался дизайн, а скрипт выводил всего лишь поисковую форму в зависимости от определённых условий. Хотя нет, объясню иначе, был сделан блок на интернет магазине, в котором выводился выпадающий список марок автомобилей, данная выборка делалась из разделов инфоблока марок и моделей машин, заносились в массив и выводились в списке. Когда пользователь выбирает из этого выпадающего списка какую либо марку то ниже должен появляться новый dropdown список, в котором делается выборка из базы определённой марки по моделям, т.е. если мы в 1 списке выбрали Renault, то появлется список где, к примеру, есть Logan, Sandero ну и прочие. Так вот проблема была в том, что подгружался контент через ajax, для того чтоб не перезагружать страницу, ну красивее так. Но если мы делаем отдельный скрипт, то возникает вопрос как использовать api 1с битрикса, но не подключать шаблон, т.к. если подключить по стандарту, то в результате выполнения скрипта и вывода его через аякс, то выведется полностью контент включая шаблон, т.е. будет ужас, можете попробовать это сделать, поймёте. Решение было найдено изучив документацию и исходники других страниц и модулей. Главная фишка заключается в том, что api битрикса подключается не так как на стандартных страницах.

По дефолту при создании страницы мы имеем приблизительно следующий контент:

<?
require($_SERVER["DOCUMENT_ROOT"]." /bitrix/header.php");
$APPLICATION->SetTitle("ErgoZ Development Studio");
?>
тут какой то текст
<?
require($_SERVER["DOCUMENT_ROOT"]." /bitrix/footer.php");
?>

 

Изучив header.php и footer.php, пройдя по куче инклудов и поняв где подключается API битрикс я делюсь информацией с вами.

 

Допустим мы подключаем какой то компонент на чистой странице, на которой нам не нужен шаблон, и контент этой страницы мы подгружаем не инклудом (тогда бы проблем не было, т.к. автоматом подключился бы и api битрикса), а например через ajax. Вот как мы подключаем апи:

 

<?
// подключение служебной части пролога
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");

// здесь можно задать например, свойство страницы
// с помощью функции $APPLICATION->SetPageProperty
// и обработать затем его в визуальной части эпилога
?>
Содержимое страницы
<?
// подключение служебной части эпилога
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php");
?>

 

В результате вы получите страницу с текстом «Содержимое страницы» на белом фоне, и на этой странице можно подключать компоненты, апи полностью доступен, и эта страница не будет иметь оформления вашего шаблона, т.е. выведется только результат работы скрипта. Интерфейс админ панели и шаблон подключается в файле prolog_after.php

 

В моем случае я использовал jQuery.Post. Передавал ID раздела Марки (у меня марки были в одном инфоблоке и являлись разделом, а элементы — модели машин в соответствующем разделе), в результате делалась выборка CIBlockElement::GetList, в которой из post-запроса брался ID раздела марки, и формировался через echo select-список, и выводился в результат вышеописанного запроса jQuery.Post в секции data

 

Что-то типа:

 

$.post("test.php",  { iblock: "3", markaid: "223" }, function(data) {
alert("HTML код из битриксового скрипта без шаблона с пост запросом: " + data);
}
);

 

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

 

Ещё одно решение есть, оно немного проще для тех, кто плохо понимает в программировании. Можно сделать новый шаблон сайта, в админке битрикса в разделе настройки -> сайты -> шаблоны сайтов. Там создаём новый шаблон, например копированием существующего, открываем его на редактирование (нажимаем на 4 синие полоски слева от нужного шаблона и выбираем изменить), на появившейся странице в окне редактирования кода удаляем полностью контент, который видим, и пишем всего 1 слово: #WORK_AREA#. Сохраняем этот шаблон, и идём в настройки нашего сайта: настройки — сайты — список сайтов. Выбираем нужный, там внизу есть место где мы выбираем шаблон и присваиваем определённым страницам. Главный минус это то, что для каждого отдельного скрипта нужно делать отдельную сточку, либо делать папку со скриптами, в которую складывать вообще все скрипты, которые нужно использовать без шаблона и на эту папку назначать шаблон. Но этот метод совсем примитивный, я думаю. Гораздо проще использовать первый, у него плюсы в скорости работы есть, судя по моим замерам, зависит конечно от дизайна, но всё же.

 

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

Комментарии

comments powered by Disqus