Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Разработка модулей

Разработка модулей

Evgeny E. Neverov

December 20, 2022
Tweet

More Decks by Evgeny E. Neverov

Other Decks in Education

Transcript

  1. Административные списки: Яндекс.Маркет $APPLICATION->IncludeComponent('yandex.market:admin.grid.list', '', [ 'GRID_ID' => $gridId, 'PROVIDER_TYPE'

    => 'TradingSetup', 'MODEL_CLASS_NAME' => Market\Trading\Setup\Model::class, … 'LIST_FIELDS' => [ 'ID', 'NAME', … ], 'DEFAULT_LIST_FIELDS' => [ 'TRADING_BEHAVIOR', … ], 'CONTEXT_MENU' => [ [ 'TEXT' => Market\Config::getLang('ADMIN_TRADING_LIST_BUTTON_ADD'), 'LINK' => Market\Ui\Admin\Path::getModuleUrl('trading_setup', $baseQuery), 'ICON' => 'btn_new', ], … ], 'ROW_ACTIONS' => [ 'SETUP' => [ 'URL' => Market\Ui\Admin\Path::getModuleUrl('trading_setup', $baseQuery) . '&id=#ID#', 'ICON' => 'setting', 'TEXT' => Market\Config::getLang('ADMIN_TRADING_LIST_ROW_ACTION_SETUP'), ], … ], 'GROUP_ACTIONS' => [ 'activate' => Market\Config::getLang('ADMIN_TRADING_LIST_ROW_ACTION_ACTIVATE'), 'deactivate' => Market\Config::getLang('ADMIN_TRADING_LIST_ROW_ACTION_DEACTIVATE'), ]
  2. Административные списки: Яндекс.Маркет Провайдер данных находится в неймпейсе Yandex\Market\Component\{ProviderType}\GridList. Реализует

    методы загрузки данных и выполнения действий. Для таблиц можно наследовать - Yandex\Market\Component\Data\GridList Для моделей - Yandex\Market\Component\Model\GridList Для API - Yandex\Market\Component\Base\GridList Компонент yandex.market:admin.grid.list Провайдер Yandex\Market\Component\{Provi derType}\GridList БД/API
  3. Административные списки: Авито Классы провайдера данных и отображения объединен. Находится

    в неймспейсе \Avito\Export\Admin\Page\. Наследует класс Grid. Для таблиц есть TableGrid. БД/API Провайдер \Avito\Export\Admin\Page\Grid
  4. Формы: Яндекс.Маркет $APPLICATION->IncludeComponent('yandex.market:admin.form.edit', '', [ … 'FORM_ID' => 'YANDEX_MARKET_ADMIN_SETUP_EDIT', 'FORM_BEHAVIOR'

    => 'steps', … 'PROVIDER_TYPE' => 'Setup', 'MODEL_CLASS_NAME' => Market\Export\Setup\Model::getClassName(), 'CONTEXT_MENU' => [ …. ], 'TABS' => [ [ 'name' => Market\Config::getLang('SETUP_EDIT_TAB_COMMON'), 'fields' => [ 'NAME', …] ], [ 'name' => Market\Config::getLang('SETUP_EDIT_TAB_PARAM'), 'layout' => 'setup-param', 'fields' => [ 'IBLOCK_LINK.PARAM' ] ], … ] ]);
  5. Формы: Яндекс.Маркет Провайдер данных находится в неймпейсе Yandex\Market\Component\{ProviderType}\EditForm. Реализует методы

    загрузки данных и выполнения действий. Для таблиц можно наследовать - Yandex\Market\Component\Data\EditForm Для моделей - Yandex\Market\Component\Model\EditForm Для API - Yandex\Market\Component\Plain\GridList (чаще всего вызов обернут в класс) Компонент yandex.market:admin.edit.form Провайдер Yandex\Market\Component\{Provi derType}\EditForm БД/API
  6. Пользовательские поля Для построения форм используем $USER_FIELD_MANAGER. Собственные классы реализуем

    в старом формате (пример класса CUserTypeString). Неймспейсы: - \Yandex\Market\Ui\UserField\{Field}Type - \Avito\Export\Admin\UserField\{Field}Type - \YandexPay\Pay\Ui\UserField\{Field}Type
  7. Пользовательские поля: Fieldset Пользовательское поле, в ключе FIELDS которого хранятся

    вложенные поля. Класс - \Yandex\Market\Ui\UserField\FieldsetType. Внешний вид: • Сводка (summary) • Таблица (table)
  8. Пользовательские поля: Depend В описании поля можно определить ключ DEPEND,

    в котором указать при каких значениях соседних полей необходимо показывать данное поле. 'phone_mask_rule' => [ 'TYPE' => 'enumeration', … ], 'phone_mask' => [ 'TYPE' => 'string', … 'DEPEND' => [ 'phone_mask_rule' => [ 'RULE' => 'ANY', 'VALUE' => 'custom', ], ] ],
  9. Языковые фразы \Avito\Export\Concerns\HasLocale \Yandex\Market\Reference\Concerns\HasMessage <?php namespace Avito\Export\Structure; use Avito\Export\Concerns; use

    Avito\Export\Dictionary; class Transportation implements Category { use Concerns\HasLocale; public function name() : string { return self::getLocale('NAME'); } }
  10. Системные требования Маркет Авито Pay Мин. версия PHP 5.6 7.2

    7.2 Мин. версия Битрикс 15.5 (прайс-листы) 16.0 (заказы) 19.0 19.0 Мин. редакция Старт (прайс-листы) Малый бизнес (заказы) Старт Малый бизнес
  11. Javascript Используем синтаксис es6, собираем с помощью bitrix/@cli. Загрузка расширений:

    • Яндекс.Маркет - каждый скрипт отдельно \Yandex\Market\Ui\Assets::loadPlugin • Авито и Я.Pay - расширения (extensions). Статьи для обучения: • https://learn.javascript.ru/ • https://tympanus.net/codrops/category/tutorials/ • https://git.t-dir.com/support/avito.export/-/tree/master/bitrix/modules/avito.export/install/com ponents/admin.feed.filter/templates Пример реализации: bitrix/modules/avito.export/install/components/admin.feed.tag/templates/.default/src
  12. PhpStorm Плагин - Php Inspections (EA Extended) Проверка орфографии -

    не забываем Кодировка - windows-1251 Deployment - подпапки директории install копируем напрямую в публичную часть при разработке Статический анализ - желательно, чтобы правом верхнем углу стояла зеленая галочка (настройки отключенных инспекций в файле).
  13. Уровень ошибок На последней актуальной версии 1С-Битрикс и php7.4 не

    должно быть warning. На php 8.0 и выше логируем, исключая warning. 'exception_handling' => array ( 'value' => array ( 'debug' => false, 'handled_errors_types' => E_ALL & ~E_NOTICE & ~E_STRICT & ~E_USER_NOTICE & ~E_DEPRECATED, 'exception_errors_types' => E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_USER_WARNING & ~E_USER_NOTICE & ~E_COMPILE_WARNING & ~E_DEPRECATED, 'ignore_silence' => false, 'assertion_throws_exception' => true, 'assertion_error_type' => 256, 'log' => array ( 'settings' => array ( 'file' => 'bitrix/modules/error.log', 'log_size' => 1000000, ), ), ), …
  14. Php Курс разработчика Bitrix Framework (ORM, События, Контроллеры) Паттерны Xdebug

    Xhprof Примеры: • Модуль Интернет-магазин • Php Right Way
  15. Огранизация разработки • Таймер - стараюсь выставлять свой таймер ×2.

    Ориентир сложности задачи. • Первоначальное объяснение - перед задачей лучше вместе обсудить решение. • Вопросы в процессе - задавайте вопросы в процессе разработки. • Сроки - примерное время, когда мы обещали запустить. • Тестирование - после разработки разработчик самостоятельно проверяет решение на последней актуальной. Если задача большая, то нужно протестировать на минимальной. • При сборке обновления тестируем на всех версиях.
  16. Эксплуатация • Установки модулей = бюджет на разработку. Цель не

    только установка, а именно использование в сервисе; • Поддержка магазинов — нужно отвечать в течение дня (желательно в течение 2-3 рабочих часов). Если отсутствуешь, переставь задачу на меня. • Поддержка различных настроек и окружений - например, разные версии jquery, которые подключает разработчик сайта.
  17. Что ожидаем • Разработка модулей — подтверждение статуса старшего разработчика

    (так же, как и сложные задачи в поддержке). • Разработчик, к выполнению задач которого не возникает вопросов, может заняться самостоятельной поддержкой модуля и его развитием. • Фронт-техподдержки - первоначальная настройка модуля, ответы на простые вопросы пользователей, раздача сложных вопросов.