Vladimir
Сейчас надо реварс поправить еще один косяк и перевод делаю на выхах
Vladimir
Vladimir
Надо короче собирать вот такие отзывы к маркетплейсам, чтобы развеивать сказки про «все сейчас продают только на маркетплейсах»
Vladimir
Сейчас, когда мне поступает заказ на "Озоне", я пишу покупателю, что он может заказать товар в моем интернет-магазине, а через маркетплейс я ничего ему отправлять не буду.
Vitaly
Всем доброго дня! Пытаюсь понять, как же всё-таки работает com_ajax в J4 для модулей. В модулях J4 файл хелпера перенесли, но в com_ajax его поиск остался в прежнем месте. Но файл этот теперь должен загружаться и с нового места. Но не работает оно у меня через com_ajax никак. Всё, что, собственно, было добавлено в J4 в com_ajax: $moduleInstance = $app->bootModule('mod_' . $module, $app->getName()); if ($moduleInstance instanceof \Joomla\CMS\Helper\HelperFactoryInterface && $helper = $moduleInstance->getHelper(substr($class, 3))) { $results = method_exists($helper, $method . 'Ajax') ? $helper->{$method . 'Ajax'}() : null; } Я никак не могу понять смысл этого действа. Первая часть IF выполняется, а вторая ведет на интерфейс без реализации. Оно должно работать по умолчанию как-то? Или нужно делать реализацию для getHelper обязательно?
Vitaly
Если $results не определен, то будет поиск в старом хелпере от J3. А его нет. Ну и, соответственно, никакого возврата данных по AJAX-запросу к модулю через com_ajax.
Dmitry
@wedalru а сейчас у тебя модуль по структуре тройки?
Dmitry
Мхм
Dmitry
Мне кажется, что ошибка
Dmitry
У них )
Dmitry
Модуль не может быть инстансом интерфейса хелпера
Dmitry
А, не, может... Глянул исходники
Dmitry
И если попытка удачная, то вызывается метод Ajax
Дмитрий
Это просто проверка интерфейсов
Дмитрий
Что соответствие идёт
Dmitry
Это просто проверка интерфейсов
Я выше написал, что может
Vitaly
Ладно, сформулирую вопрос иначе: есть ли хоть один модуль под J4 в котором работает com_ajax? Хотелось бы посмотреть реализацию... Я ничего не нашел толкового.
Дмитрий
Я выше написал, что может
еще интерфейсы указывают как тип аргунентов в методах/функциях допустим
Vitaly
Это просто проверка интерфейсов
Вот у меня эта часть всегда 0 возвращает, а раз 0, то всё условие с && уходить в 0 и, соотвественно, не выполняется. А дальше только хелпер от J3.
Дмитрий
function(Interface $protocol) { }
Дмитрий
я хз
Дмитрий
надл смотреть что там делает метод boot
Дмитрий
я еще не смотрел
Dmitry
Он в контейнер модуль засовывает ))
Дмитрий
предполагается что инстанс этот должен быть имплементирован от HelperFactoryInterface
Dmitry
Там дальше loadextension
Дмитрий
от фабрики интерфейса
Дмитрий
я хз,смотреть надо
Дмитрий
Он в контейнер модуль засовывает ))
я хз че там за контейнер, он типа по смыслу должен быть фабрикой
Дмитрий
если судить по этому коду
Дмитрий
хз, читать логику надо =)))
Vitaly
В общем, для J4 всё упирается в эти три строчки и вариантов нет, т.к в J3 класс хелпера начинался с mod", а в 4 - без него. Я очень плохо представляю, как обеспечить обратную совместимость, учитывая это. Даже если добавить выбор файла хелпера в зависимости от версии Joomla, то всё равно получается, что имена классов разные для 3 и 4 должны быть. Т.е. остается выбросить автозагрузку хелпера через неймспейсы и новое место его расположения, и новое именование, а просто грузить helper.php в корневой папке модуля и использовать класс хелпера с "mod". Либо бросать поддержку J3 и переделывать все на J4. Но тут непонятно с AJAX. Я так и не смог загрузить метод из хелпера через com_ajax.
Dmitry
Насколько я понимаю, должен
Vitaly
Будет, он почти и работает. Но в 4 всё по другому же теперь, по фен-шую
Dmitry
В модулях по феншую только неймспейсы
Dmitry
Остальное же не меняется
Dmitry
Ну хелпер в другое место перенесли, но это ерунда
Vitaly
Ну хелпер в другое место перенесли, но это ерунда
Вот как оказалось, это совсем не ерунда))
Dmitry
Ну надо им issue накатать тогда
Vitaly
Ну надо им issue накатать тогда
Вот сейчас смешно будет
Vitaly
https://issues.joomla.org/tracker/joomla-cms/32291
Vitaly
Последний там пост: Hi guys, I know this issue is already closed but has this issue really been resolved? It's still returning The file at mod_articles_categories/helper.php does not exist in Joomla 4.0.3. and com_ajax still looks for Mod class prefix in helper class name. А уже почти год прошел.
Igor
Будет, он почти и работает. Но в 4 всё по другому же теперь, по фен-шую
Так а проблема то в чем? helper j3 и j4 пишутся и размещаются по разному? А ты хочешь сделать совместиомсть?
Vitaly
Так а проблема то в чем? helper j3 и j4 пишутся и размещаются по разному? А ты хочешь сделать совместиомсть?
Ага. Но помимо всего прочего в J4 по новому хелперу я вообще не смог метод хелпера через com_ajax запустить. Вообще. Т.е. полностью опуская J3.
Vitaly
Он должен через вот это проверку проходить для выполнения: $moduleInstance = $app->bootModule('mod_' . $module, $app->getName()); if ($moduleInstance instanceof \Joomla\CMS\Helper\HelperFactoryInterface && $helper = $moduleInstance->getHelper(substr($class, 3))) { $results = method_exists($helper, $method . 'Ajax') ? $helper->{$method . 'Ajax'}() : null; }
Vitaly
Но $helper = $moduleInstance->getHelper(substr($class, 3)) у меня всегда 0 на выходе
Vitaly
Лежит helper j4 в другом месте?
модуль/src/Helper/ Я уже несколько раз сравнил с другими модулями J, родными. Все четко. Но там нигде com_ajax не используется
Vitaly
А так без него всё работает без проблем
Igor
будет у тебя пока что 2 helper а
Vitaly
будет у тебя пока что 2 helper а
Там именование класса отличается в 1м и 2м. 2 класса держать с почти одинаковым кодом?
Igor
Там именование класса отличается в 1м и 2м. 2 класса держать с почти одинаковым кодом?
Ну ты можешь один класс разширить другим. А вообще совместимость штука временая. Все равно потом убирать j3 и делать под j4/5
Igor
Тобишь сохранить совместимость j3-j5 без костылей в любом случае не выйдет.
Vitaly
Ну ты можешь один класс разширить другим. А вообще совместимость штука временая. Все равно потом убирать j3 и делать под j4/5
Я думал об этом, но com_ajax всё портит. Но сейчас даже не об этом. Вообще не запускается AJAX из модуля под J4.
Vitaly
Надо дебажить.
Додебажился до этого:
Vitaly
Vitaly
А нужно чтобы $moduleInstance->getHelper(substr($class, 3)) был не 0
Igor
Нужна фактория модулей. bootModule от сюда начинать.
Dmitry
Походу они неверный фикс накатили ))
Igor
Там всё ок
Верю. Просто там можно посмотерть что нужно для подключения helper
Dmitry
Интерфейс походу
Igor
Интерфейс походу
Не знаю ибо еще не лазил.
Vitaly
Походу они неверный фикс накатили ))
Или же просто дали интерфейс, типа пишите сами метод подключения к хелперу.
Dmitry
Ну по логике гетхелпер должен всё делать
Igor
Ну по логике гетхелпер должен всё делать
Думаю он все и делает. Надо ковырять.
Dmitry
Если бы делал, всё бы завелось ))
Vitaly
Вот он
Vitaly
Igor
Тобишь на этот момент класс уже должен быть подключен
Vitaly
Я так понимаю его bootModule должен загрузить, который перед этим выполняется.