В системе Битрикс живет 2 вида api: Битрикс-программистам надо знать оба вида, потому что:
|
Все 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"); |
// подключение каких-либо 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"); |