Гаджеты 1С-Битрикс (статья в журнале Веб-Аналитик.ИНФО, июль 2010) — 1С-Битрикс

Гаджеты 1С-Битрикс (статья в журнале Веб-Аналитик.ИНФО, июль 2010) — 1С-Битрикс Гаджет

Что такое гаджет в понимании 1с-битрикс?

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

Начиная с 8-й версии 1С-Битрикс в дистрибутив включен компонент Рабочий стол (bitrix:desktop). При помещении его на страницу публичной области сайта он выглядит таким образом:Мы можем выбирать гаджеты для отображения на рабочем столе, перетаскивать их и убирать, если они более не нужны.Наша задача на сегодня сделать простейший гаджет, который бы отображал текущее дату и время.

1с-битрикс — гаджет статистики заказов для windows

Модуль позволяет вам отслеживать статистику продаж на вашем интернет-магазине в режиме реального времени, в любой точке земного шара.

После установки зайдите в настройки модуля и первым делом скачайте гаджет для Windows.

На сайте в настройках модуля выставьте «Секретный ключ» (необходим для ограничения доступа к статистике, например «123123»), на следующей вкладке выберите все галочки, нажмите «Сохранить».

Далее мы переходим к гаджету, устанавливаем его. Открываем настройки, в поле «Секретный ключ» мы вводим не «123123», а строчку из хаотичного набора букв и цифр, котррую можно увидеть на первой вкладке настроек модуля (на сайте).
Далее мы вводим наименование домена сайта, например «1c-bitrix.ru» — вводить нужно без «http://» и без последнего слеша.
В поле «Название профиля» мы всталвяем строчку, которую можно увидеть на второй вкладке, в большинстве случаев это будет «profil_s1». Для каждого сайта создается отдельный профиль.

———————————

Для всех моих платных модулей вы можете оставить в комментариях свое пожелание по доработке. Возможно именно ваше желание исполнится в следующем обновлении модуля!

1с-битрикс разработчикам — использование гаджетов в админке.

Как-то на семинаре для партнёров услышал вопрос к Сергею Рыжикову из разряда «а когда можно будет использовать компоненты 2.0 в админке сайта». И действительно, это было бы удобнее и привычнее для разработчиков и т.д. Сергей ответил, что «рассматривается такой вариант» и на этом вопрос вроде как закончился. Хотя откуда возник такой вопрос у разработчика и почему Сергей ему не возразил, мне так и не стало понятно. А теперь по сути темы.

Мне достаточно часто приходится создавать страницы для админки и, честно говоря, не видел проблем с подключением самого компонента на странице. Другой вопрос, что это не совсем безопасно, так как функционал компонента другой разработчик может задействовать на публичной части сайта. Да и шаблон компонента надо будет копировать из инстала в папочку с компонентами (при установке модуля, например). Приходилось делать шаблон «.admin», чтобы все понимали, что это шаблон административного раздела. Хорошим тоном у нас считается проверить константу ADMIN_SECTION, чтобы точно знать, что компонент (шаблон) запущен в админке. И не забывать, что константа SITE_ID содержит совсем другой смысловой характер в административном разделе.

Самым большим неудобством в таком «нестандартном» использовании компонентов — постоянное ощущение неуверенности, что кто-либо из разработчиков не задействует случайно его (компонент) в публичке. Вот и получалось, что один компонент с шаблоном «.admin» использовался только раз и только на одной странице. А страниц таких уже с десяток и компоненты эти вперемешку с остальными. В общем некрасиво, «не по книжке» это как-то.

Совсем другой вопрос с гаджетами, которые все почему-то забыли и оставили как бесполезную фичу от разработчиков БУС-а. В принципе, если честно, и сами гаджеты — это не что иное, как вывод компонента bitrix:desktop внутри админки или в соцсетях. Документации по ним не было, на форуме редко кто отвечает. Кое-какое описание есть про сам рабочий стол, но оно для версии 8.5, а уже 12.0.6 во всю крутится. Что же это за зверь такой и как он выглядит с точки зрения разработчика, мало кто знает.

Вот я и решил чуток подразобраться и попробовать использовать этот механизм вместо привычных компонент.

Гаджеты как механизм управления вывода данными.
Да-да, я не описался, именно механизм. Полноценный механизм, который позволяет задавать параметры вывода информации и пользовательские параметры раздельно. Этот механизм  позволяет задавать разработчику параметры гаджета и отдельно предоставить набор свойств, которые пользователь выберет для себя сам.

Концепция, предложенная разработчиками БУС-а, достаточно проста. Всё тот же контейнер в виде папки в разделе /bitrix/gadgets/_namespace_/, где _namespace_ — ваша коллекция гаджетов. Всё те же файлы .parameters.php и .description.php. При чём они очень напоминают аналогичные файлы в компонентах 2.0 с небольшими дополнениями и нюансами.

Файл index.php выполняет роль скрипта вывода данных (в гаджетах нету раздельных шаблонов вывода и соответственно файлов template.php, result_modifier.php, component_epilog.php). Предполагается, что данных будет немного и весь файл займёт 500-1000 строк, поэтому можно встретить гаджеты в стандартной поставке, которые собирают данные, кэшируют их и тут же выводят. Как, например, гаджет admin_products (/bitrix/gadgets/bitrix/admin_products/).

Файл .parameters.php — параметры гаджета.
Параметры в гаджете — самый важный и интересный для разработчика набор данных. Он, в последствии, снимет кучу головной боли от просьб пользователей что-то показать, убрать, подсветить, поднастроить…..

Содержание файла не сильно отличается от аналогичного файла в компонентах, вряд ли что названия переменных другие. В файле должен быть определён массив всех параметров в переменной $arParameters. Доступны текущие параметры, если заданы, в переменной $arAllCurrentValues.

Структура массива:

$arParameters = Array(
«PARAMETERS»=> Array(
«PARAMETER» => array(
«NAME» => «PARAMETER»,          //GetMessage(«LANG_PARAMETER»),
«TYPE» => «LIST»,               // LIST, STRING, CHECKBOX
«VALUES» => array(«V1», «V2»),  // array, only for type LIST
«DEFAULT» => array(«V1»),       // string, array
«MULTIPLE» => «Y»,              // N, Y
«COLS» => 25,                   //numeric
«ADDITIONAL_VALUES» => «N»,     // N, Y
«REFRESH» => «Y»,               // N, Y
«HIDDEN» => «N»,                // N, Y
),
),
«USER_PARAMETERS»=> Array(
«USER_PARAMETER» => Array(
«NAME» => «USER_PARAMETER»,     //GetMessage(«LANG_USER_PARAMETER»),
«TYPE» => «LIST»,               // LIST, STRING, CHECKBOX
«VALUES» => array(«V1», «V2»),  // array, only for type LIST
«DEFAULT» => array(«V1»),       // string, array
«MULTIPLE» => «Y»,              // N, Y
«COLS» => 25,                   //numeric
«ADDITIONAL_VALUES» => «N»,     // N, Y
«REFRESH» => «Y»,               // N, Y
«HIDDEN» => «N»,                // N, Y
)
)
);

Гаджет:  Как в 2-3 раза ускорить телефон на Андроиде и сократить расход батареи 💻

Поля HIDDEN и COLS еще не успел проверить, но о них речь и не идёт. Главное в массиве разделить поля для параметров гаджета (PARAMETERS) и пользовательские параметры (USER_PARAMETERS). Разница в том, что первые пользователь поменять не может и на странице настроек не видит их. В остальном гаджет работает с параметрами так же, как компонент.

Файл .descrtiption.php — описание гаджета.
Файл описания совсем малюсенький и имеет примерно такой вид:

<?if (!defined(«B_PROLOG_INCLUDED») || B_PROLOG_INCLUDED!==true)die();
$arDescription = Array(      
«LANG_ONLY» => «ru», //ограничение для языка панели
«NAME» =>GetMessage(«MY_GADGET_NAME»),
«DESCRIPTION» =>GetMessage(» MY_GADGET_ DESC»),
«ICON» =>»», //полный путь к иконке или название файла иконки в папке гаджета
«GROUP» => Array(«ID»=>»admin_store»),
«TITLE_ICON_CLASS» => «bx-gadgets-no-padding», //дополнительный CSS-класс для вывода содержимого    
«AI_ONLY» => true //только в админке
);?>

Тут вроде как всё ясно, кроме группы «GROUP». Дело в том, что можно использовать только определённые заранее группы, свою группу мне так и не удалось создать (выводится надпись «undefined» в меню подключения гаджета). Полный список групп можно подсмотреть в файле «bitrix/components/bitrix/desktop/component.php» в массиве $arGroups.

Можно также передать параметр, чтобы отключить заголовок гаджета, как в гаджетах монитора производительности и резервного копирования.

Файл index.php — вывод данных.
Файл вывода данных содержит всю логику гаджета. Заменяет собой шаблон вывода (по аналогии с template.php в компонентах), подключает скрипты и файлы стилей по необходимости. Особенностью работы скрипта в файле является то, что вывод происходит в буфер, который потом подставляется в определённую ячейку рабочего стола. Это больше связано с реализацией компонента bitrix:desktop и не вызывало особых трудностей (в компонентах 2.0 вывод происходит в буфер глобальной переменной $APPLICATION и сброс можно сделать через $APPLICATION->RestartBuffer(), поэтому в гаджетах может немного изменится код для вывода, например, в AJAX-режиме).

Внутри скрипта доступны две переменные: $arGadgetParams и $arParams. Тут первая переменная будет содержать актуальные параметры гаджета (с установленными пользовательскими парамертами), а $arParams — служебные параметры гаджета.

Для того чтобы реализовать кэширование, достаточно воспользоваться внутренним классом CPHPCache из API, как, например, в гаджете admin_products:

$obCache = new CPHPCache;
$cache_id = «admin_products_».md5(serialize($arFilter)).»_».$arGadgetParams[«LIMIT»];
if($obCache->InitCache($cache_time, $cache_id, «/»))
{
$arResult = $obCache->GetVars();
}
else
{
/* Вызов функций, обращение к БД. */
}

if($obCache->StartDataCache())
{
$obCache->EndDataCache($arResult);
}

/** Вывод данных **/

Если программирование — это такая себе увлекательная кухня, тогда свой гаджет мы бы уже сварили. Осталось только его подключить.

Ну во-первых, мой гаджет уже будет доступен на рабочем столе админ панели. Можно также подключить свой гаджет на странице редактирования некой сущности, чтобы создать более удобный интерфейс для оператора. Например, у меня есть гаджет для вывода профайла пользователя (user_profile) и гаджет для зачисления или перевода бонусов (user_bonus). Тогда админстраница выглядела бы вот так:

/**** Заголовок страницы, проверка уровней прав доступа и т.д. *****/
?>

<?$APPLICATION->IncludeComponent(
«bitrix:desktop»,
«admin»,
Array(
«MODE» => «AI»,
«ID» => «my_page_id», //ID собственной страницы админ панели
«MULTIPLE» => «Y»,    //разрешено использовать несколько рабочих столов
«CAN_EDIT» => «Y»,    //пользователю разрешено изменять параметры, менять местами и т.д.
«COLUMNS» => «2»,    //количество колонок на странице
«COLUMN_WIDTH_0» => «50%», //ширина первой калонки в % или в px
«COLUMN_WIDTH_1» => «50%»,
«GADGETS» => Array(«USER_PROFILE», «USER_BONUS»),  //список разрешенных гаджетов на странице или «ALL» для всех
«G_USER_PROFILE_USER_ID» => $MY_USER_ID,
«GU_USER_PROFILE_FIELDS» => Array(«FULL_NAME», «LOGIN», «EMAIL»),
«G_USER_BONUS_USER_ID» => $MY_USER_ID,
«G_USER_BONUS_PAY_SYSTEM» => Array(«WEBMONEY», «RBK», …),  
),
false,
array(
«HIDE_ICONS» => «Y»
)
);?>

/**** Завершение страницы, вывод списка данных или полей для редактирования, или табы другой формы и т.п. *****/

Подключение компонента приведено для версии 12.0.6.

Некоторые замечания и пояснения, которые могут пригодиться.
1. Ключ «MODE» указывает режим подключения и ограничивает список гаджетов. Например, подключены будут только те, у которых в .description.php указано «AI_ONLY»=>true.

2. В массиве с ключом «GADGETS» можно перечислить все допустимые гаджеты (будет наложено ограничение из пункта 1). Или указать Array(«ALL»), чтобы подключить все.

3. В ключах по шаблону G_#GADET_ID#_#PARAM# можно указать свои параметры. Например, для гаджетов user_profile и user_bonus в параметре USER_ID я указал переменную $MY_USER_ID, а для гаджета user_bonus в переменной PAY_SYSTEM я указал список доступных платёжных систем. Пользователь не сможет поменять эти настройки, что позволяет ограничивать им действия (в данном примере, платёжные системы) и передавать уже вычисленные данные.

4. Также можно передавать предварительно и пользовательские параметры по шаблону GU_#GADET_ID#_#PARAM#, где #GADGET_ID# — название гаджета в верхнем регистре, #PARAM# — параметр гаджета. Например, я задал заранее список полей, которые будут отображены оператору, и которые он сможет дополнить или поменять.

5. Особым плюсом является возможность определить ID рабочего стола (в моём примере это my_page_id). Это позволяет создавать кастомизированные страницы управления с возможностью настройки рабочего стола пользователем. Двигает куда хочет, включает, выключает. В общем, если операторы и админы часто работают в админке и им постоянно приходится видеть списки каких-либо данных, а разработчику дополнять вывод служебной информацией, то гаджеты тут незаменимы (каждый оператор создаст под себя рабочий стол, настроит поля, а если надо добавит заготовки для быстрого переключения).

Одно плохо. На 25.12.2021 параметр ID рабочего стола в компоненте bitrix:desktop при сохранении постоянно равен admin_index. Думаю, разработчики скоро это поправят (я исправил минут за 15 у себя на дев-сервере). Так что будем подождать чуток.

1с-битрикс разработчикам — пишем гаджет для кор. портала под майонезом 😉

Всем доброго времени суток!

Гаджет:  The Gadget Show — Wikipedia Republished // WIKI 2

Данной статьёй попытаюсь решить две задачи:

  • Научить (научиться) создавать гаджеты для кор. портала.
  • А логика состоит в том, что выводить для текущего пользователя (чаще редактора сайта или администратора) элементы инфоблоков в различных статусах (черновик, готов, опубликовано, а также пользовательские статусы).

Показать скрытое содержимое

Расскажу немного о структуре гаджета.

Физически они располагаются в папке

/bitrix/gadgets/

. Системные гаджеты расположены во вложенной папке

/bitrix/

, трогать их структуру не рекомендуется, поэтому для своего гаджета мы создадим папку

/custom/workflow/

.

Что ещё нужно для нашего гаджета?

  • Файл описания .description.php:

    Т.е. мы в стандартный массив $arDescription передаём название гаджета и его описание.

  • Файл с настройками .parameters.php:
    $arParameters = Array(
          "PARAMETERS"=> Array(
             "IBLOCK_TYPE" => Array(
                "PARENT" => "BASE",
                "NAME" => GetMessage("GD_WORKFLOW_LIST_TYPE"),
                "TYPE" => "LIST",
                "VALUES" => $arTypes,
                "DEFAULT" => "news",
                "REFRESH" => "Y",
             ),
             "IBLOCK_ID" => Array(
                "PARENT" => "BASE",
                "NAME" => GetMessage("GD_WORKFLOW_LIST_ID"),
                "TYPE" => "LIST",
                "VALUES" => $arIBlocks,
                "DEFAULT" => '',
                "ADDITIONAL_VALUES" => "Y",
                "REFRESH" => "Y",
             ),
             "ELEMENT_COUNT" => array(
                "PARENT" => "BASE",
                "NAME" => GetMessage("GD_WORKFLOW_ELEMENT_COUNT"),
                "TYPE" => "STRING",
                "DEFAULT" => '5',
             ),
             "SITE_ID" => array(
                "PARENT" => "BASE",
                "NAME" => "test111",
                "TYPE" => "STRING",
                "DEFAULT" => $_REQUEST["src_site"],
                "HIDDEN" => 'Y',
             ),
          ),
          "USER_PARAMETERS"=> Array(
             "USER_STATUS_ID" => array(
                "PARENT" => "BASE",
                "NAME" => GetMessage("GD_WORKFLOW_STATUS_ID"),
                "TYPE" => "LIST",
                "VALUES" => $arStatus,
             ),
          ),
       );

    В данном случае стоит обратить внимание на ключи «PARAMETERS» и «USER_PARAMETERS» массива $arParameters. В первый ключ записываются параметры, которые будут выводиться в настройках компонента bitrix:desctop, а второй предназначен для настроек, которые может задать конкретный пользователь.

    Гаджеты 1С-Битрикс (статья в журнале Веб-Аналитик.ИНФО, июль 2010) — 1С-Битрикс

  • И собственно файл index.php, который собственно и содержит код, реализующий нашу задачу.
    $arGadgetParams["USER_STATUS_ID"] = ($arGadgetParams["USER_STATUS_ID"] ? $arGadgetParams["USER_STATUS_ID"] : 2);
    
    if (intval($arGadgetParams["ELEMENT_COUNT"]) <= 0)
       $arGadgetParams["ELEMENT_COUNT"] = 5;
    
    $arGadgetParams["IBLOCK_TYPE"] = trim($arParams["IBLOCK_TYPE"]);
    if(strlen($arGadgetParams["IBLOCK_TYPE"])<=0)
        $arGadgetParams["IBLOCK_TYPE"] = "news";
    $arGadgetParams["IBLOCK_ID"] = trim($arGadgetParams["IBLOCK_ID"]);
    
    $arNavParams = array(
          "nPageSize" => $arGadgetParams["ELEMENT_COUNT"],
       );
    
    $obCache = new CPageCache;
    $life_time = 30*60; //30 минут
    $cache_id = $arGadgetParams["IBLOCK_TYPE"].$arGadgetParams["IBLOCK_ID"].$USER->GetGroups();
    
    
    if($obCache->StartDataCache($life_time, $cache_id, "/")):
       if(!CModule::IncludeModule("iblock"))
       {
          ShowError(GetMessage("IBLOCK_MODULE_NOT_INSTALLED"));
          return;
       }
       elseif (!CModule::IncludeModule("workflow"))
       {
          ShowError(GetMessage("WORKFLOW_MODULE_NOT_INSTALLED"));
          return;
       }
       $rsIBlock = CIBlock::GetList(array(), array(
          "ACTIVE" => "Y",
          "ID" => $arGadgetParams["IBLOCK_ID"],
          "SITE_ID" => $arGadgetParams["SITE_ID"],
       ));
       if($arResult = $rsIBlock->GetNext())
       {
          $arSelect = array(
             "ID",
             "IBLOCK_ID",
             "NAME",
             "DATE_CREATE",
             "PREVIEW_PICTURE",
          );
          $arFilter = array (
             "IBLOCK_ID" => $arResult["ID"],
             "IBLOCK_LID" => $arGadgetParams["SITE_ID"],
             "ACTIVE" => "Y",
             "CHECK_PERMISSIONS" => "Y",
             "SHOW_HISTORY" => "Y",
             "WF_STATUS_ID" => $arGadgetParams["USER_STATUS_ID"],
          );
          $arSort = array("SORT"=>"ASC");
    
          //Execute
          $rsElement = CIBlockElement::GetList($arSort, $arFilter, false, $arNavParams, $arSelect);
          echo "<table border=0>";
          while($obElement = $rsElement->GetNext())
          {?>
             <tr>
    <td valign="top" style="padding: 10px 0px 10px 0px;"><?=CFile::ShowImage($obElement['PREVIEW_PICTURE'], 60, 40);?></td>
                
    <td style="color:gray; padding:10px 0px 10px 0px;" ><?=GetMessage("GD_WORKFLOW_CREATE").": ".$obElement["DATE_CREATE"]?><br><a href="<?="/bitrix/admin/iblock_element_edit.php?WF=Y&ID=".$obElement["ID"]."&type=".$arResult["IBLOCK_TYPE_ID"]."&IBLOCK_ID=".$arResult["ID"]?>"><?=$obElement['NAME']?></a></td>
    
             </tr>
          <?}
          echo "</table>";
       }
       $obCache->EndDataCache();
    endif;

    Ничего сложного, мы кешируем выборку и выводим пользователю ссылки на искомые элементы в административной части сайта.

    Гаджеты 1С-Битрикс (статья в журнале Веб-Аналитик.ИНФО, июль 2010) — 1С-Битрикс

  • Языковые файлы в папке /lang/
    Думаю Вы без труда разберётесь с данным разделом.

Архивы с гаджетами:

Спасибо за внимание и заранее приношу извинения за возможные ошибки (отводилось немного времени на разработку).

One more thing…

В заключении хотелось бы рассказать о еще одном инструменте , который не попал ни в одну из наших категорий. Его основная задача — поиск сущностей в БД по устойчивым к миграциям параметрам. Например, поиск инфоблока по символьному коду. Поддерживаются следующие сущности Битрикс:

  • Инфоблоки (поиск по коду типа ИБ и коду самого ИБ);

  • Группы пользователей (поиск по коду группы);

  • Highload-блоки (поиск по названию);

  • Типы цен (поиск по коду цены).


Также инструмент контролирует и предотвращает создание Инфоблоков и Групп пользователей если символьный код не уникален.

Функциональность решения не велика. Однако она покрывает базовые операции с которыми разработчики сталкиваются каждый день — поиск id. Вы же не указываете id напрямую, так ведь? А за счет удобного API инструментом удобно пользоваться. Например, получение id ИБ по коду выглядит так:

Автоматизация рутинных операций

В этом разделе будут освещены инструменты, ускоряющие некоторые рутинные операции.

1.  Скрипт восстановления пароля администратора с графическим интерфейсом


Инструмент прост в установке и использовании. Закидываем скрипт на сайт и открываем в браузере. Увидим следующую форму:

Для phpstorm

Достаточно теории. Пора переходить к практике. Практику начнем с категории “Для PHPStorm”.  Здесь собраны доступные для PHPStorm плагины интеграции с Битрикс, набор LiveTemplates (aka сниппеты) и настройки. 

Плагинов интеграции PHPStorm с Битрикс не много. На момент написания статьи — только 2. 

Начнем с Bitrix Framework Support . Приведу перечень возможностей, чтобы заинтересовать вас:

  • Поддержка папок bitrix и local.

  • Переход на файл компонента, шаблона компонента (поддерживаются Twig и Smarty), шаблона сайта, а также на директории и файлы, найденные в строковых переменных.

  • Переход на файл включаемой области при клике в вызове на значение ключа ‘AREA_FILE_SUFFIX’.

  • Корректное определение типов и автокомплит для специальных переменных и переменных шаблона.

  • Автокомплит компонента и его шаблона в процессе набора $APPLICATION->IncludeComponent(…) и CBitrixComponent::includeComponentClass(…)

  • Решена проблема с подсветкой bitrix как неразрешенного пути в вызовах require($_SERVER[«DOCUMENT_ROOT»].»/bitrix/header.php»); и похожих конструкциях.

  • Безопасный рефакторинг файлов с автоматическим обновлением их вызовов в строковых переменных.

  • Поиск использований, например файла some.css, в вызовах $APPLICATION→SetAdditionalCSS(‘…some.css’), во всех файлах проекта.

  • Шаблоны создания типовых страниц и разделов сайта.

Другое


В эту категорию мы вынесли не объединенные общей темой инструменты. Мы не пробовали их на практике, но заявленная функциональность привлекает внимание. Было бы неуважительно их не упомянуть.

Решение notamedia/console-jedi базируется на инструменте Symfony Console. Предназначено для упорядочивания и автоматизации создания различных консольных скриптов для сайта. Console Jedi – инструмент для разработчиков, вызывается из консоли и позволяет в CLI управлять системой и выполнять консольные команды.

Решение arrilot/bitrix-models предлагает новый подход к работе с сущностями Битрикс наподобие того, как это сделано в фреймворках, например Laravel. Данный пакет привносит Model Layer в Битрикс. Этот слой логически состоит из двух частей:

Классификация рассматриваемых инструментов


Рассматриваемые инструменты разделим на следующие группы:

  • Справочные материалы

  • Для IDE (на примере PhpStorm)

  • Автоматизация рутинных операций

  • Работа с админкой

  • Миграции БД

  • Шаблонизаторы

  • Логирование и отладка

  • Другое (то, что не попало в другие категории)

Миграции

Тема миграций актуальна для любого крупного проекта, т.к. разработка обычно производится на тестовом сервере, а изменения постоянно приходится переносить на боевой. Для переноса кода используется git, а для изменений БД — инструмент миграций. У Интерволги есть обзорная статья систем миграции Битрикс .

Там подробно описаны существующие решения в маркетплейсе 1С-Битрикс. На Github также есть решения по миграции. Самые популярные из них — arrilot/bitrix-migrations , worksolutions/bitrix-reduce-migrations , cjp2600/bim-core работают по схожему принципу.

Для каждой миграции создается отдельный класс, в котором необходимо реализовать методы применения и отката изменений в рамках миграции. arrilot/bitrix-migrations имеет возможность автоматического создания миграций при внесении изменений в админке. Но список мигрируемых сущностей включает только базовые — инфоблоки, HL-блоки, группы пользователей.

У компании Intervolga есть свое решение для миграций — intervolga.migrato . Это open-source решение с репозиторием на github. Решение отличается принципиально другим подходом к вопросу миграций и поддержкой большого количества сущностей. Нет необходимости описывать каждую миграцию в виде кода.

Модуль позволяет выгрузить структуру инфоблоков, настройки свойств, групп пользователей, сайтов, ORM-сущности и т.д. в XML. Эти XML-файлы можно разместить в репозитории проекта, и на другом сервере восстановить из них структуру БД. Модуль способен мигрировать много сущностей, полный список которых есть в Wiki репозитория. Т. к. решение open-source, любой желающий может разработать механизм миграции для недостающей сущности и предложить pull request. В wiki репозитория есть инструкцию по разработке класса миграции для новой сущности.

Пример разработки гаджета

Рассмотрим пример, сделаем гаджет, показывающий текущее время. Для упрощения задачи будем считать, что гаджет не имеет настроек и не имеет локализации для других языков.Для начала нужно создать папку в папке /bitrix/gadgets/ , в которой будут хранится гаджеты, которые мы будем писать. Назовем эту папку dv. Далее нужно создать папку для нашего гаджета — show_date.

Таким образом получим такую структуру папок:/bitrix/gadgets/dv//bitrix/gadgets/dv/show_date//bitrix/gadgets/dv/show_date/.description.php/bitrix/gadgets/dv/show_date/.parameters.php/bitrix/gadgets/dv/show_date/index.php

Пишем описание гаджета:файл .description.php< ? if (!defined(«B_PROLOG_INCLUDED») || B_PROLOG_INCLUDED!==true)die(); $arDescription = Array(
«NAME»=>«Текущее время»,«DESCRIPTION»=>»Показываем текущее время»,«ICON»=>»»,«GROUP»=> Array(«ID»=>»personal»),«NOPARAMS»=>»Y»,«SU»=> true,«SG»=> true); ?>

Файл с параметрами гаджета:файл .parameters.php< ?if (!defined(«B_PROLOG_INCLUDED») || B_PROLOG_INCLUDED!==true)die();?>

Поскольку параметров у нас нет, то в файле только одна строка.

Справочные материалы

Основной справочный материал стоит брать из официальной документации. Несмотря на ее несовершенство, она есть, и ее не мало: 

  • документация для API: старое и новое ядро;

  • набор курсов из видео уроков от Академии 1С-Битрикс ;

  • курс “Разработчик Bitrix Framework” ;

  • курсы для Администраторов , Контент-Менеджеров и даже хостеров ;

  • документация по Б24 .

Другие источники менее известны:

1.  Репозиторий bitrix-info пользователя SidiGi


Wiki GitHub репозиторий освещает следующие темы:

  • Работа с корзиной

  • Оформление заказа на D7

  • Настройки .settings.php

  • Кэширование

  • ORM

  • Отладка

  • .htaccess

  • и др.

Более обширный и узконаправленный Wiki GitHub репозиторий. Содержит описание методов решения конкретных задач. Например, статьи “Если не работает BigData (компонент catalog.bigdata.products)”, “Замена стандартного битриксового лоадера во время AJAX запросов”, “Поиск по словам со склонениями”. Освещает следующие темы:

  • D7

  • Регистрация и авторизация

  • Торговый каталог

  • Оформление заказа

  • Композит

  • Обмен с 1С

  • Редиректы

  • Почта

  • и др.

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

  • Учебные курсы — ссылки на все официальные курсы по 1С Битрикс.

  • Документация — ссылки на официальную документацию.

  • Инструменты — инструменты для решения определенных задач. Например, скрипт тестирования конфигурации сервера, скрипт bitrixsetup и др.

  • Блоги — блоги различных компаний и пользователей. Среди них есть и блок компании “Интерволга” 🙂

  • Конференции — видеозаписи конференций по Битрикс.

  • и др.

Также репозиторий содержит “свой” чат, в котором можно задать интересующий вас вопрос. 


Обратите внимание на раздел “Блоги”, ведь они сами по себе являются наборами справочных материалов. Однако представлены далеко не все блоги по Битрикс. Например, отсутствует отличный блог “Mr.Cappuchino”. 

4.  Блог  “Mr.Cappuchino”

Блог очень емко и понятно освещает вопросы работы с корзиной и оформлением заказа на D7 в соответствующих статьях. Во многих статьях упор сделан на использование ядра D7. Среди прочих есть статьи о кэшировании, отладке, интеграции с 1С.

5.  Блог компании “Интерволга”

Блог, где вы, вероятнее всего, читаете эту статью. В нашем блоге можно найти статьи не только для программистов, но и менеджеров, маркетологов, SEO-специалистов. Описываем свои проекты, модули, способы решения задач на примере реальных боевых проектов. Статьи разделены по категориям, а для удобства отслеживания новостей можно подписаться на email-рассылку.

Отдельно хочется сказать о небезызвестном инструменте Bitrix API Online . Это кладовая исходного кода Битрикс. Его суть проста — показать исходный код любого метода в модулях Битрикс. Ввиду отсутствия исчерпывающей официальной документации для API у Битрикс, разработчикам часто приходится самостоятельно разбираться в исходном коде.

Инструмент Bitrix API Online отлично подойдет, если под рукой нет скачанного исходного кода. Инструмент предлагает поиск по модулю, классу и названию метода. Страница исходного кода метода содержит ссылку на официальную документацию и возможность комментирования. Не хватает только версионирования модулей.

Структура гаджета

Как и всегда, сначала мы рассмотрим структуру гаджета. Все гаджеты находятся в папке /bitrix/gadgets/ , системные гаджеты в папке /bitrix/gadgets/bitrix/. Название папки гаджета как и в случае компонента, является идентификатором гаджета.

В таблице ниже описание всех файлов гаджета.

ФайлОписание
.description.phpФайл описания гаджета. В нем задается название гаджета, его описание и место в структуре гаджетов.
.parameters.phpФайл с параметрами гаджета. Параметры разделены на те, которые может настраивать пользователь и те, которые может настраивать только администратор.
Index.phpИсполняемый код гаджета.
lang/Папка, служащая для локализации гаджета.

Шаблонизаторы

Если вы когда либо работали с одним из php фреймворков (напр. Laravel), то вам наверняка известно понятие шаблонизатора. И тут у Битрикс есть что предложить. На просторах Github были найдены решения по адаптации известных шаблонизаторов Twig и Blade под Битрикс. И оба действительно работают.

Начнем с Twig. Для использования шаблонизатора Twig на Github есть решение maximaster/tools.twig . Чтобы начать использовать Twig в Битрикс, нужно:

  • установить composer зависимость;

  • добавить конфиг в файл .settings.php;

  • создать в шаблоне компонента файл template.twig вместо template.php.

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

В репозитории есть примеры использования шаблонизатора, так что разобраться в нем не составит труда.Решение для шаблонизатора Blade — arrilot/bitrix-blade . Функциональность решения схожа. Плюс заявлена поддержка эрмитажа. Ограничение на шаблон сайта остается.

В целом, решения для шаблонизатора Twig мне показалось более удобным и адаптированным под Битрикс.

Шаблонизаторы делают код более элегантным и читаемым для тех, кто с ними знаком. Однако для новичков это наоборот может вызвать некоторые трудности в понимании.

В итоге

Я надеюсь, что смог показать как создавать гаджеты для Битрикс. Как вы видите эта задача совсем несложная. С такими структурами как гаджет можно делать очень гибкие программные интерфейсы достаточно легко.

статья опубликована в журнале Веб-Аналитик.ИНФО, (№4) июль 2021 год

Заключение

Ну вот и подошел к концу мой рассказ о полезностях для Bitrix разработчика. Коллеги, не бойтесь и не ленитесь использовать сторонние решения в своих Bitrix-проектах. Многие из них действительно полезные и удобные и позволяют сделать работу с Bitrix приятнее.

Гаджет:  Обзор чатов для онлайн консультирования (Livechat) (часть 1) / Блог компании TutHost / Хабр
Оцените статью
GadgetManiac
Добавить комментарий