Новости Joomla

Плагин вставки языковых констант в контент Joomla

Плагин вставки языковых констант в контент Joomla.Плагин позволяет вставлять значения языковых констант в статьи, модули и другой контент Joomla с помощью синтаксиса
{langos LANGUAGE_CONSTANT}.При создании мультиязычного сайта на Joomla вы часто сталкиваетесь с ситуацией:
Нужно изменить всего несколько слов в модуле или статье в зависимости от языка — но приходится создавать отдельные копии контента для каждой языковой версии. Это неудобно и требует лишних усилий.👩‍💻 Решением проблемы становится плагин Langos.Langos позволяет вставлять языковые константы прямо в контент с помощью простого синтаксиса:
{langos YOUR_LANGUAGE_CONSTANT}
Это работает как вызов
\Joomla\CMS\Language\Text::_('YOUR_LANGUAGE_CONSTANT'), но без необходимости программировать или редактировать шаблоны.Кроме того, плагин поддерживает загрузку языковых файлов конкретных расширений, например модулей или компонентов. Для этого просто укажите третий аргумент в шорткоде:
{langos MOD_FOOTER_LINE1, mod_footer}
Теперь плагин загрузит языковую константу из соответствующего языкового файла именно этого расширения.Ключевые особенности плагина🚀 Результаты работы плагина сохраняются в кэше, что положительно влияет на производительность сайта🔁 Совместим с Joomla Cache, JotCache и другими популярными системами кэширования🧩 Вставка языковых констант в любые элементы контента: статьи, модули и т.д.🌐 Полная интеграция с системой мультиязычности Joomla🔌 Работает «из коробки» с любыми стандартными типами контента🛠 Не требует навыков программирования🧪 Подходит для использования визуальными редакторами и не-программистами📦 Поддержка загрузки языковых файлов конкретных расширений🎯 Идеален для динамической замены текста в разных языкахСистемные требованияJoomla >=4.2 | 5.xPHP >= 7.4Разработчик плагина - участник нашего сообщества Артём Васильев (
@kernusr). Скачать плагин с GitHub и документация.#joomla #расширения

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

zeus07

  • Давно я тут
  • 723
  • 9 / 0
Всем привет  ^-^
Разрабатываю лендинг, свой кастомный шаблон. Некоторые материалы необходимо вывести в модальном окне, к примеру "Условия использования" и "Политику конфиденциальности".

Что сделал:
1. К шаблону подключил Bootstrap 5 modal:
Код
\Joomla\CMS\HTML\HTMLHelper::_('bootstrap.modal', '.modal', []);

2. Сделал блок с выводом модального окна(пока тестовое, взято из документации Bootstrap 5):
Код
<div class="modal" tabindex="-1">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title">Modal title</h5>
        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
      </div>
      <div class="modal-body">
        <p>Modal body text goes here.</p>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>

Далее пытаюсь понять, как правильно в модальное окно грузить содержимое материала. Буду рад, если кто-то сможет подсказать, спасибо.
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
Попробуй renderModal
Пример использования можно здесь посмотреть /administrator/components/com_cpanel/tmpl/cpanel/default.php

В качестве 'url' передавай ссылку на материал:
Код
\Joomla\CMS\Router\Route::_('index.php?option=com_content&view=article&id=1&tmpl=component')
Это ссылка на материал, ID которого равно единице.

В общем наверное вот так:
Код
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;

$modalHTML = HTMLHelper::_(
    'bootstrap.renderModal',
    'myModal',
    [
        'title'      => Text::_('MY_MODAL'),
        'url'        => Route::_('index.php?option=com_content&view=article&id=1&tmpl=component'),
        'bodyHeight' => 70,
        'modalWidth' => 80,
        'footer'     => '<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">' . Text::_('CLOSE_MODAL') . '</button>',
    ]
);

<a data-bs-target="#myModal" class="mybuttonclass" title="<?php echo Text::_('MY_BUTTON'); ?>" data-bs-toggle="modal" role="button">
    <?php echo Text::_('MY_BUTTON'); ?>
</a>

<?php echo $modalHTML; ?>
*

zeus07

  • Давно я тут
  • 723
  • 9 / 0
Ага, спасибо. Пример рендереа модального окна нашёл. Единственное, мне не совсем понятно, где передавать ссылку.
Чуть подробнее объясню.
Ссылка на разрабатывамемый сайт: https://club.artcolorit.com/

Там есть блок Наши игры. При клике на Подробнее хочу рендерить модальное окно и в нём текст нужной статьи. Это будет примерно вот так выглядеть: https://prnt.sc/20ngwem. Тот же принцип хочу использовать и при клике на ссылки "Условия использования" и "Политика конфиденциальности".

Где именно прописывать код для рендера? В index.php? А то надо как-то динамически получается рендерить контент
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
Цитировать
Где именно прописывать код для рендера? В index.php? А то надо как-то динамически получается рендерить контент]Где именно прописывать код для рендера? В index.php? А то надо как-то динамически получается рендерить контент
Ну я написал - передавать в параметре url ссылку на материал. Привёл выше пример кода.
*

zeus07

  • Давно я тут
  • 723
  • 9 / 0
Ну я написал - передавать в параметре url ссылку на материал. Привёл выше пример кода.
Да, я понимаю. Пытаюсь как раз понять, как именно динамически передать URL нужного материала. Прописать как-то так ссылку в нужном месте:
Код
<a href="index.php?option=com_content&view=article&id=2&catid=2" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal">Подробнее</a>

И по JS забирать содержимое атрибута href и подставлять в параметр URL рендера? Или как-то иначе?
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
А кто знает, какой нужный, а какой нет? Как они в список попадают?
*

zeus07

  • Давно я тут
  • 723
  • 9 / 0
А кто знает, какой нужный, а какой нет? Как они в список попадают?
В блоке Наши игры там можно вручную прописать данные ссылки и по клику передавать уже. Этот блок у меня сделан через модуль, обычный HTML
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
Понятно. Ну тогда действительно вопрос.
Цитировать
И по JS забирать содержимое атрибута href и подставлять в параметр URL рендера?
Так не получится. renderModal - это PHP.

Я вижу тут такое решение - написать простенький модуль и там в макете уже выводить. В параметрах модуля сделать возможность выбора материалов, или по простому ID материалов через запятую ^-^
*

zeus07

  • Давно я тут
  • 723
  • 9 / 0
Понятно. Ну тогда действительно вопрос.Так не получится. renderModal - это PHP.

Я вижу тут такое решение - написать простенький модуль и там в макете уже выводить. В параметрах модуля сделать возможность выбора материалов, или по простому ID материалов через запятую ^-^
То есть именно модуль, котоырй будет рендерить модальное окно с нужным контентом? Ну это да, в целом получается, что можно под каждую нужную ссылку, при клике на которую я буду показывать модальное окно, вывести свой модуль, и в каждом модуле будет 2 параметра: ID модалки и выбор материала получается.

Ну ID модалки подставить конечно проблем не составить. А поле с выбором материала можно где-то посмотреть?
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
Цитировать
Ну это да, в целом получается, что можно под каждую нужную ссылку, при клике на которую я буду показывать модальное окно, вывести свой модуль, и в каждом модуле будет 2 параметра: ID модалки и выбор материала получается.
Зачем несколько модулей? В параметрах модуля сделать возможность выбора нескольких материалов.

Цитировать
А поле с выбором материала можно где-то посмотреть?
Да сделайте просто текстовое поле, где будут прописывать ID. Либо тогда писать своё поле, где можно из списка накликать материалы.
*

zeus07

  • Давно я тут
  • 723
  • 9 / 0
Зачем несколько модулей? В параметрах модуля сделать возможность выбора нескольких материалов.
Стараюсь понять вашу идею. При клике на одну ссылку должна же выводиться модалка с одним определённым материалом. Для чего возможность вывода нескольких материалов?
*

zeus07

  • Давно я тут
  • 723
  • 9 / 0
В общем, сделал модуль, поставил на сайт, удалось вывести контент статьи в модальном окне.

Если кликните на этот блок: https://prnt.sc/20ooiut - то увидите. Единственное, пока не могу разобраться с высотой самого окна, почему-то постоянно прокрутка имеется.

В админке выглядит вот так: https://prnt.sc/20op16u

Тут я получается прописал ID самого модального окна, и ID статьи, которую надо вывести. По поводу вашей идеи не очень понял, как можно сделать.
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
я бы просто в ссылку вставлял data-url и по классу ссылки аяксом тянул саму статью, загружал полученное содержимое в 1 блок модального окна и потом его показывал.
типа все статьи динамически грузятся в 1 блок по клику на ссылке, ибо зачем на странице скрытый блок с "политикой конфиденциальности" и прочей требухой?
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
Стараюсь понять вашу идею. При клике на одну ссылку должна же выводиться модалка с одним определённым материалом. Для чего возможность вывода нескольких материалов?
Чтобы в цикле пройтись и вывести все разом, а не делать 4 модуля.

Цитировать
Единственное, пока не могу разобраться с высотой самого окна, почему-то постоянно прокрутка имеется.
Приведи код вызова модалки.

@effrit
Цитировать
ибо зачем на странице скрытый блок с "политикой конфиденциальности" и прочей требухой?
А с чего ты взял, что они в скрытом блоке? Подгрузка по клику.
*

zeus07

  • Давно я тут
  • 723
  • 9 / 0
Чтобы в цикле пройтись и вывести все разом, а не делать 4 модуля.
Буду рад, если подскажете, как это правильно сделать, и к какому условию привязаться.

Привожу код файла default.php
Код
defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;

$modId = $module->id;
$modalId = $params->get('modal-id');
$articleId = $params->get('article-id');


$modalHTML = HTMLHelper::_(
    'bootstrap.renderModal',
    $modalId,
    [
        'url'        => Route::_('index.php?option=com_content&view=article&id='. $articleId .'&tmpl=component'),
        'height'     => '100%',
        'width'      => '100%',
        'bodyHeight' => 100,
        'modalWidth' => 100
    ]
);
?>

<?php echo $modalHTML; ?>

И на всякий случай прикрепляю сам архив с модулем
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
Я правильно понял, что модуль выводится внутри кнопки "Подробнее"? Тогда всё правильно сделано.

По поводу высоты самого окна - попробуй убрать 'height'  и 'width' и оставить 'bodyHeight'  => '70', 'modalWidth'  => '80'.
*

zeus07

  • Давно я тут
  • 723
  • 9 / 0
Я правильно понял, что модуль выводится внутри кнопки "Подробнее"? Тогда всё правильно сделано.
Кнопка Подробнее - это ссылка на вызов модального окна по сути. Я не совсем понял идею о прохождении по циклу. Как определять, какую статью подставлять.

По поводу высоты самого окна - попробуй убрать 'height'  и 'width' и оставить 'bodyHeight'  => '70', 'modalWidth'  => '80'.
Пробовал так, окно такое же, но контент по ширине в 2 раза меньше
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
Кнопка Подробнее - это ссылка на вызов модального окна по сути. Я не совсем понял идею о прохождении по циклу. Как определять, какую статью подставлять.

Идея была такой:

Код
$ids = explode(',', $params->get('articles'));

foreach ($ids as $id)
{
    $modalHTML = HTMLHelper::_(
        'bootstrap.renderModal',
        'modal' . $id,
        [
            'url'        => Route::_('index.php?option=com_content&view=article&id=' . $id . '&tmpl=component'),
            'height'     => '100%',
            'width'      => '100%',
            'bodyHeight' => 100,
            'modalWidth' => 100
        ]
);

<?php echo $modalHTML; ?>
}

Пробовал так, окно такое же, но контент по ширине в 2 раза меньше
Мхм, ну надо поиграться с этими параметрами. Может CSS какой добавить ещё.

*

zeus07

  • Давно я тут
  • 723
  • 9 / 0
Идея была такой:

Код
$ids = explode(',', $params->get('articles'));

foreach ($ids as $id)
{
    $modalHTML = HTMLHelper::_(
        'bootstrap.renderModal',
        'modal' . $id,
        [
            'url'        => Route::_('index.php?option=com_content&view=article&id='. $id .'&tmpl=component'),
            'height'     => '100%',
            'width'      => '100%',
            'bodyHeight' => 100,
            'modalWidth' => 100
        ]
);

<?php echo $modalHTML; ?>
}
Касательно идеи. Да, по прохождению по циклу я понимаю. Но как подставлять значение статьи в ссылку нужную? Вот в этом вопрос  ^-^
Мхм, ну надо поиграться с этими параметрами. Может CSS какой добавить ещё.
Да, надо будет ещё попробовать, в крайнем случае CSS добавлю, то уже не проблема)
*

zeus07

  • Давно я тут
  • 723
  • 9 / 0
Аааа, стоп, дошло. Увидел, что в имени модального окна добавляется ID статьи  ^-^

Попробую так сделать, спасибо)
*

zeus07

  • Давно я тут
  • 723
  • 9 / 0
Заработало! Огромное спасибо.
С высотой решил вопрос, просто прописав у параметра height значение в пикселях.

Привожу итоговый код, возможно кому-то пригодится
Код
defined('_JEXEC') or die;

use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Router\Route;

$modId = $module->id;
$modalId = $params->get('modal-id');
$articleIds = explode(',', $params->get('article-id'));

foreach ($articleIds as $articleId) {
   $modalHTML = HTMLHelper::_(
      'bootstrap.renderModal',
      $modalId . $articleId,
      [
         'url' => Route::_('index.php?option=com_content&view=article&id='. $articleId .'&tmpl=component'),
         'height' => '700px',
         'width' => '100%',
         'bodyHeight' => 100,
         'modalWidth' => 100
      ]
   );
   echo $modalHTML;
}
?>

Ссылка на вызов модалки такая:
Код
<a href="#" data-bs-toggle="modal" data-bs-target="#modal2">Подробнее</a></div>
Параметр data-bs-target содержит ID модального окна, которое вы прописали в модуле и ID статьи, которую необходимо вывести

Прикрепляю модуль также, пользуйтесь
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
*

zeus07

  • Давно я тут
  • 723
  • 9 / 0
А модуль по факту выводится в какую-то неиспользуемую позицию?
Да в целом всё равно, но да, сделал под него позицию отдельно. Сейчас решаю другой вопрос - это применение стилей к iframe, как оказалось, из общего файла стилей прописанные стили не применяются
*

ecolora

  • Завсегдатай
  • 1535
  • 171 / 2
  • творец
Спасибо за тему. Друзья, есть такой вопрос. Я вывожу модальное окно с помощью
Код
echo JHtml::_('bootstrap.renderModal', 'modal-comm_Modal', $modalParams);
В самом окне список в виде дерева... мне нужно, чтобы по клику на любом элементе дерева модальное окно закрывалось.
В Joomla 3 и ниже это достигалось с помощью:
Код
return false;
Но там и модальное окно по другому вызывалось.
В Joomla 4 return false; почему-то не срабатывает.
Я рифме друг словесной. Тут
Свой упражняю словоблуд:
Блог Ecolora
*

marksetter

  • Завсегдатай
  • 1045
  • 40 / 0
смотрите где событие на закрытие
и там добавить что по итему
где то тут было по поводу оффканвас меню такое
индивидуальная помощь: @SetAlexx
*

zudoshika

  • Новичок
  • 2
  • 0 / 0
Спойлер
[свернуть]
Доброго времени суток!

Первым делом стоит учесть, что мои знания php и js близки к отрицательному значению *ОХ-Х-Х*

Кажется всё доступно изложено, но к сожалению - отказывается работать (при нажатии на ссылку - тишина)...
Разрабатываемый мной сайт на Joomla 4.2.8 с шаблоном JA Stark v 2.0.1 от студии Joomlart с уже интегрированным Bootstrap 4 (установка всего quickstart'ом), однако,
у меня на сайте в head прописано
Код
<script src="/media/vendor/bootstrap/js/modal.min.js?5.1.3" type="module"></script>
В демо шаблона уже реализовано открытие материала в модальном окне,
например, на странице контактных данных - по ссылке с текстом Privacy Note
Но, не получается по аналогии сделать подобное в другом месте, т.к. в конкретном случае сие реализовано плагином "Контент - Подтверждение согласия"
В запасе есть "козырь - танец с бубном", но что-то подсказывает, что его опередит "кулак ярости"...
-----------------------------------------------------------------------------------------
Как временное решение (но это не точно) было сделано:
-----------------------------------------------------------------------------------------
На главной странице demo шаблона в верхней секции есть
кнопка Find Out More (слева; позиция hero-1)
и
кнопка иконка в круге "Play" (справа; позиция hero-2)
вот так это выглядит
Содержимое обоих позиций управляется встроенным в quickstart модулем JoomlArt Advanced Custom Module (acm), а именно:
hero-1 модулем acm с ID=101;
hero-2 модулем acm с ID=116.

Сделал дубль модуля acm с видео (получился ID=144) опубликовал без указания позиции, и в нём
(в параметрах модуля)
вместо ссылки на видео прописал ссылку на материал (добавив вконце ?tmpl=component),
затем скопировал часть полученного кода страницы, и привёл к общему стилю
Код
<div class="btn btn-lg btn-secondary animated FadeInRight delay-2s" id="acm-video-144">
<a class="html5lightbox text-light" data-group="myvideo-144" href="/mypage?tmpl=component">Подробнее <i class="fas fa-long-arrow-alt-right"></i></a>
</div>

<script type="text/javascript">
(function($){
  jQuery(document).ready(function($) {
    $("#acm-video-144 .html5lightbox").html5lightbox({
      autoslide: true,
      showplaybutton: false,
      jsfolder: "/templates/ja_stark/js/html5lightbox/"
    });
  });
})(jQuery);
</script>
потом вставил этот код в аналогичный модуль acm в позиции слева (hero-1; ID=101) туда, где текст: "Lorem ipsum dolor sit amet..." (текстовое поле Introduction),
и очистил поля параметров "демо-кнопки" (та, что с текстом Find Out More)

И, всё бы хорошо, но
* место куда вставлен код - это текстовое поле (т.е. его содержимое между тегами <p></p>),
и как следствие: ошибка валидатора (В области видимости нет элемента p, но виден конечный тег p)
поэтому, теги div заменил на span
Спойлер
[свернуть]

По всей видимости и в html вкупе с css мои знания стремятся к нулю (мягко говоря) *suicide*
« Последнее редактирование: 10.03.2023, 16:39:51 от zudoshika »
*

Akeksandr

  • Захожу иногда
  • 396
  • 12 / 0
Спойлер
[свернуть]
Подобная задача есть. В Пейдж Билдере аддон формы обратной связи. Там стоит чекбокс - "Принять условия политики конфиденциальности".
Подскажите пожалуйста как по ссылке открывать модальное окно со своим текстом или материалом? Пример вывода где чекбокс.

I agree with the <a href="#">Privacy Policy</a> and I declare that I have read the information that is required in accordance with.
*

Akeksandr

  • Захожу иногда
  • 396
  • 12 / 0
Подобная задача есть. В Пейдж Билдере аддон формы обратной связи. Там стоит чекбокс - "Принять условия политики конфиденциальности".
Подскажите пожалуйста как по ссылке открывать модальное окно со своим текстом или материалом? Пример вывода где чекбокс.
I agree with the <a href="#">Privacy Policy</a> and I declare that I have read the information that is required in accordance with.
Свой вопрос решил с помощью модального окна Пейдж Билдера.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Реализовать такой вывод информации

Автор koyot777

Ответов: 0
Просмотров: 151
Последний ответ 08.04.2025, 12:49:50
от koyot777
Как сдвинуть заголовок материала в центр в шаблоне cassiopeia для joomla 5

Автор TerminatorTM

Ответов: 2
Просмотров: 440
Последний ответ 09.03.2025, 08:24:09
от fbr
[Решено] Вывод значений из custom fields материала в блоге категории без getDbo

Автор goga_pgasovav

Ответов: 4
Просмотров: 454
Последний ответ 05.03.2025, 14:36:13
от goga_pgasovav
Вывод подкатегорий в несколько столбцов

Автор e.maria

Ответов: 4
Просмотров: 590
Последний ответ 23.10.2024, 13:01:40
от e.maria
Вывод содержимого модуля по его ID в коде статьи

Автор goga_pgasovav

Ответов: 4
Просмотров: 1006
Последний ответ 22.10.2024, 20:22:08
от x1