Новости Joomla

👩‍💻 Joomla включена в программу Google Summer of Code 2026.

👩‍💻 Joomla включена в программу Google Summer of Code 2026.

Google Summer of Code (GSoC) - программа компании Google, которая позволяет участникам программы под руководством опытных наставников писать код для организаций, занимающейся открытым исходным кодом. Joomla принимает участие в этой программе не в первый раз и в 2026 году снова включена в список GSoC. Для программы утверждается список "идей", воплотить которые должны участники под руководством наставников.

Проекты Joomla в рамках программы GSoC 2026.

Проект I: Ajax-бэкенд.
- Действия в административной панели без необходимости обновлять страницу.
- Автоматическое сохранение содержимого во время редактирования.
- Расширенный фильтр - поиск и фильтрация по пользовательским полям.

Проект II: Автоматизация рабочих процессов (workflow + task scheduler).
Joomla имеет функцию процессов и планировщика задач. Теперь эти две функции следует объединить, чтобы пользователь мог настраивать назначенные рабочие процессы таким образом, чтобы переходы выполнялись автоматически, с возможностью точного определения времени. Должна быть возможность создавать циклы или прямые запланированные рабочие процессы. Предполагается, что интерфейс должен учитывать хороший пользовательский опыт, удобство использования и современные стандарты доступности. Ожидается, что будет добавлен интерфейс для управления процессами и их расписанием на страницах категорий и материалов. Так же ожидается, что сторонние компоненты также смогут воспользоваться этим функционалом.

Проект III: Мультикатегории.
В настоящее время Joomla! не позволяет назначать один элемент нескольким категориям. Хотя система тегов часто используется в качестве замены, существует острая потребность в нативной поддержке нескольких категорий, чтобы привести Joomla! в соответствие с другими современными системами управления контентом.

Проект IV: Обучение с подкреплением на основе отзывов переводчиков.
Joomla собирается использовать автоматический перевод документации. В каждом языке есть свои специфические слова, характерные для Joomla. Предполагается обучать языковые модели, используя обратную связь от переводчиков, чтобы постоянно улучшать качество переводов и учитывать специфические языковые особенности Joomla.

Принять участие GSoC 2026
Подробнее о проектах Joomla GSoC 2026
Чат GSoC в Mattermost (международное сообщество Joomla)

Вышли релизы Joomla 6.0.3 и Joomla 5.4.3

Релиз Joomla 6.0.3 и Joomla 5.4.3

Проект Joomla рад сообщить о выпуске Joomla 6.0.3 и Joomla 5.4.3. Это релиз исправлений ошибок и улучшений для серии Joomla 6.0 и Joomla 5.4.

👩‍💻 События плагинов и порядок их срабатывания при работе с пользовательскими полями Joomla и использовании FieldsHelper.

👩‍💻 События плагинов и порядок их срабатывания при работе с пользовательскими полями Joomla и использовании FieldsHelper.

В процессе работы с Joomla бывает необходимо работать с пользовательским интерфейсом более тонко, чем обычно. Все формы Joomla состоят из стандартных полей, содержанием, стилем отображения, состоянием (включено/выключено, доступно для редактирования или нет и т.д.) можно управлять с помощью плагинов. Да и для нестандартных проектов хорошей практикой является создание одного системного или нескольких плагинов групп "под проект", в которых храниться весь "нестандарт".

В этой статье описаны все триггеры, которые вызываются через Event Dispatcher из administrator/components/com_fields/src/Helper/FieldsHelper.php, с привязкой к жизненному циклу (порядку этапов работы запроса), аргументам, изменяемым данным и дальнейшему распространению по Joomla. Это поможет вам работать с Joomla свободнее и не опасаясь при этом потерять изменения при очередном обновлении движка.

Подходы, описанные в статье, полезны в тех случаях, когда вы работаете с данными в com_fields - механизме создания и редактирования пользовательских полей ядра Joomla и при использовании FieldsHelper. Многие сторонние компоненты не используют эту возможность, поэтому данная статья будет полезна лишь частично.

0 Пользователей и 1 Гость просматривают эту тему.
  • 13 Ответов
  • 2205 Просмотров
*

Aspik

  • Давно я тут
  • 542
  • 63 / 2
  • В личку не писать, не отвечу.
Пишу плагин для вывода alternate url. (для мультиязычных сайтов)
Есть ли событие типа onBeforeCompileHead, но для компонента JS.
Или любое другое событие которое отправит $html в head до вывода скриптов?
Как получить альтернативные url существующих языков?

Базовый код плагина:


Код
class plgJshoppingProductsJSextalternateurl extends JPlugin {

function __construct(&$subject, $config){
        parent::__construct($subject, $config);
    }

public function onBeforeDisplayProduct(&$product) {  
//
$document = JFactory::getDocument();
$lang = JFactory::getLanguage();
$lang_tag = $lang->getTag();

foreach (JLanguageHelper::getLanguages() as $language) {
if ($language->lang_code != $lang_tag)  {
//print_r($language->lang_code);
$alias = 'alias_'.$language->lang_code;
//print_r($product);
$product_id = JRequest::getInt('product_id');
$category_id = JRequest::getInt('category_id');

if ($product->$alias != '') {
$url = SEFLink('index.php?option=com_jshopping&controller=product&task=view&category_id='.$category_id.'&product_id='.$product_id, 1);
$html = '<link href="'.$url.'" rel="alternate" hreflang="'.$language->lang_code.'" />';
$document->addCustomTag($html);
}
}
}
}
}

« Последнее редактирование: 26.11.2013, 23:52:43 от Aspik »
Мои расширения - http://eco-joom.com/ru/
*

ELLE

  • Глобальный модератор
  • 4505
  • 893 / 0
Re: Есть ли событие типа onBeforeCompileHead ?
« Ответ #1 : 26.11.2013, 23:06:54 »
Есть ли событие типа onBeforeCompileHead, но для компонента JS.
обычно по контексту определяют, если плагин системный

для JS такого отдельного нету, насколько я знаю
триггеров вообще много, но под конкретные события
*

Aspik

  • Давно я тут
  • 542
  • 63 / 2
  • В личку не писать, не отвечу.
Re: Есть ли событие типа onBeforeCompileHead ?
« Ответ #2 : 26.11.2013, 23:22:04 »
Вопросов даже 2, но они связанные.
1) Как получить альтернативные url существующих языков. (Проверка на альтернативный язык представлена в первом посте)
2) Как отправить в head тег типа "<link href="URL" rel="alternate" hreflang="LANG" />"

Или может быть разработчик это в компонент по умолчанию сделает ? Я не вижу нормальных способов получения альтернативных url.

Мои расширения - http://eco-joom.com/ru/
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Есть ли событие типа onBeforeCompileHead ?
« Ответ #3 : 26.11.2013, 23:30:06 »
самое первое событие в ЖШ это
Код
            JPluginHelper::importPlugin('jshopping');
            $dispatcher = JDispatcher::getInstance();
            $dispatcher->trigger('onLoadJshopConfig', array(&$config));
только не пойму чем не подходит onBeforeCompileHead? и не пойму конечную цель
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Re: Есть ли событие типа onBeforeCompileHead ?
« Ответ #4 : 26.11.2013, 23:33:21 »
В смысле
Код: php-brief
$url = str_replace('/ru/', '/en/', JFactory::getURI()->toString());
2.
Код: php-brief
$doc = JFactory::getDocument();
$doc->addCustomTag( '<link href="URL" rel="alternate" hreflang="LANG" />' );
*

Aspik

  • Давно я тут
  • 542
  • 63 / 2
  • В личку не писать, не отвечу.
Re: Есть ли событие типа onBeforeCompileHead ?
« Ответ #5 : 26.11.2013, 23:50:10 »
В смысле
Код: php-brief
$url = str_replace('/ru/', '/en/', JFactory::getURI()->toString());
2.
Код: php-brief
$doc = JFactory::getDocument();
$doc->addCustomTag( '<link href="URL" rel="alternate" hreflang="LANG" />' );



1) alias разные, как правильно сформировать url вопрос остается.
2) с addCustomTag то решение я сделал:

Код плагина:
Код
class plgJshoppingProductsJSextalternateurl extends JPlugin {

function __construct(&$subject, $config){
        parent::__construct($subject, $config);
    }

public function onBeforeDisplayProduct(&$product) {  
//
$document = JFactory::getDocument();
$lang = JFactory::getLanguage();
$lang_tag = $lang->getTag();

public function onBeforeDisplayProduct(&$product) { 
//
$document = JFactory::getDocument();
$lang = JFactory::getLanguage();
$lang_tag = $lang->getTag();

foreach (JLanguageHelper::getLanguages() as $language) {
if ($language->lang_code != $lang_tag)  {
//print_r($language->lang_code);
$alias = 'alias_'.$language->lang_code;
//print_r($product);
$product_id = JRequest::getInt('product_id');
$category_id = JRequest::getInt('category_id');
$Itemid = JRequest::getInt('Itemid');

if ($product->$alias != '') {
$url = SEFLink('index.php?option=com_jshopping&controller=product&task=view&category_id='.$category_id.'&product_id='.$product_id.'&Itemid='.$Itemid.'&lang='.$language->sef, 1);
$html = '<link href="'.$url.'" rel="alternate" hreflang="'.$language->lang_code.'" />';
$document->addCustomTag($html);
}
}
}
}

}




При выключенном ЧПУ такой вид URL рабочий. (Был добавлен &lang='.$language->sef)

Код
$url = SEFLink('index.php?option=com_jshopping&controller=product&task=view&category_id='.$category_id.'&product_id='.$product_id.'&lang='.$language->sef, 1);
« Последнее редактирование: 27.11.2013, 09:26:25 от Aspik »
Мои расширения - http://eco-joom.com/ru/
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Re: Есть ли событие типа onBeforeCompileHead ?
« Ответ #6 : 27.11.2013, 00:18:14 »
нужно добавить к ссылке язык я так понимаю
а какой адрес у ссылки сейчас
что выведет echo $_SERVER["HTTP_HOST"].'/index.php?' . http_build_query($_REQUEST);
*

Aspik

  • Давно я тут
  • 542
  • 63 / 2
  • В личку не писать, не отвечу.
Re: Есть ли событие типа onBeforeCompileHead ?
« Ответ #7 : 27.11.2013, 00:21:09 »
нужно добавить к ссылке язык я так понимаю
а какой адрес у ссылки сейчас
что выведет echo $_SERVER["HTTP_HOST"].'/index.php?' . http_build_query($_REQUEST);



Добавления языка при включенном ЧПУ ничего не меняет.
При выключенном ЧПУ такой вид URL рабочий. (Был добавлен &lang='.$language->sef)

Код
$url = SEFLink('index.php?option=com_jshopping&controller=product&task=view&category_id='.$category_id.'&product_id='.$product_id.'&lang='.$language->sef, 1);
Мои расширения - http://eco-joom.com/ru/
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Re: Есть ли событие типа onBeforeCompileHead ?
« Ответ #8 : 27.11.2013, 00:30:04 »
какие сейчас есть ссылки и для каких языков и какие они должны быть. Почему не использовать замену с помощью  str_replace
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Есть ли событие типа onBeforeCompileHead ?
« Ответ #9 : 27.11.2013, 00:38:43 »
Цитировать
Почему не использовать замену с помощью  str_replace
alias разный для разных языков. не получится просто замена.

1. вызываем SEFLink с флагом языка.
2. onBeforeBuildRoute - смотрим, если есть на флаг, делаем $query = array() чтобы не выполнялись условия в роутере, попутно сохраняя $query в плагине в первоначальном виде для дальнейшего использования
3. onAfterBuildRoute - дублируем блок роутера, отвечающий за генерацию ссылки на товар, заменяя JSFactory::getAliasProduct() и JSFactory::getAliasCategory() своими обработками с учетом нужного языка. исходя из начальной $query генерируем алиас
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Re: Есть ли событие типа onBeforeCompileHead ?
« Ответ #10 : 27.11.2013, 01:17:04 »
Цитировать
alias разный для разных языков. не получится просто замена
что мешает менять алиасы? их я вытащу одним запросом с базы насколько я понимаю
тем самым уменьшу количество запросов на формировании ссылок стандартным роутером
Или они уже есть в $product
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Есть ли событие типа onBeforeCompileHead ?
« Ответ #11 : 27.11.2013, 02:09:13 »
ну можно и так конечно, но по сути в роутере и так по одному запросу делается на алиасы, а в дальнейшем статика возвращается уже. тут надо смотреть по ситуации, что по обработке проще. если бы речь шла только об алиасе товара - тут да, проще замена. а так тут же присутствует еще и алиас(ы) категории, и может быть в зависимости от вложенности категории: категория/подкатегория/подподкатегория/товар, а может быть проще - категория/товар. тяжеловато подмену будет делать. а если рассматривать вариант, когда для русского языка заполнен алиас, а для английского нет, то вообще :)
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Re: Есть ли событие типа onBeforeCompileHead ?
« Ответ #12 : 27.11.2013, 02:25:11 »
Цитировать
а если рассматривать вариант, когда для русского языка заполнен алиас, а для английского нет
эт самое простое пропустили обработку данной части  ^-^
Aspik по коду для материалов пишет. Так прямо в карточку товара можно и всталять плагин то зачем
*

Aspik

  • Давно я тут
  • 542
  • 63 / 2
  • В личку не писать, не отвечу.
Re: Есть ли событие типа onBeforeCompileHead ?
« Ответ #13 : 27.11.2013, 09:37:44 »
эт самое простое пропустили обработку данной части  ^-^
Aspik по коду для материалов пишет. Так прямо в карточку товара можно и всталять плагин то зачем
Угу.
Код должен быть универсальным. Он должен работать как при включенном ЧПУ, так и без него.

По правилам компонента URL составлен правильно, есть category_id, product_id, Itemid и lang. Без ЧПУ все работает прекрасно. Вывод проблема в router.
router не может понять что я от него хочу когда добавляю lang. Нет он конечно меняет язык, заменяет один язык на другой в URL, но на этом все законченно.

Код
$url = SEFLink('index.php?option=com_jshopping&controller=product&task=view&category_id='.$category_id.'&product_id='.$product_id.'&Itemid='.$Itemid.'&lang='.$language->sef, 1);

Оставил эту разработку на потом.
Всем спасибо. Всем +
« Последнее редактирование: 27.11.2013, 09:43:27 от Aspik »
Мои расширения - http://eco-joom.com/ru/
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться