Использование API Bitrix
Битрикс начинает внедрять своё новое ядро D7 которое реализует принципы ООП. И постепенно будет убирать с поддержки старые функции.
Необходимо использовать новое API по максимуму!!! Здесь описаны только самые важные классы, за неиспользование которых, вы получите по пальцам. Остальные классы можно посмотреть в документации
Проверка на Admin
Если вам нужно на боевом сайте вывести массив $arResult
или $arParams
, то это можно делать только скрыто от пользователя! Чтобы вывести массив в на боевом сайте только для админа:
<?
global $USER;
if ($USER->IsAdmin()) {?>
<pre><?print_r($arResult)?></pre>
<?}?>
Подключение JS и CSS в 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
Was this helpful?