Павел @kkmspb
фулстек разработчик С, С++,PHP,JS
Information
- Rating
- 669-th
- Location
- Парголово, Санкт-Петербург и область, Россия
- Date of birth
- Registered
- Activity
Specialization
Fullstack Developer
Senior
From 250,000 ₽
OOP
Database
MySQL
PHP
C++
Programming microcontrollers
Qt
Software development
Development of drivers
C
Спасибо., получилось, установить модуль через админку.
Но по факту в local и в local/modules еще .section.php файлы появились, хотя в общем-то вроде не мешают пока.
Заодно понял, что local будет для каждого сайта индивидуальным.
Хочу порекомендовать бесплатную среду разработки Atollic True Studio для STM32. Отладчик работает например с jlink программатором. Легко поднимал стек usb, rndis и все что душе угодно
Попробовал, у меня =2 прибило локальную базу данных так, что пришлось переустанавливать все заново
А, что в битрикс нельзя установить чужой модуль из zip файла в админке? Надо только по ftp закачивать и распаковывать самому?
Добавить в репозиторий (маркетплейс) битрикс свой модуль - это реально?
Да можно про OnProlog забыть и сразу подписаться на OnAdminSaleOrderViewDraggable (это как раз на странице заказа в админке) и тут и состав заказа полностью передается через параметр:
Хочу сказать, что в битрикс по факту можно обойтись одним модулем (и это гут), а в вордпрессе и джумле пришлось делать по 2 сущности.
Да теперь дошло. Именно так - в DoInstall.
Я с вами не согласен. Событие OnProlog для модуля main не существует.
Просто всегда стандартно при загрузки выполняется код, который читает записи в базе данных (в таблице b_module_to_module ). Находит как в коде ниже обработчики (связи с другими модулями) для "main" и "OnProlog" и вызывает их связанные методы через ExecuteModuleEventEx. Просто событиями обычно принято называть что-то, что генерирует ОС, а тут просто зачем-то решили событиями обозвать (не суть).
bitrix\modules\main\include\prolog_before.php
bitrix\modules\main\include.php
CMain::PrologActions(); - это не событие, а просто вызов статического метода класса.
Далее:
Тут не спорю, в этом и есть весь смысл, т.к. далее и будет вызван include.php в каталоге вашего модуля. Но сам по себе include.php он никак не вызовется.
Вот где как ни в в DoInstall() установщика модуля это сделать? И только не yourmodule, а так:
Кстати и в документации так и сказано:
registerEventHandler - функция для регистрации обработчиков, расположенных в модулях и использующихся для взаимодействия между модулями системы. Эту функцию необходимо вызвать один раз при инсталляции модуля, после этого функция-обработчик события будет автоматически вызываться в определённый момент, предварительно подключив сам модуль.
Но честно говоря документация битрикс мне не заходит, как-то много красивых слов, когда все просто на самом деле.
Не превращайте хабр во флуд
Да mysql.ini я тоже правил, увеличивал таймауты и лимиты памяти, но мне не помогло.
Чтобы модуль автоматом грузился надо, чтобы кто-то сделал includeModule. Автолоуд сам по себе не произойдет. Я пока нашел только вариант при установке модуля подписаться на событие например OnProlog и там в обработчике система вызовет includeModule.
Похоже разобрался как обойтись без правки init.php!
Надо при установке модуля в методе DoInstall() подписаться на событие например OnProlog модуля main.
В этом случае система в таблице b_module_to_module зарегистрирует наше событие.
Потом открывая страницу будет испускаться событие OnProlog для нашего модуля paymentacceptance. Но перед этим система попытается загрузить модуль сначала и будет вызван include.php в каталоге нашего модуля. А тут мы уже знаем, что делать.
Главное, что это работает! И не надо править исходники ядра битрикс.
Я за вас рад конечно, но проблемка для меня не решена. Если бы вы поконкретнее показали кто и когда в коде у вас вызывает include.php было бы очень замечательно. А так у меня есть подозрения, что все равно надо править файл init.php. По интернету помониторил не нашел решения.
Похоже это совсем не то, что я хотел. Получается, что include.php вызывается, когда мы выполняем Loader::includeModule('paymentacceptance'); , то есть мне надо все-равно где-то в коде прописать Loader::includeModule('paymentacceptance'); - правильно?
И чего-то я в базе данных не нашел, где хранятся настройки автозагрузки (модулей, классов и т.д.)
И еще у меня нюанс, что модуль для админки пишу, может это важно...
DoInstall() и DoUnInstall() срабатывают, может туда регистрацию автозагрузки прописать?
Нормально устанавливается и деинсталлируется. В b_module он есть (paymentacceptance 2024-09-18 14:10:23 )
Спасибо за наводку. Но чего-то include.php никем не вызывается (отладчиком смотрю), пойду почитаю немного доки.
из папки local\modules похоже ни один модуль через include.php не аутолодится...
Спс
Я про это и говорю, что есть сервер под виндоус (типа БИТ драйвер ККТ), есть единый протокол для однотипного оборудования разных производителей (которые никогда не могут договорится между собой о стандарте). Мы изолируем разработчиков от проблем с поддержкой разных моделей разных производителей. Идея хорошая, но сложная. Но надо попробовать начать... кому-то
Я с этим не спорю, я имел ввиду функционал для пользователя. Чего ему (пользователю) еще может не хватать, какие возможности...
Спасибо изучим. Но похоже принтер для чеков это будет не кассовый аппарат.