Обучаю битриксу программистов, интеграторов. Подробнee ⇒

Обзорно про api 1С-Битрикс



В системе Битрикс живет 2 вида api:
Битрикс-программистам надо знать оба вида, потому что:
  • поддерживать-развивать старые проекты, написанные на старом api
  • новые проекты предпочтительнее писать на новом d7

Все api bitrix разбито по модулям.
На разных лицензиях доступны разные модули Битрикс.
идентификаторы модулей Битрикс - статья Битрикса

БД одна (информация НЕ дублируется для разного апи в разные таблицы), но в системе живет 2 вида api для работы с этими таблицами. Т.е. можно управлять данными, как и старым апи, так и новым.  


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

Надо ли переписывать на имеющемся проекте старое api на новое?
Мое мнение, что нет.
Более вероятно что необходимость в данном сайте пропадет раньше (компания перестанет заниматься данным видом деятельности или разработает новый сайт более современный с чистого листа), чем используемые методы старого ядра станут deprecated.
Но обновляться надо аккуратно, быть готовым, что придется переписывать методы.

А вот при создании нового проекта лучше использовать новое api.
Но и новые методы иногда становятся недоступны.
Например, данный метод был доступен в 2020 году, а в 2023 (а может и раньше), уже НЕ работает
\Bitrix\Crm\Binding\OrderContactCompanyTable::bindContactIDs($orderId, array($contactId)); 

Если надо доработать имеющийся код, который написан на старом api, я его старым api и дополняю (если есть такие методы в старом апи).

Обработчики событий старые или новые?
  • лучше новые, но если есть более подходящий из старого апи, который дает меньшую нагрузку на сайт, то использую его.
  • если есть в системе старый рабочий обработчик, а мне надо использовать примерно те же данные для нового функционала, то дописываю старый, чтобы не делать еще один getlist, чтобы не было кучи обработчиков, с похожим функционалом, чтобы код был лаконичнее и понятнее
Основные отличия D7 от старого ядра - статья Битрикса
D7-аналоги любимых функций в 1С-Битрикс - статья Интерволги

main
Главный модуль main доступен на всех редакциях.
Его подключать не надо, он автоматом подключается. Все остальные перед использованием надо подключать.
// старое ядро
CModule::IncludeModule("iblock");

// D7
use Bitrix\Main\Loader;
Loader::includeModule("iblock"); 


или без use
\Bitrix\Main\Loader::includeModule("iblock"); 
про use в php


Класс СMain $APPLICATION
методы старого ядра актуальны, но и есть новое изd7
$APPLICATION->GetCurPage(true); // текущая страница для логики показа тех или иных блоков
$APPLICATION->ShowHead(); //вывод подключенных css, js
$APPLICATION->ShowTitle(); //заголовок окна браузера
$APPLICATION->ShowTitle(false);//заголовок h1
$APPLICATION->ShowPanel(); //вывод админ-панели битриксовская
$APPLICATION->IncludeComponent([$componentName,$templateName,$arParams]); //подключение компонента

подключение стилей и скриптов
старое ядро
$APPLICATION->AddHeadScript(SITE_TEMPLATE_PATH."/js/myjs.js" ); // скриптов
$APPLICATION->SetAdditionalCSS(SITE_TEMPLATE_PATH."/js/mycss.css", true); //стилей
$APPLICATION->AddHeadString("name='<meta name='yandex-verification' content='62be9ea1' />'"); // мета тегов или сторонних файлов 


//в компонентах в component_epilog.php
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
global $APPLICATION;
$APPLICATION->SetAdditionalCss("/local/styles.css");
d7
// подключение каких-либо css (template_style.css не надо подключать, н автомато подключится)   Bitrix\Main\Page\Asset::getInstance()->addCss("/bitrix/css/main/bootstrap.min.css");
\Bitrix\Main\Page\Asset::getInstance()->addCss(SITE_TEMPLATE_PATH."css/mycss.css");


// подключение скриптов
\Bitrix\Main\Page\Asset::getInstance()->addJs(SITE_TEMPLATE_PATH . "/js/myscripts.js");
\Bitrix\Main\Page\Asset::getInstance()->addJs(SITE_TEMPLATE_PATH . "/js/myscripts2.js");


// подключение мета тегов или сторонних файлов
\Bitrix\Main\Page\Asset::getInstance()->addString("<link rel='shortcut icon' href='/local/images/favicon.ico' />");

//в компонентах в template.php
$this->addExternalCss("/local/styles.css");
$this->addExternalJS("/local/liba.js");

СSite::InDir() - выполнение условия для каталога /about/ и всех его подкаталогов, например /about/contancs/
if(CSite::InDir("/about/")){} //старое ядро

//аналог d7
public static function InDir($strDir){
   $uri = Context::getCurrent()->getServer()->getRequestUri();
   if( substr($uri, -1, 1)=='/' )
      $uri .= 'index.php';
   return (substr($uri, 0, strlen($strDir))==$strDir); 
}
Локализация
// старое ядро
IncludeTemplateLangFile(__FILE__); 
IncludeTemplateLangFile($_SERVER["DOCUMENT_ROOT"]."/bitrix/templates/".SITE_TEMPLATE_ID."/header.php");

echo GetMessage("MY_MESSAGE");

// D7
use Bitrix\Main\Localization\Loc;
Loc::loadMessages(__FILE__);
echo Loc::getMessage("MY_MESSAGE");
Если блог был полезным, можете угостить меня "чашечкой кофе" :)

Сбер по номеру телефона +7 (953) 585-13-09 Вероника.
Спасибо!