Новости Joomla

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

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

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

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

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

🏆 Открыто голосование за Joomla в премии CMS Critic People’s Choice Awards 2025

🏆 Открыто голосование за Joomla в  премии CMS Critic People’s Choice Awards 2025

🗓 Голосование продлится до 27 февраля 2026 года.

👩‍💻 Проголосовать! 👩‍💻

Номинации, в которых можно проголосовать за Joomla:
⭐️ Best Free CMS
⭐️ Best Open Source CMS
⭐️ Best Enterprise CMS

Также в номинации Best e-Commerce Solution участвуют компоненты интернет-магазинов для Joomla:
⭐️ HikaShop
⭐️ Virtuemart

В номинации Best Website Builder оказались:
⭐️ YooTheme
⭐️ SP Page Builder

Что такое CMS Critic Awards?
С 2012 года премия CMS Critic Awards занимает особое место в сообществе систем управления контентом (CMS). Это единственный в своем роде сайт, который составляет рейтинг системы управления контентом и связанных с ними решений на рынке — от малого до крупного и подчеркивает их инновации и услуги.

Каждый год награда CMS Critic Awards присуждается одному победителю в различных отраслевых категориях, таких как: «Лучшая облачная CMS», «Лучший DXP», «Лучшая Headless CMS и других. Затем результаты оглашаются через СМИ вместе с выбором редакции CMS Critic.
В этом году премия вернулась к своим традициям и только TOP-5 движков по количеству номинаций попали в 2-й этап - голосование.

@joomlafeed

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

kaprikorn

  • Осваиваюсь на форуме
  • 39
  • 4 / 0
  • www.cleverscript.ru
Здравствуйте, коллеги, подскажите каким образом можно переопределить текст выводимых сообщений Joomla, которые выводятся через тег:

<jdoc:include type="message" /> ?

Заказчика не усраивает "неинформативность" сообщений Joomla, в частности сообщение которое выводится если пользователь при регистрации вводит логин который уже занят, пользователю в этом случае выводится такое вот сообщние "Введённый вами логин некорректен. Пожалуйста, введите другой логин." а нужно бы вывести что то вроде "Введённый вами логин уже занят. Пожалуйста, введите другой логин.".

Как это можно сделать? Попробовал написать системный плагин:

Код
class plgSystemMessage extends JPlugin
{

function onAfterRender()
{
if(JFactory::getApplication()->isAdmin()) return true;

$messages = JFactory::getApplication()->getMessageQueue();

if(count($messages)>0)
{

foreach ($messages as $message)
{
$message['message'] = ($message['message']=='Введённый вами логин некорректен. Пожалуйста, введите другой логин.')? 'Введённый вами логин занят. Пожалуйста, введите другой логин.' : $message['message'];
}
                }

             return true;
       }

}


Но не понимаю как установить новое значение.... Как быть кто знает, как вообще можно управлять сообщениям Joomla 3.2.0 ?
*

fs-p

  • Захожу иногда
  • 127
  • 49 / 0
Расширения - Менеджер языков - Переопределение констант.
Создаете новое переопределение. Ищете константу по дефолтному тексту. Вводите свой текст. Сохраняете.
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Так не пойдет, т.к. наверняка эта константа применяется при любой ошибке авторизации, а не только если логин занят.
*

kaprikorn

  • Осваиваюсь на форуме
  • 39
  • 4 / 0
  • www.cleverscript.ru
Так не пойдет, т.к. наверняка эта константа применяется при любой ошибке авторизации, а не только если логин занят.
В том то и дело... Интересует именно механизм переопределения вывода системных сообщений Joomla
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Так не пойдет, т.к. наверняка эта константа применяется при любой ошибке авторизации, а не только если логин занят.
Ну при авторизации точно нет. И действительно, смысл такое проверять? Это проверяется только при регистрации.
*

kaprikorn

  • Осваиваюсь на форуме
  • 39
  • 4 / 0
  • www.cleverscript.ru
Ну при авторизации точно нет. И действительно, смысл такое проверять? Это проверяется только при регистрации.
Не понял, что значит нет смысла? я же отписал проблему. Мне важно знать какая функция отвечает за переопределение системных сообщений, вот что меня интересует.
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Не понял, что значит нет смысла? я же отписал проблему.
Вы не поняли - я писал не Вам, а ответ на пост Arkadiy.

Он пишет, что нельзя просто переопределить языковую константу, так как она может использоваться в другом контексте, например при любой ошибке авторизации. Мой ответ - этого сообщения при авторизации точно не будет, так как там нет проверки на то, что логин уже занят. Вывод - можно использовать переопределение.

Мне важно знать какая функция отвечает за переопределение системных сообщений, вот что меня интересует.
Насколько мне известно - нет такой функции.
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Насколько мне известно - нет такой функции.
Нет функции, добавим костыль  ^-^
за вывод системных сообщений отвечает файл libraries/joomla/document/html/renderer/message.php
функция private function renderDefaultMessage($msgList) вы можете переопределить вывод на свой
Файл /templates/beez3/html/message.php и копируем (если его там нет) в
/templates/ваш шаблон/html/message.php
а в нем
Код: php
//.................
$searchmsg = "Привет";
$youmsg = "Пока";
foreach ($msgs as $msg)
{
//Если мы нашли наше сообщение, то заменям на нужное
if($msg == $searchmsg ) $msg = $youmsg;
$buffer .= "\n\t\t<li>" . $msg . "</li>";
}
//.................
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Я имел ввиду то, что без переделок ядра существует одна константа на все ошибки создания учетной записи. Текст сообщения говорит об этом, хотя конечно я не смотрел внутрь. Если я прав, то эту константу переопределять нет смысла т.к. в общем виде она подходит по смыслу к событиям по которым она вызывается, если ее конкретизировать, то она будет вводить в заблуждение.
*

kaprikorn

  • Осваиваюсь на форуме
  • 39
  • 4 / 0
  • www.cleverscript.ru
Нет функции, добавим костыль  ^-^
за вывод системных сообщений отвечает файл libraries/joomla/document/html/renderer/message.php
функция private function renderDefaultMessage($msgList) вы можете переопределить вывод на свой
Файл /templates/beez3/html/message.php и копируем (если его там нет) в
/templates/ваш шаблон/html/message.php
а в нем
Код: php
//.................
$searchmsg = "Привет";
$youmsg = "Пока";
foreach ($msgs as $msg)
{
//Если мы нашли наше сообщение, то заменям на нужное
if($msg == $searchmsg ) $msg = $youmsg;
$buffer .= "\n\t\t<li>" . $msg . "</li>";
}
//.................

Спасибо! Но почему то ошибка:
Warning: Invalid argument supplied for foreach() in /var/www/siteprojects/data/www/.../templates/.../html/message.php on line 2
*

kaprikorn

  • Осваиваюсь на форуме
  • 39
  • 4 / 0
  • www.cleverscript.ru
Попробовал так:

Код
<?php
foreach ($msgList as $msg)
{
foreach($msg as $m){
if($m == 'Введённый вами логин некорректен. Пожалуйста, введите другой логин.' ) $m = 'Введённый вами логин занят. Пожалуйста, введите другой логин.';
$buffer .= "\n\t\t<li>" . $m . "</li>";
}
}
?>
но ничего не переопределяется!
*

varX

  • Живу я здесь
  • 2467
  • 141 / 5
  • разработка компонентов
Здравствуйте, коллеги, подскажите каким образом можно переопределить текст выводимых сообщений Joomla, которые выводятся через тег:

<jdoc:include type="message" /> ?

Заказчика не усраивает "неинформативность" сообщений Joomla, в частности сообщение которое выводится если пользователь при регистрации вводит логин который уже занят, пользователю в этом случае выводится такое вот сообщние "Введённый вами логин некорректен. Пожалуйста, введите другой логин." а нужно бы вывести что то вроде "Введённый вами логин уже занят. Пожалуйста, введите другой логин.".

Как это можно сделать? Попробовал написать системный плагин:

Код
class plgSystemMessage extends JPlugin
{

function onAfterRender()
{
if(JFactory::getApplication()->isAdmin()) return true;

$messages = JFactory::getApplication()->getMessageQueue();

if(count($messages)>0)
{

foreach ($messages as $message)
{
$message['message'] = ($message['message']=='Введённый вами логин некорректен. Пожалуйста, введите другой логин.')? 'Введённый вами логин занят. Пожалуйста, введите другой логин.' : $message['message'];
}
                }

             return true;
       }

}


Но не понимаю как установить новое значение.... Как быть кто знает, как вообще можно управлять сообщениям Joomla 3.2.0 ?
А не проще глобально поменять? В функции onAfterRender пишем

Код: php
$output = JResponse::getBody();
$output = str_replace($pattern, $buffer, $output);
JResponse::setBody($output);
Разработка и ремонт. VirtueMart. JoomShopping. Свои компоненты. Принимаю заявки на plasma-web.ru.
*

kaprikorn

  • Осваиваюсь на форуме
  • 39
  • 4 / 0
  • www.cleverscript.ru
lcd25, спасибо! Получилось сделать системным  плагином!
Код
defined('_JEXEC') or die('Restricted access');
jimport('joomla.plugin.plugin');


class plgSystemMessage extends JPlugin
{
public function __construct(& $subject, $config)
{
parent::__construct($subject, $config);
}

function onAfterRender()
{
if(JFactory::getApplication()->isAdmin()) return true;

$messages = JFactory::getApplication()->getMessageQueue();

if(count($messages)>0)
{
$output = JResponse::getBody();
$output = str_replace('Введённый вами логин некорректен. Пожалуйста, введите другой логин.', 'Введённый вами логин занят! Пожалуйста, введите другой логин.', $output);
JResponse::setBody($output);

        JResponse::setBody($output);
        return true;
}
}
}

XML

Код
<?xml version="1.0" encoding="utf-8"?>
<extension version="3.2" type="plugin" group="system">
<name>Message</name>
<author>toorr2p</author>
<creationDate>April 2007</creationDate>
<copyright>Copyright (C) 2005 - 2014 Open Source Matters. All rights reserved.</copyright>
<license>GNU General Public License version 2 or later; see LICENSE.txt</license>
<authorEmail>toorr2p@bigmir.net</authorEmail>
<authorUrl>www.cleverscript.ru</authorUrl>
<version>3.2.0</version>
<description>Message</description>
<files>
<filename plugin="message">message.php</filename>
<filename>index.html</filename>
</files>
<config>
<fields name="params">
<fieldset name="basic">

</fieldset>
</fields>
</config>
</extension>

Fedor Vlasenko, спасибо в файле message.php в шаблоне также можно переопределять:

Код
defined('_JEXEC') or die;

function renderMessage($msgList)
{
// Build the return string
$buffer = '';
$buffer .= "\n<div id=\"system-message-container\">";

// If messages exist render them
if (is_array($msgList))
{
$buffer .= "\n<div id=\"system-message\">";
foreach ($msgList as $type => $msgs)
{
$buffer .= "\n<div class=\"alert alert-" . $type . "\">";

// This requires JS so we should add it trough JS. Progressive enhancement and stuff.
$buffer .= "<a class=\"close\" data-dismiss=\"alert\">×</a>";

if (count($msgs))
{
$buffer .= "\n<h4 class=\"alert-heading\">" . JText::_($type). "</h4>";
$buffer .= "\n<div>";
foreach ($msgs as $msg)
{
if($msg == 'Введённый вами логин некорректен. Пожалуйста, введите другой логин.' ) $msg = 'Введённый вами логин занят. Пожалуйста, введите другой логин.';
$buffer .= "\n\t\t<p>" . $msg . "</p>";
}
$buffer .= "\n</div>";
}
$buffer .= "\n</div>";
}
$buffer .= "\n</div>";
}

$buffer .= "\n</div>";

return $buffer;
}
*

fs-p

  • Захожу иногда
  • 127
  • 49 / 0
Насколько я вижу у вас получилось тоже самое если б вы переопределили константу. т.е. любое системное сообщение, содержащее "Введённый вами логин некорректен. Пожалуйста, введите другой логин." будет менятся на "Введённый вами логин уже занят. Пожалуйста, введите другой логин.". Нужен ли такой велосипед? Если я не прав, поправьте меня.
*

fs-p

  • Захожу иногда
  • 127
  • 49 / 0
Так не пойдет, т.к. наверняка эта константа применяется при любой ошибке авторизации, а не только если логин занят.
Речь идет о регистрации, а не об авторизации, поэтому если пользователю сообщить "логин некорректен" или "логин занят", то для него вывод один - менять логин на другой. Переопределяйте константу, которая используется в регистрации (там две), и не замарачивайтесь с плагинами.
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Насколько я вижу у вас получилось тоже самое если б вы переопределили константу. т.е. любое системное сообщение, содержащее "Введённый вами логин некорректен. Пожалуйста, введите другой логин." будет менятся на "Введённый вами логин уже занят. Пожалуйста, введите другой логин.". Нужен ли такой велосипед? Если я не прав, поправьте меня.
Именно так ;) Вообще не понимаю смысла заморачиваться.
*

voland

  • Легенда
  • 11026
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Насколько я вижу у вас получилось тоже самое если б вы переопределили константу. т.е. любое системное сообщение, содержащее "Введённый вами логин некорректен. Пожалуйста, введите другой логин." будет менятся на "Введённый вами логин уже занят. Пожалуйста, введите другой логин.". Нужен ли такой велосипед? Если я не прав, поправьте меня.
Прав.
Развели тему и кучу дел хаков вместо пары кликов в админке.
*

Fedor Vlasenko

  • Живу я здесь
  • 3845
  • 733 / 7
  • https://fedor-vlasenko.web.app
Развели тему и кучу дел хаков вместо пары кликов в админке.
А вот тут ты уже не прав. Понятно, что исправить языковую константу проще всего. А завтра выйдет новая локализация и будешь вновь менять свою константу. И я сразу написал, что это костыль. Но это единственное решение поставленной задачи не требующее дальнейших действий при обновлении.
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
А завтра выйдет новая локализация и будешь вновь менять свою константу.
Не припомню, чтобы меняли константы. На то они и константы ;)
*

voland

  • Легенда
  • 11026
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
А вот тут ты уже не прав. Понятно, что исправить языковую константу проще всего. А завтра выйдет новая локализация и будешь вновь менять свою константу. И я сразу написал, что это костыль. Но это единственное решение поставленной задачи не требующее дальнейших действий при обновлении.
Что за чушь?
Константы не меняют в пределах ветки.
А вот код - легко, с каждым подрелизом. Собственно переопределение констант и сделано чтоб в таких ситуациях легко менять сообщения!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Ошибка Missing field in database: Joomla\CMS\Table\Extension &#160; extension_id

Автор Ragivort

Ответов: 1
Просмотров: 1712
Последний ответ 25.12.2025, 21:10:01
от fbr
Joomla 3 не пускает в админку (просто перезагружается страница) (гуглил, нашёл решение, не помогло)

Автор lifelover2b

Ответов: 11
Просмотров: 6437
Последний ответ 05.06.2025, 04:48:29
от andrey222
По поводу сессий Joomla 3

Автор azm1n

Ответов: 0
Просмотров: 2479
Последний ответ 25.05.2025, 09:26:17
от azm1n
Стоит ли ставить плагин rel="canonical" на Joomla 3

Автор azm1n

Ответов: 2
Просмотров: 2969
Последний ответ 09.05.2025, 12:39:18
от azm1n
Вывести поля профиля Joomla

Автор romagromov

Ответов: 11
Просмотров: 4192
Последний ответ 28.04.2025, 10:25:44
от sivers