Основные функции Bitrix API
Вывод title в основном шаблоне сайта.
<?$APPLICATION->ShowTitle()?>
Подключение для вывода в шаблоне сайта основных полей тега : мета-теги Content-Type, robots, keywords, description; стили CSS; скрипты.
<?$APPLICATION->ShowHead()?>
Выводит панель управления администратора.
<?$APPLICATION->ShowPanel();?>
© Подставляет путь к шаблону.
<?=SITE_TEMPLATE_PATH?>
Заголовок (в h1 например использовать).
<?$APPLICATION->ShowTitle(false);?>
Получить путь к картинке
CFile::GetPath($arItem["PICTURE"]);
ResizeImageGet
$arResult["DETAIL_PICTURE_SMALL"] = CFile::ResizeImageGet($arResult["DETAIL_PICTURE"], Array("width" => ШИРИНА, "height" => ВЫСОТА), BX_RESIZE_IMAGE_PROPORTIONAL, false);
BX_RESIZE_IMAGE_PROPORTIONAL - Сохранение пропорций
BX_RESIZE_IMAGE_EXACT - Cохранение пропорций с обрезанием по заданной ширине и высоте;
BX_RESIZE_IMAGE_PROPORTIONAL_ALT - масштабирует с сохранением пропорций за ширину при этом принимается максимальное значение из высоты/ширины, размер ограничивается $arSize, улучшенная обработка вертикальных картинок.
Подключение css и js
$APPLICATION->SetAdditionalCss(SITE_TEMPLATE_PATH."/css/catalog.css");
$APPLICATION->AddHeadScript(SITE_TEMPLATE_PATH."/js/jquery-ui.min.js");
С помощью d7
use Bitrix\Main\Page\Asset;
Asset:getInstance()->addCss(SITE_TEMPLATE_PATH."/css/catalog.css");
Asset:getInstance()->addJs(SITE_TEMPLATE_PATH."/js/jscript.js");
Функция dump для вывода массивов, видная только админу ( или всем )
function dump($var, $die=false, $all=false)
{
global $USER;
if( ($USER->GetID()==1) || ($all==true) )
{
echo '<pre>';
print_r($var);
echo '</pre>';
}
if($die)
die('hello');
}
Запрос из инфоблока по элементам CIBlockElement::GetList
if(count($array > 0) {
$arraySize = count($array);
$arSort = array('DATE_CREATE' => 'DESC');
$arFilter = Array("IBLOCK_ID"=> IBLOCK_CATALOG_ID, "ID" => $array, "ACTIVE"=>"Y");
$navParams = Array("nPageSize"=>$arraySize);
$arSelect = Array("ID", "IBLOCK_ID", "NAME", "DATE_ACTIVE_FROM", "PROPERTY_CODE");
$dbFields = CIBlockElement::GetList($arSort, $arFilter, false, $navParams, $arSelect);
while($dbElement = $dbFields->GetNextElement())
{
$arFields = $dbElement->GetFields();
$arFields[PROPERTIES] = $dbElement->GetProperties(); // Не желательно, нужно пользоваться arSelect property_code
}
}
Запрос из инфоблока по разделам текущего раздела
$rs_Section = CIBlockSection::GetList(array('left_margin' => 'asc'), array('IBLOCK_ID' => 5, 'SECTION_ID' => $arResult['SECTION_ID']));
while ( $arSection = $rs_Section->Fetch() )
{
$arSections[$arSection['ID']] = $arSection;
}
dump($arSections);
Вывести разделы текущего раздела инфоблока
$rs_Section = CIBlockSection::GetList(array('left_margin' => 'asc'), array('IBLOCK_ID' => 5, 'SECTION_ID' => $arResult['SECTION_ID']));
while ( $arSection = $rs_Section->Fetch() )
{
$arSections[$arSection['ID']] = $arSection;
}
dump($arSections);
Изменение свойства инфоблока CIBlockElement::SetPropertyValuesEx
CIBlockElement::SetPropertyValuesEx($_POST['ELEMENT_ID'], $IBLOCK_ID, Array("CODE" => $_POST['VALUE']) );
Отправка почты
/* Отправка письма администратору */
$postTemplate = 92; // ID Шаблона
$arEventFields = array( // Свойства
"EMAIL" => $_POST['email'],
"FIO" => $_POST['fio'],
"PHONE" => $_POST['phone'],
"COMMENT" => $_POST['comment']
);
CEvent::Send("ALX_FEEDBACK_FORM", "h1", $arEventFields, $postTemplate);
Добавление элемента в инфоблок через форму
CIBlockelement-Add - Идеальный пример. Реализовано при помощи технологии Ajax.
#Улучшаем структуру
Желаемая структура папки local
/local/templates/
/local/php_interface/
/local/php_interface/init.php
/local/php_interface/include - Подключаемые файлы
/local/include - <i>Включаемые области</i>
/local/css/
/local/js/
/local/ajax/
/local/components/
/local/php_interface/init.php Файл может содержать в себе инициализацию обработчиков событий, подключение дополнительных функций - общие для всех сайтов. Для каждого отдельного сайта может быть свой аналогичный файл. В этом случае он располагается по пути /bitrix/php_interface/ID сайта/init.php
Чтобы init.php не превращался в свалку непонятного кода следует код размещать логически группируя по файлам и классам. Пример файла init.php:
<?
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
//ID инфоблоков
define("IBLOCK_SPECIALITY_ID", 17); //Специальности
define("IBLOCK_APPOINTMENT_ID", 36); //Запись к врачу
define("IBLOCK_BACK_CALL_ID", 37); //Обратный звонок
//подключение доп файлов
if(file_exists($_SERVER["DOCUMENT_ROOT"]."/local/php_interface/include/include.php")){
require_once($_SERVER["DOCUMENT_ROOT"]."/local/php_interface/include/include.php");
}
if(file_exists($_SERVER["DOCUMENT_ROOT"]."/local/php_interface/include/function.php")){
require_once($_SERVER["DOCUMENT_ROOT"]."/local/php_interface/include/function.php");
}
//Отправка сообщения пользователю, после регистрации
AddEventHandler("main", "OnAfterUserAdd", "OnAfterUserRegisterHandler");
AddEventHandler("main", "OnAfterUserRegister", "OnAfterUserRegisterHandler");
function OnAfterUserRegisterHandler(&$arFields)
{
if (intval($arFields["ID"])>0)
{
$toSend = Array();
$toSend["PASS"] = $arFields["CONFIRM_PASSWORD"];
$toSend["EMAIL"] = $arFields["EMAIL"];
$toSend["LOGIN"] = $arFields["LOGIN"];
$toSend["NAME"] = (trim ($arFields["NAME"]) == "")? $toSend["NAME"] = htmlspecialchars('<Не указано>'): $arFields["NAME"];
$toSend["LAST_NAME"] = (trim ($arFields["LAST_NAME"]) == "")? $toSend["LAST_NAME"] = htmlspecialchars('<Не указано>'): $arFields["LAST_NAME"];
CEvent::Send("USER_REG", SITE_ID, $toSend, "N", 94);
}
return $arFields;
}
Вызов включаемой области - из файла
<?$APPLICATION->IncludeComponent(
"bitrix:main.include",
"",
Array(
"AREA_FILE_SHOW" => "file",
"MODE" => "php",
"PATH" => "/local/include/phone.php"
)
);?>
Достать информацию о текущем пользователе
global $USER;
echo $USER->GetID();
echo $USER->GetLogin();
echo $USER->GetFirstName();
Преобразование TIMESTAMP_X в формат Даты
$dd = $arItem[TIMESTAMP_X];
$ddd = strtotime($dd);
echo date("d.m.Y", $ddd);
Количество найденных элементов инфоблока
$arResult["NAV_RESULT"]->SelectedRowsCount();
Количество найденных элементов инфоблока со склонениями
function num2word($num, $words)
{
$num = $num % 100;
if ($num > 19) {
$num = $num % 10;
}
switch ($num) {
case 1: {
return($words[0]);
}
case 2: case 3: case 4: {
return($words[1]);
}
default: {
return($words[2]);
}
}
}?>
<span class="col">
<? $APPLICATION->ShowViewContent('count'); ?>
</span>
<?
$this->SetViewTarget('count');
$count = $arResult["NAV_RESULT"]->SelectedRowsCount();
$word = num2word($count, array('товар', 'товара', 'товаров'));
echo $count.' '.$word;
$this->EndViewTarget();
Всплывающее окно JavaScript функция битрикса
var popup = BX.PopupWindowManager.create("popup-message", null, {
content: "Товар добавлен в корзину",
autoHide : true,
offsetTop : 1,
offsetLeft : 0,
lightShadow : true,
closeByEsc : true,
overlay: {
backgroundColor: '000000', opacity: '80'
}
});
popup.show();
var popup = BX.PopupWindowManager.create("popup-message", null, {
content: "Hello World!",
darkMode: true,
autoHide: true
});
popup.show();
content: 'Контент, отображаемый в теле окна',
width: 400, // ширина окна
height: 100, // высота окна
zIndex: 100, // z-index
closeIcon: {
// объект со стилями для иконки закрытия, при null - иконки не будет
opacity: 1
},
titleBar: 'Заголовок окна',
closeByEsc: true, // закрытие окна по esc
darkMode: false, // окно будет светлым или темным
autoHide: false, // закрытие при клике вне окна
draggable: true, // можно двигать или нет
resizable: true, // можно ресайзить
min_height: 100, // минимальная высота окна
min_width: 100, // минимальная ширина окна
lightShadow: true, // использовать светлую тень у окна
angle: true, // появится уголок
overlay: {
// объект со стилями фона
backgroundColor: 'black',
opacity: 500
},