ПОДПИСКА на УРОКИ


Дополнительное видео

Свои СТИЛИ в визуальном редакторе 1С Битрикс

Почему я выбрал 1С битрикс?

Восстанавливаем доступ к сайту


Хостинг от Макхост

init.php в БИТРИКС как с ним работать


  • Денис Горелов
  • 10.09.2017
  • 1С-Битрикс
  • Просмотров: 562

По немного приучаемся работать с документацией битрикс, в уроке разберем такой файл как init.php, его назначение, где он находиться, какие задачи выполняет и как с ним работать.

Определение:
init.php - необязательный файл в рамках структуры файлов Bitrix Framework. Он автоматически подключается в прологе при загрузке страницы.

Назначение файла init.php

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

init.php подключение в прологе

То есть, в нем мы можем размещать код, который необходим для выполнения на каждой странице сайта.

Последовательность очереди подключения можно посмотреть в документации по битрикс, переходим на сайт документации для разработчиков, воспользуемся поиском, введем «страница подключение» и тут видим, первое идет подключение пролога, а за тем наш init.php.

Документация 1С Битрикс

Если в системе несколько сайтов, то делается отдельная директория с ID сайтом, где для каждого сайта можем создать индивидуальный init.php.

Расположение, создание файла init.php

Сам файл init.php располагается в структуре сайта, в папке bitrix > php_interface > init.php и как упоминал выше он не обязательный, а следовательно, может вовсе там отсутствовать.

Давайте его создадим через административную часть,  жмем кнопку добавить, выбираем из списка «Добавить файл». Перед нами появилась форма по созданию нового файла, укажем редактировать через PHP, прописываем название нашего файла init.php, из области редактирования все удаляем.

Для примера, определим в нем свою константу:

<?
define(STRING, 'dwstv');
?>  

Нажмем кнопку Применить.

Затем перейдем на сайт, откроем тестовую страничку и в режиме кода вызываем константу <? echo STRING; ?> которую определяли в init, сохраняемся.

Получаем вывод значении dwstv. То есть, таким образом можно работать как при использовании стандартных функций php, а также писать свой код или задействовать API битрикс.

Функция распечатки массива

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

Открываем init.php на редактирование, вставляем свой код функции, и разберем, как она работает.

<?
function PR($var, $all = false, $die = false)
{
	global $USER;
	if(($USER->GetID() == 1) || ($all == true))
	{
		$bt =  debug_backtrace();
		$bt = $bt[0];
		$dRoot = $_SERVER["DOCUMENT_ROOT"];
		$dRoot = str_replace("/","\\",$dRoot);
		$bt["file"] = str_replace($dRoot,"",$bt["file"]);
		$dRoot = str_replace("\\","/",$dRoot);
		$bt["file"] = str_replace($dRoot,"",$bt["file"]);
		?>
		<div style='font-size:9pt; color:#000; background:#fff; border:1px dashed #000;'>
		<div style='padding:3px 5px; background:#99CCFF; font-weight:bold;'>File: <?=$bt["file"]?> [<?=$bt["line"]?>]</div>
		<pre style='padding:10px;'><?print_r($var)?></pre>
		</div>
		<?
	}
	if($die)
	{
		die;
	}
}
?>    

Функция принимает один обязательный параметр, $var в который передаем массив, и два не обязательных параметра, $die и $all.

В моем случае я в начале проверяю пользователя на его ID, то есть только принтую данный массив себе, если желаете вывести массив для администраторов тогда можно воспользоваться методом $USER->IsAdmin() который позволяет распечатать массив для группы администраторов.

Что бы ознакомиться с методом $USER->IsAdmin() более подробно, перейдите в документацию 1С - битрикс, в поиске пропишите IsAdmin, вот у нас есть его описание, мы видим что данный метод делает и какие его параметры использования.

Возвращаемся к нашей функции, пишем оператор (ИЛИ), где является данный параметр $all равный true. Это сделано для возможности распечатать массив без авторизации.

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

Сохранимся и перейдем на тестовую страничку. Пропишем простенький массив:

<? $arr = array('test', 'dwstv', 'denis', 10);?>   

И распринтуем его с помощью нашей функции <?PR($arr)?>

Сохранимся, как видим, появилась распечатка массива.

распечатка массива

Если мы сейчас разлогинимся то массив нам не отобразится.

Давайте теперь повторно авторизуемся и добавим в нашу функцию дополнительный параметру $all какое ни будь значение, и теперь этот массив будут видеть все пользователи в том числе, не авторизованные.

Тоже самое если нам нужно завершить все операции, тогда для параметра $die введем значение и сохранимся. 

Как видите, с правой стороны исчез правый сайтбар, снизу пропал footer

Отключение footer

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

Как правильно писать код в init.php

Часто встречаются, что некоторые разработчики в файл init.php начинают беспорядочно заносить свои код, его становится много, выглядит он не структурировано, и превращается это все в свалку, где самому разработчику сложно разобраться в дальнейшем.

Захламленность init.php

Битрикс в этом случае рекомендует разбивать код логическими группами, по отдельным файлам и классам, подключая их через директиву include.

Давайте прислушаемся к рекомендации, и весь код подключим отдельно.

Для этого откроем init.php, скопируем весь наш код который до этого вносили Переходим в папку include, если у Вас ее нет, создайте, в ней размещаем файл functions-dump.php и перенесем полностью нашу функцию с init.php, сохранимся.

Создаем отдельный файл под функцию распечатки

В init.php в место функции подключаем файл functions-dump.php, для этого прописываем условие на проверку file_exists

С помощью $_SERVER["DOCUMENT_ROOT"] подключаемся к корню нашего сайта, далее пишем путь до файла и если он присутствует, при помощи директивы require_once подключаем его к init.php

<?/
if (file_exists($_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/include/functions-dump.php"))
        require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/include/functions-dump.php");
?>    

Сохраняемся, и мы получили вот такую ошибку.

Parse error: syntax error, unexpected '/' in /home/httpd/vhosts/dws.mcdir.ru/httpdocs/bitrix/php_interface/init.php on line 1

Как избежать такого рода ошибок

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

Как избежать ошибок в файле init.php

Все это приведет к потере работоспособности и невозможности что-то исправить без доступа FTP или SSH.

Как можно работать через Веб

Если у Вас доступ для работы с сайтом через веб, тогда наиболее простой способ, нужно содержание файла init.php вынести в отдельный файл и подключить его другим способом в init.

Давайте покажу, как это все делается. В первую очередь исправлю ошибку.

Допустим, у нас не было ошибки, но мы знаем о том, что такое может случиться. Перейдем, в наш init.php, переносим код из файла. Далее пройдем в нашу директорию include создаем тут файл initswitch.php сохраняемся.

Открываем на редактирование init.php, и в нем прописываем следующее условие подключение.

if (isset($_GET['noinit']) && !empty($_GET['noinit']))
{
    $strNoInit = strval($_GET['noinit']);
    if ($strNoInit == 'N')
    {
        if (isset($_SESSION['NO_INIT']))
            unset($_SESSION['NO_INIT']);
    }
    elseif ($strNoInit == 'Y')
    {
        $_SESSION['NO_INIT'] = 'Y';
    }
}

if (!(isset($_SESSION['NO_INIT']) && $_SESSION['NO_INIT'] == 'Y'))
{
    if (file_exists($_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/include/initswitch.php"))
        require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/include/initswitch.php");
}    

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

Теперь все подключать будем при помощи initswitch.php. И так, перейдем в него и повторим нашу ошибку, открываем initswitch.php , допускаем синтаксическую ошибку, и сохраняемся.

Сайт отрубился, как административная часть, так и визуальная его часть не доступна.

Теперь что бы его реанимировать, нам нужно в адресной строке прописать параметр, тем самым производим отключение файла initswitch.php, а параметр &noinit=N как вы догадались, наоборот его включает.

Тут же не выходя, открываем адресную строку и прописываем параметр &noinit=Y, мы попали в админку а дальше дело техники.

Параметр для включения файла init.php

Мое личное мнение, все же рекомендую работать с файлом init.php через FTP, так как не совсем удобно кодировать через редактор и править такого рода ошибки.

И так, придерживаясь данных правил:

  • не пишите напрямую код в init.php;
  • используйте отдельный файл для хранения функционала;
  • и все файлы в init.php подключайте через require_once().

Кому понравилось материал обязательно поделитесь им в социальных сетях, статью подготовил Горелов Денис.

Оставить комментарий:

Отзывы

Отзывов нет.

Написать отзыв

* - Обязательные поля

Выбирай свою тему, и мы напишем когда выйдет по ней очередное видео.