Igor
Ковырясь пришел к выводу что новое media поле j4 очень даже ничего.
По капотом просто подключенный скрипт родного поля и html родного поля.
Ну и мини скрипт для плюсика
Dmitry
Зачётно
RINAT
[4.1] Копия дочерних шаблонов · Выпуск №36994 · joomla/joomla-cms
https://github.com/joomla/joomla-cms/issues/36994
Dmitry
https://habr.com/ru/post/650687/
Vitaly
Всем доброго вечера пятницы! Если кто-то еще остался здесь, а не отдыхает. Возвращаясь у AJAX-загрузке методов хелпера модуля в J4... Решение-таки нашлось. Но день был полон фэйлов.
Dmitry
Dmitry
Заинтриговал
Vitaly
Само решение - отдельная история. Если в J3 нам нужно было всего лишь положить файл хелпера в корень модуля и добавить там метод, оканчивающийся на AJAX, то в J4:
Vitaly
Дмитрий
?
Дмитрий
а что тут такого?
Vitaly
Вот тут прямо песня:
Мы уходили от:
$helperFile = JPATH_BASE . '/modules/mod_' . $module . '/helper.php';
if ($results === null && is_file($helperFile))
а пришли к:
$path = $extensionPath . '/services/provider.php';
if (is_file($path))
Дмитрий
ты понимаешь преимущства выделение в контейнеры?
Дмитрий
в том числе и модули
Дмитрий
ну это да
Дмитрий
но то что это вообще так работает, это круто
Vitaly
Едем дальше
Дмитрий
что они все построили на контейнерах
Дмитрий
они теперь как зенд =)
Дмитрий
поступают
Dmitry
Имхо, они не докрутли
Дмитрий
джумла или зенд?
Dmitry
Если модули в том виде, который есть работают
Dmitry
Они должны работать и в com_ajax
Dmitry
Сейчас в четвёрке не надо извращаться
Дмитрий
да
Дмитрий
бесмыслеено
Dmitry
Только хелпер правильно назвать и положить в src
Дмитрий
есть старые
Дмитрий
и есть новые по новому
Дмитрий
как-то глупо в целом
Дмитрий
ты не можешь работать напрямую с контейнерами
Дмитрий
обнуляется просто все это
Vitaly
В злосчастный helper-класс модуля не получается передать параметры этого самого модуля. Точнее оно прекрасно работает, когда модуль вызывается напрямую и не работает, когда он вызывается через com_ajax. Хотя тут есть смысл, т.к. нельзя узнать параметры модуля без его ID. Выкручиваюсь тут так:
Dmitry
@wedalru это так не должно быть
Vitaly
$module = ModuleHelper::getModuleById($moduleId);
Vitaly
Что, как вы думаете, должно передаваться в метод getModuleById?
Vitaly
Я думал: ID. ID имеет тип int. Вроде логично. Но...
Vitaly
public static function &getModuleById($id)
{
$modules =& static::load();
$total = \count($modules);
for ($i = 0; $i < $total; $i++)
{
// Match the id of the module
if ((string) $modules[$i]->id === $id)
{
// Found it
return $modules[$i];
}
}
// If we didn't find it, create a dummy object
$result = static::createDummyModule();
return $result;
}
Vitaly
Что это???😳
if ((string) $modules[$i]->id === $id)
Дмитрий
а что тут не такЮ
Дмитрий
от regex приходит строка
Дмитрий
в базе id int и приходит инт
Дмитрий
они приравняли к строке как к типу
Дмитрий
что ту ттакого?
Vitaly
А то что не работает, если передать int в этот метод
Vitaly
=== строгое сравнение
Дмитрий
это недоработка, они не сделали перегрузку
Дмитрий
надо было и id приравнять передаваймыей тоже
Дмитрий
но логика понятна почему они добавили
Дмитрий
так
Dmitry
Вот этого не должно быть, надо им issue делать
Igor
Дмитрий
Dmitry
Для com_ajax не должно быть своих приколов
Igor
А потом через пол года удалить старый и прекратить поддержку j3
Dmitry
Dmitry
Посмотри модули как сделаны
Dmitry
Там просто хелпер в другом месте лежит
Дмитрий
Дмитрий
хотел спросить
Дмитрий
а как разводить сервера обновлений?
Дмитрий
то есть указываю сервер обновлений один, а там по идее надо целевую платформу что ли указывать
Дмитрий
типа больше не обновлять версии для j3 допустим
Дмитрий
а для j4 вести
Dmitry
Dmitry
Я не согласен )
Vitaly
Dmitry
Воротить сервис провайдеры для модулей - это излишество
Dmitry
И оно не должно быть обязательным
Dmitry
Сейчас оно необязательно, кстати. И работает.
Igor
Dmitry
Только com_ajax тупит )