Новости Joomla

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

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

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

kaprikorn

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

b2z

  • Глобальный модератор
  • 7290
  • 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

  • Живу я здесь
  • 2450
  • 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

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

voland

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

Fedor Vlasenko

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

b2z

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

voland

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

Что хранится в таблице overrider Joomla 3?

Автор web1

Ответов: 1
Просмотров: 81
Последний ответ 27.03.2024, 19:14:58
от web1
reCAPTCHA V2 Google - Для Joomla 3

Автор Alex GOOD

Ответов: 35
Просмотров: 8258
Последний ответ 10.01.2024, 21:41:38
от Vastriet
Joomla 3.10.12 и MySQL 8

Автор designer71

Ответов: 0
Просмотров: 373
Последний ответ 19.10.2023, 11:25:18
от designer71
Почему Joomla не поддерживает формат webp?

Автор Sensession

Ответов: 74
Просмотров: 10506
Последний ответ 03.10.2023, 19:44:42
от fsv
erid в Joomla

Автор newalex

Ответов: 0
Просмотров: 305
Последний ответ 25.09.2023, 18:45:34
от newalex