Новости Joomla

Свои типы полей в Joomla.

Свои типы полей в Joomla.Это большая тема, о которой можно говорить очень много

Это большая тема, о которой можно говорить очень много. Самое главное, что возможности применения ограничиваются только вашей больной фантазией. Вы строите интерфейс своего модуля или плагина и вам нужно подтянуть данные из сторонней системы (список чего-нибудь по какому-нибудь API), чтобы сохранить выбранный id в Joomla. Или сделать какую-то проверку и в зависимости от неё показать то или иное сообщение пользователю. Для этого подойдут свои пользовательские типы полей. Интерфейс Joomla по большей части описан в XML-файлах. У каждого из них свои параметры. Некоторые не описаны в документации (manual.joomla.org), поэтому самым любопытным будет полезно заглянуть в собственно файлы фреймворка по пути

libraries/src/Form/FormField.php, а так же в
libraries/src/Form/Fields. У каждого класса поля перечислены его специфические свойства, которые можно описывать в XML. А в своём типе поля вы можете устанавливать эти значения программно. В моём модуле WT Quick links под капотом происходят изменения. Теперь для работы (в админке) ему нужен вспомогательный плагин. А в самом модуле нам бы проверить, а не выключен ли он? В Joomla есть тип поля Note - заметка. Его можно использовать для вывода примечаний.

<field type="note" name="your_note_for_user" label="Заголовок примечания" title="Альтернативный способ для заголовка" description="Текст примечания" class="col-12 alert alert-info" heading="h1" close="true" />

heading - указывать уровень заголовка.
close - позволяет закрыть это примечание. В классе поля
libraries/src/Form/Field/NoteField.php описана логика вывода. И в принципе оно нам подходит для нашей задачи. Но оно будет выводить сообщение всегда, а нам нужно только тогда, когда плагин отключён. Поэтому берём и создаём свой класс поля, который мы унаследуем от
NoteField. Это значит, что у нас в руках будет весь инструментарий стандартного поля
Note + то, что мы сами добавим. В XML-манифест добавляем наше поле

<field type="systempluginstatus" name="systempluginstatus" addfieldprefix="Joomla\Module\Wtquicklinks\Site\Fields"/>

-

type - имя файла и класса,-
addfieldprefix - указываем namespace к нашему классу, может быть любой нам нужный-
name - нельзя полю без имени...Это означает, что Joomla будет использовать класс поля из файла
modules/mod_wt_quick_links/src/Fields/SystempluginstatusField.php.А в классе поля будет написано следующее:

<?php // namespace для атрибута addfieldprefix namespace Joomla\Module\Wtquicklinks\Site\Fields; // нельзя напрямую обращаться к этому файлу defined('_JEXEC') or die; // подключаем родительский класс для переопределения use Joomla\CMS\Form\Field\NoteField; use Joomla\CMS\Language\Text; use Joomla\CMS\Plugin\PluginHelper; // имя класса и имя файла точь-в-точь class SystempluginstatusField extends NoteField { protected $type = 'Systempluginstatus'; protected function getLabel() { // если плагин не включён if(PluginHelper::isEnabled('system','wtquicklinks')) { // меняем свойства родительского класса $this->class = 'alert alert-danger w-100'; $this->element['label'] = '⚠️ А-а-а-а!'; $this->element['description'] = 'Плагин не включён!!'; // и просто рендерим его с нашими свойствами return parent::getLabel(); } // А иначе всё хорошо, скрываем поле из виду. $this->parentclass = 'd-none'; return ''; } }

Просто и удобно. И людям приятно, что о них позаботились и рассказали почему что-то не работает. @webtolkru#joomla #php #webdev #разработка

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

romagromov

  • Давно я тут
  • 692
  • 9 / 3
Здравствуйте!
Первый раз делаю мультиязычный сайт.
Пока полет нормальный.
Но как перевести заголовки модулей?
Не создавать же разные модули только из-за заголовков.
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
Re: Перевод заголовков модулей?
« Ответ #1 : 10.05.2020, 16:51:49 »
Не создавать же разные модули только из-за заголовков.
Вы можете в название модуля вставить константу эту константу создать в менеджер расширение и переопределение констант там Создать константу и у вас будут на разных языках разные названия модулей
*

romagromov

  • Давно я тут
  • 692
  • 9 / 3
Re: Перевод заголовков модулей?
« Ответ #2 : 10.05.2020, 17:41:55 »
Вы можете в название модуля вставить константу эту константу создать в менеджер расширение и переопределение констант там Создать константу и у вас будут на разных языках разные названия модулей


Ну я так и подозревал. Но оно не работает.
Вот я в название модуля вставил такое



Затем в файл /language/overrides/fr-FR.override.ini

добавил DA_NEW_ITEMS="De Nouveaux Sons"

Затем на сайте нажал на французский язык - и ничего не заменилось.
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
Re: Перевод заголовков модулей?
« Ответ #3 : 10.05.2020, 17:47:07 »
Языки: Переопределение констант
Вот так надо !
*

romagromov

  • Давно я тут
  • 692
  • 9 / 3
Re: Перевод заголовков модулей?
« Ответ #4 : 10.05.2020, 17:49:40 »
Не вижу разницы  *ОХ-Х-Х*
 
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
Re: Перевод заголовков модулей?
« Ответ #5 : 10.05.2020, 17:54:41 »
Не вижу разницы

А ну тогда нужно немножко по-другому это сделать
/templates/system/html/modules.php
Идём сюда
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
Re: Перевод заголовков модулей?
« Ответ #6 : 10.05.2020, 17:57:17 »
Ищем такую строчку
Код
$headerTag      = htmlspecialchars($params->get('header_tag', 'h3'), ENT_QUOTES, 'UTF-8');
И меняем её соответственно в таком формате
Код
$headerTag = JText::_($headerTag);
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
Re: Перевод заголовков модулей?
« Ответ #7 : 10.05.2020, 17:58:15 »
Слушайте поставьте мне уже плюса пускай будет их в 100
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
Re: Перевод заголовков модулей?
« Ответ #8 : 10.05.2020, 17:59:21 »
Мы не знаем что это такое, если бы мы знали что это такое, мы не знаем что это такое!
« Последнее редактирование: 14.06.2020, 22:49:15 от era »
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
Re: Перевод заголовков модулей?
« Ответ #9 : 10.05.2020, 18:02:35 »
Сорри Я ошибся !
В JText нужно кинуть  $module->title
*

romagromov

  • Давно я тут
  • 692
  • 9 / 3
Re: Перевод заголовков модулей?
« Ответ #10 : 10.05.2020, 18:17:46 »
Не работает...
заменил в 2-х местах на $headerTag = JText::_($module->title);
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
Re: Перевод заголовков модулей?
« Ответ #11 : 10.05.2020, 18:29:09 »
Не не так
Та Давайте посмотрим !!
skype : agroparknew
*

gartes

  • Завсегдатай
  • 1859
  • 142 / 6
  • Е = mс²
*

voland

  • Легенда
  • 11028
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Re: Перевод заголовков модулей?
« Ответ #13 : 11.05.2020, 00:00:45 »
Не работает...
заменил в 2-х местах на $headerTag = JText::_($module->title);
Не надо так. Это хак ядра.
*

Akeksandr

  • Захожу иногда
  • 396
  • 12 / 0
Re: Перевод заголовков модулей?
« Ответ #14 : 03.04.2021, 20:17:53 »
Ну и вот мы решили вопрос
Подскажите пожалуйста как решили. Может и мне подойдёт.
Мне нужно назвать модуль (html код) как языковой переменной.
Чтобы сделать перевод для других языков.
*

sivers

  • Живу я здесь
  • 2578
  • 357 / 0
Re: Перевод заголовков модулей?
« Ответ #15 : 03.04.2021, 20:43:29 »
Мне нужно назвать модуль (html код) как языковой переменной.
Чтобы сделать перевод для других языков.
В настройках модуля отключите вывод заголовка. В макете модуля добавьте вывод заголовка примерно так:
Код
<h3><?php echo JText::_($module->title); ?></h3>
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

Akeksandr

  • Захожу иногда
  • 396
  • 12 / 0
Re: Перевод заголовков модулей?
« Ответ #16 : 03.04.2021, 21:49:04 »
В настройках модуля отключите вывод заголовка. В макете модуля добавьте вывод заголовка примерно так:
Код
<h3><?php echo JText::_($module->title); ?></h3>
В устанавливаемом модуле наверное я бы нашёл макет.
Но вот не могу осилить как найти макет, если это модуль (html код)
*

sivers

  • Живу я здесь
  • 2578
  • 357 / 0
Re: Перевод заголовков модулей?
« Ответ #17 : 03.04.2021, 22:07:57 »
как найти макет, если это модуль (html код)
mod_custom
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

Akeksandr

  • Захожу иногда
  • 396
  • 12 / 0
Re: Перевод заголовков модулей?
« Ответ #18 : 03.04.2021, 22:28:24 »
mod_custom
Есть такой. Буду пробовать. Так...
Но ведь насколько я понимаю то вывод заголовка повлияет на все остальные модули  (html код).
У меня их несколько. Буду думать...
Наверное придумал. Сделать дополнительные альтернативные макеты.
Супер! Спасибо!!! :D :D :D
« Последнее редактирование: 03.04.2021, 22:40:46 от Akeksandr »
*

sivers

  • Живу я здесь
  • 2578
  • 357 / 0
Re: Перевод заголовков модулей?
« Ответ #19 : 03.04.2021, 22:45:51 »
Сделать дополнительные альтернативные макеты
именно
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

Taatshi

  • Гуру
  • 5258
  • 481 / 2
  • Верстаем и кодим. Обращайтесь ;)
Re: Перевод заголовков модулей?
« Ответ #20 : 04.04.2021, 11:12:55 »
А можно поинтересоваться - какой модуль у Вас подходит для всех языковых версий сайта?
ВЕРСТКА, САЙТЫ ПОД КЛЮЧ, УДАЛЕНИЕ ВИРУСОВ, МИГРАЦИЯ НА JOOMLA 3, ОБНОВЛЕНИЕ  |  ОТЗЫВЫ 
Связь: telegram - Taatshi, почта - Taatshi на яндексе, Skype - Taatshi
*

Akeksandr

  • Захожу иногда
  • 396
  • 12 / 0
Re: Перевод заголовков модулей?
« Ответ #21 : 04.04.2021, 12:04:30 »
Элементарно.
Вывести видео с YouTube.  Или в модуле картинка. Или вывод другого модуля...
*

Taatshi

  • Гуру
  • 5258
  • 481 / 2
  • Верстаем и кодим. Обращайтесь ;)
Re: Перевод заголовков модулей?
« Ответ #22 : 04.04.2021, 17:21:01 »
Это совсем не так элементарно, как Вы пытаетесь тут показать. Зачем на англоязычном сайте русское видео, куда ведет картинка и что на ней написано - не просто же картинка для разглядывания, у нее должен быть какой-то логический функционал... И другой модуль тоже имеет языковой окрас 100%.

Поэтому хотелось бы ответа от ТС
ВЕРСТКА, САЙТЫ ПОД КЛЮЧ, УДАЛЕНИЕ ВИРУСОВ, МИГРАЦИЯ НА JOOMLA 3, ОБНОВЛЕНИЕ  |  ОТЗЫВЫ 
Связь: telegram - Taatshi, почта - Taatshi на яндексе, Skype - Taatshi
*

Akeksandr

  • Захожу иногда
  • 396
  • 12 / 0
Re: Перевод заголовков модулей?
« Ответ #23 : 04.04.2021, 18:41:10 »
Это совсем не так элементарно, как Вы пытаетесь тут показать. Зачем на англоязычном сайте русское видео, куда ведет картинка и что на ней написано - не просто же картинка для разглядывания, у нее должен быть какой-то логический функционал... И другой модуль тоже имеет языковой окрас 100%.
Поэтому хотелось бы ответа от ТС
Я так понимаю вопрос относится ко мне. Не могу понять Ваши нападки в мою сторону. Я Вам чем-то не угодил?
Я привёл простой пример. У каждого могут быть свои варианты.
Подскажите, будет ли принципиальная разница если гипотетический модуль будет на сайтах с русской, украинской, белорусской, молдавской или казахской локализацией выводить такое видео?

Ну или например такое.
*

Akeksandr

  • Захожу иногда
  • 396
  • 12 / 0
Re: Перевод заголовков модулей?
« Ответ #24 : 03.06.2021, 12:05:24 »
В настройках модуля отключите вывод заголовка. В макете модуля добавьте вывод заголовка примерно так:
Код
<h3><?php echo JText::_($module->title); ?></h3>
С заголовком помогли. Ещё раз благодарю. Может и с текстом в модуле подскажите?
В модуле HTML хочу прописать языковую переменную. Чтобы не делать разные модули под разные языки. Нашёл что такое вроде бы можно
делать с помощью плагина Sourcerer. Но что-то не получается. Подскажите пожалуйста знающие. !
*

sivers

  • Живу я здесь
  • 2578
  • 357 / 0
Re: Перевод заголовков модулей?
« Ответ #25 : 03.06.2021, 13:21:23 »
Может и с текстом в модуле подскажите?
В тексте тоже можно, но либо весь текст целиком помещать в языковую переменную, либо использовать макросы (фрагменты текста, которые при выводе заменяются на полезный текст).
Например, вставляете в текст такие фрагменты: {MACRO1}, {MACRO2}, {LYUBOE_DRUGOE_BEZ_PROBELA}
а в макете вывода модуля находите их в тексте и заменяете. Можно регулярным выражением:
Код
if(preg_match_all('|\{(\S+)\}|isU', $module->content, $pregs)){
    foreach($pregs[1] as $p => $langconst) $pregs[1][$p] = JText::_($langconst);
    $module->content = str_replace($pregs[0], $pregs[1], $module->content);
}
echo $module->content;
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

Akeksandr

  • Захожу иногда
  • 396
  • 12 / 0
Re: Перевод заголовков модулей?
« Ответ #26 : 03.06.2021, 15:35:57 »
В тексте тоже можно, но либо весь текст целиком помещать в языковую переменную, либо использовать макросы (фрагменты текста, которые при выводе заменяются на полезный текст).
Полностью весь текст будет как языковая переменная.
*

sivers

  • Живу я здесь
  • 2578
  • 357 / 0
Re: Перевод заголовков модулей?
« Ответ #27 : 03.06.2021, 16:18:21 »
Полностью весь текст будет как языковая переменная.
Ну, тогда еще проще. В модуле в тексте указать только языковую переменную, а в макете вписать:
Код
$module->content = JText::_(trim(strip_tags($module->content)));
echo $module->content;
Либо вообще ничего не указывать в контенте модуля, а в макете вывести языковую переменную (менее гибко, но проще):

$echo $module->content;
Код
echo JText::_('MY_MODULE_LANG_CONST');
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

Akeksandr

  • Захожу иногда
  • 396
  • 12 / 0
Re: Перевод заголовков модулей?
« Ответ #28 : 03.06.2021, 16:42:52 »
echo JText::_('MY_MODULE_LANG_CONST');
Создал пустой модуль. В дополнительном макете заменил 
Код
<?php echo $module->content; ?>
на этот
Код
<?php echo JText::_('MY_MODULE_LANG_CONST'); ?>
Создал языковую переменную  MY_MODULE_LANG_CONST в файле  \administrator\language\overrides\uk-UA.override.ini
Но к сожалению выводится текст  MY_MODULE_LANG_CONST
Видимо не туда нужно прописать переменную. Подскажите пожалуйста.

П.С.  Нашёл. Огромное спасибо. В папке Ленгвич для модуля Кастом. :D :D :D
« Последнее редактирование: 03.06.2021, 16:47:12 от Akeksandr »
*

Taatshi

  • Гуру
  • 5258
  • 481 / 2
  • Верстаем и кодим. Обращайтесь ;)
Re: Перевод заголовков модулей?
« Ответ #29 : 03.06.2021, 21:10:00 »
Akeksandr, имхо, проще прямо в админке вводить значение переменной. Языки - переопределение констант.

А там, где Вы добавили, затрется при обновлении.
ВЕРСТКА, САЙТЫ ПОД КЛЮЧ, УДАЛЕНИЕ ВИРУСОВ, МИГРАЦИЯ НА JOOMLA 3, ОБНОВЛЕНИЕ  |  ОТЗЫВЫ 
Связь: telegram - Taatshi, почта - Taatshi на яндексе, Skype - Taatshi
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Перевод установленного шаблона на русский язык [для чайников]

Автор Полина

Ответов: 3
Просмотров: 4112
Последний ответ 20.02.2020, 15:57:37
от Полина
Перевод шаблона на русский язык

Автор Единая Справка Строителя

Ответов: 1
Просмотров: 2627
Последний ответ 19.06.2019, 17:02:33
от SeBun
Перевод расширенного поиска

Автор dedmazaj

Ответов: 0
Просмотров: 2302
Последний ответ 29.03.2018, 21:56:43
от dedmazaj
Перевод компонента smart shoutbox и social crossposting

Автор Olga

Ответов: 1
Просмотров: 17230
Последний ответ 26.01.2018, 16:05:25
от AdWeb
Как вам нравится перевод официальной страницы о Joomla 3?

Автор zikkuratvk

Ответов: 131
Просмотров: 26481
Последний ответ 26.09.2017, 00:39:28
от vipiusss