Как стать автором
Обновить
3
11
Павел @kkmspb

фулстек разработчик С, С++,PHP,JS

Отправить сообщение

Можно загрузить zip файл через админку, через управление структурой, там же и распаковать

Спасибо., получилось, установить модуль через админку.
Но по факту в local и в local/modules еще .section.php файлы появились, хотя в общем-то вроде не мешают пока.

Заодно понял, что local будет для каждого сайта индивидуальным.

Хочу порекомендовать бесплатную среду разработки Atollic True Studio для STM32. Отладчик работает например с jlink программатором. Легко поднимал стек usb, rndis и все что душе угодно

innodb_flush_log_at_trx_commit = 2 //без этой строчки всё висло

Попробовал, у меня =2 прибило локальную базу данных так, что пришлось переустанавливать все заново

  1. А, что в битрикс нельзя установить чужой модуль из zip файла в админке? Надо только по ftp закачивать и распаковывать самому?

  2. Добавить в репозиторий (маркетплейс) битрикс свой модуль - это реально?

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

Да можно про OnProlog забыть и сразу подписаться на OnAdminSaleOrderViewDraggable (это как раз на странице заказа в админке) и тут и состав заказа полностью передается через параметр:

$eventManager->registerEventHandler(  "main", "OnAdminSaleOrderViewDraggable",
   $this->MODULE_ID,
   "paymentacceptance", "onInit");

Хочу сказать, что в битрикс по факту можно обойтись одним модулем (и это гут), а в вордпрессе и джумле пришлось делать по 2 сущности.

подписка на события у таких модулей происходит по другому - при установке самого модуля

Да теперь дошло. Именно так - в DoInstall.

Нет, неверно. Будет срабатывать событие OnProlog для модуля main. А поскольку Вы зарегистрировали обработчик для этого события, и при регистрации указали на свой модуль, то Ваш модуль будет подключен перед вызовом обработчика.

Я с вами не согласен. Событие OnProlog для модуля main не существует.

Просто всегда стандартно при загрузки выполняется код, который читает записи в базе данных (в таблице b_module_to_module ). Находит как в коде ниже обработчики (связи с другими модулями) для "main" и "OnProlog" и вызывает их связанные методы через ExecuteModuleEventEx. Просто событиями обычно принято называть что-то, что генерирует ОС, а тут просто зачем-то решили событиями обозвать (не суть).

bitrix\modules\main\include\prolog_before.php

bitrix\modules\main\include.php

CMain::PrologActions(); - это не событие, а просто вызов статического метода класса.

Далее:

foreach (GetModuleEvents("main", "OnProlog", true) as $arEvent)
{
	ExecuteModuleEventEx($arEvent);
}

то Ваш модуль будет подключен перед вызовом обработчика

Тут не спорю, в этом и есть весь смысл, т.к. далее и будет вызван include.php в каталоге вашего модуля. Но сам по себе include.php он никак не вызовется.

Вам никто не мешает для своего модуля сделать событие OnProlog - соответственно, обработчик на него можно будет зарегистрировать как:

$eventManager->registerEventHandler( "yourmodule", "OnProlog", ... );

Вот где как ни в в DoInstall() установщика модуля это сделать? И только не yourmodule, а так:

$eventManager->registerEventHandler(  "main", "OnProlog",
           $this->MODULE_ID,
           "paymentacceptance", "onProlog");

Кстати и в документации так и сказано:
registerEventHandler - функция для регистрации обработчиков, расположенных в модулях и использующихся для взаимодействия между модулями системы. Эту функцию необходимо вызвать один раз при инсталляции модуля, после этого функция-обработчик события будет автоматически вызываться в определённый момент, предварительно подключив сам модуль.

Но честно говоря документация битрикс мне не заходит, как-то много красивых слов, когда все просто на самом деле.

Не лезь туда, оно тебя сожрёт

Не превращайте хабр во флуд

пока не исправил конфиги mysql.

Да mysql.ini я тоже правил, увеличивал таймауты и лимиты памяти, но мне не помогло.

Чтобы модуль автоматом грузился надо, чтобы кто-то сделал includeModule. Автолоуд сам по себе не произойдет. Я пока нашел только вариант при установке модуля подписаться на событие например OnProlog и там в обработчике система вызовет includeModule.

Похоже разобрался как обойтись без правки init.php!

Надо при установке модуля в методе DoInstall() подписаться на событие например OnProlog модуля main.

		$eventManager = \Bitrix\Main\EventManager::getInstance(); 
		
        $bb = $eventManager->registerEventHandler(  "main",
           "OnProlog",
           $this->MODULE_ID,
           "paymentacceptance",
           "onProlog"
        );

В этом случае система в таблице b_module_to_module зарегистрирует наше событие.

Потом открывая страницу будет испускаться событие OnProlog для нашего модуля paymentacceptance. Но перед этим система попытается загрузить модуль сначала и будет вызван include.php в каталоге нашего модуля. А тут мы уже знаем, что делать.

Главное, что это работает! И не надо править исходники ядра битрикс.

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

Я за вас рад конечно, но проблемка для меня не решена. Если бы вы поконкретнее показали кто и когда в коде у вас вызывает include.php было бы очень замечательно. А так у меня есть подозрения, что все равно надо править файл init.php. По интернету помониторил не нашел решения.

Конечно можно. Добавьте в корень модуля файл include.php , где пропишите какие классы должны быть загружены автолоадом:

Похоже это совсем не то, что я хотел. Получается, что include.php вызывается, когда мы выполняем Loader::includeModule('paymentacceptance'); , то есть мне надо все-равно где-то в коде прописать Loader::includeModule('paymentacceptance'); - правильно?

И чего-то я в базе данных не нашел, где хранятся настройки автозагрузки (модулей, классов и т.д.)

И еще у меня нюанс, что модуль для админки пишу, может это важно...

DoInstall() и DoUnInstall() срабатывают, может туда регистрацию автозагрузки прописать?

А вообще модуль в Битрикс корректно установлен, в таблице b_modules он есть с датой активации?

Нормально устанавливается и деинсталлируется. В b_module он есть (paymentacceptance 2024-09-18 14:10:23 )

Добавьте в корень модуля файл include.php

Спасибо за наводку. Но чего-то include.php никем не вызывается (отладчиком смотрю), пойду почитаю немного доки.

из папки local\modules похоже ни один модуль через include.php не аутолодится...

у каждого кто связывается с физическим оборудованием всегда потребности очень специфические. Поэтому получить "универсальное" решение очень сложно. Его можно получить только в рамках комплекса, который будет предлагаться с каким то готовым оборудованием

Я про это и говорю, что есть сервер под виндоус (типа БИТ драйвер ККТ), есть единый протокол для однотипного оборудования разных производителей (которые никогда не могут договорится между собой о стандарте). Мы изолируем разработчиков от проблем с поддержкой разных моделей разных производителей. Идея хорошая, но сложная. Но надо попробовать начать... кому-то

Задача в целом та же самая : собрать JSON нужной структуры (или XML или еще что-то) и отослать на нужный endpoint.

Я с этим не спорю, я имел ввиду функционал для пользователя. Чего ему (пользователю) еще может не хватать, какие возможности...

в компоненте интернет-магазина Phoca Cart

Спасибо изучим. Но похоже принтер для чеков это будет не кассовый аппарат.

1
23 ...

Информация

В рейтинге
573-й
Откуда
Парголово, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Fullstack Developer
Senior
От 250 000 ₽
OOP
Database
MySQL
PHP
C++
Programming microcontrollers
Qt
Software development
Development of drivers
C