Использование API Bitrix

Битрикс начинает внедрять своё новое ядро D7 которое реализует принципы ООП. И постепенно будет убирать с поддержки старые функции.

Необходимо использовать новое API по максимуму!!! Здесь описаны только самые важные классы, за неиспользование которых, вы получите по пальцам. Остальные классы можно посмотреть в документации

Проверка на Admin

Если вам нужно на боевом сайте вывести массив $arResult или $arParams, то это можно делать только скрыто от пользователя! Чтобы вывести массив в на боевом сайте только для админа:

<?
global $USER;
if ($USER->IsAdmin()) {?>
    <pre><?print_r($arResult)?></pre>
<?}?>

Подключение JS и CSS в header.php

header.php
use Bitrix\Main\Page\Asset

Asset::getInstance()->addJs(SITE_TEMPLATE_PATH . "/js/fix.js"); 
Asset::getInstance()->addCss(SITE_TEMPLATE_PATH . "/styles/fix.css"); 
Asset::getInstance()->addString("");

Подключение JS и CSS в компоненте

Подключать JS и дополнительные CSS нужно только там, где они нужны, не надо всё пихать в header.php. Если скрипт используется только на определённой странице или разделе, то его необходимо подключать в компоненте

$this->addExternalCss("/local/styles.css");
$this->addExternalJS("/local/liba.js");

Подключение модулей

Вместо старого доброго CModule для подключения модулей нужно применять новый бодрый Bitrix\Main\Loader .

use Bitrix\Main\Loader; 

Loader::includeModule("iblock"); 
Loader::includeSharewareModule("intervolga.tips");

Подключение локализации сайта

Если сайт Многоязычный то локализацию необходимо подключать так:

use Bitrix\Main\Localization\Loc; 

Loc::loadMessages(__FILE__); 
echo Loc::getMessage("INTERVOLGA_TIPS.TITLE");

Работа с GET- и POST-параметрами страницы

Чтобы избавиться от глобальных переменных в коде (суперглобальных в том числе) в D7 изобрели класс Bitrix\Main\HttpRequest . Забирать get- и post-переменные теперь можно через него.

use Bitrix\Main\Application; 
$request = Application::getInstance()->getContext()->getRequest(); 

$name = $request->getPost("name"); 
$email = htmlspecialchars($request->getQuery("email"));

Ресайз изображений методами ResizeImageGet и ResizeImageFile

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

В ResizeImageGet, ресайз изображения происходит по идентификатору файла из таблицы b_file или массив описания файла (Array(FILE_NAME, SUBDIR, WIDTH, HEIGHT, CONTENT_TYPE)), полученный методом GetFileArray. Метод уменьшает картинку и размещает уменьшенную копию в папку /upload/resize_cache/путь. Один раз уменьшив изображение получаем физический файл, который позволяет при последующих обращениях не проводить операции по уменьшению изображения. При следующем вызове метод вернет путь к уменьшенному файлу. Статический метод.

if(count($arResult['MORE_PHOTO'])>0){     
	foreach($arResult['MORE_PHOTO'] as $PHOTO){	   
		$file = CFile::ResizeImageGet($PHOTO, array('width'=>120, 'height'=>'120'), BX_RESIZE_IMAGE_EXACT, true); 
	} 
}

В ResizeImageFile, ресайз изображения происходит по ссылке к исходному файлу и на лету, без сохранения нового изображения. Метод производит изменение размера графического файла. Если исходный файл с расширением BMP, то файл-результат будет переконвертирован как JPEG и в destinationFile вернется модифицированное имя. Статический метод.

$renderImage = CFile::ResizeImageGet(
   $arResult['DETAIL_PICTURE'], 
   Array('width' => $newWidth, 'height' => $newHeight)
 );
 echo CFile::ShowImage($renderImage['src'], $newWidth, $newHeight, '', true);

title, h1, descriptions, keywords, Breadcrumbs

Компонент Breadcrumbs всегда должен инициализироваться в header.php

Если вам не нужно показывать Breadcrumbs навигационную цепочку на какой либо странице, вам достаточно вставить в теле страницы код, инициализирующий свойство страницы "NOT_SHOW_NAV_CHAIN" значением "Y":

$APPLICATION->SetPageProperty("NOT_SHOW_NAV_CHAIN", "Y");

arFilter

Пример сложного фильтра:

$arFilter = array(
    "IBLOCK_ID" => $IBLOCK_ID,
    "SECTION_CODE" => "orange",
    "INCLUDE_SUBSECTIONS" => "Y",
    array(
        "LOGIC" => "OR",
        array("<PROPERTY_RADIUS" => 50, "=PROPERTY_CONDITION" => "Y"),
        array(">=PROPERTY_RADIUS" => 50, "!=PROPERTY_CONDITION" => "Y"),
    ),
);

Last updated