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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

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

Avatar for Evgeny E. Neverov

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. Что ожидаем • Разработка модулей — подтверждение статуса старшего разработчика

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