Новости Joomla

Рендер пользовательского поля внутри другого пользовательского поля. Joomla 5.3

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

<?php
$joomlaFieldContentPlugn->onContentPrepare('com_content.article', $fakeItem, $app->getParams());

Joomla постепенно переходит от простого указания аргументов для триггеров плагинов к собственным классам событий. Это позволяет не запоминать порядок передачи аргументов класса и использовать человекопонятные методы $event->getContext(), $event->getItem() и т.д. А то в одном месте в Joomla было $article, в другом - $item, в третьем ещё как-то... Порядку больше становится.

Сегодня обновил сайт клиентов до Joomla 5.3. В ней обновили контент-плагин fields и мой финт ушами с вызовом метода плагина отвалился потому, что я передавал в нём 3 аргумента, вместо одного. И для события onContentPrepare это должен быть объект класса ContentPrepareEvent. Как меняется фрагмент кода из предыдущего поста:

<?php
// мы находимся в файле макета поля

use Joomla\CMS\Event\Content\ContentPrepareEvent;
use Joomla\CMS\Factory;

$app = Factory::getApplication();
$fakeItem = new \stdClass();
// Получаем id текущего материала из объекта Input
$fakeItem->id = $app->getInput()->getInt('id');
// {field 29} - это шорт код вставки поля с id 29 - "ассортимент проекта"
// к содержимому поля конкатенируем шорт-код для обработки
$fakeItem->text = $field->value . '{field 29}';
// Получаем объект плагина
$joomlaFieldContentPlugn = $app->bootPLugin('fields', 'content');
// вызываем метод обработки напрямую
// вместо 3-х аргументов теперь указываем один
// это объект класса ContentPrepareEvent
$joomlaFieldContentPlugn->onContentPrepare(new ContentPrepareEvent('onContentPrepare', [
            'context' => 'com_content.article',
            'subject' => $fakeItem,
            'params'  => $app->getParams(),
            'page'    => 0,
        ]));
// выводим оба поля
echo $fakeItem->text;

@webtolkru 

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

corrector

  • Новичок
  • 1
  • 0 / 0
Форма всплывает по нажатию кнопки ее вызова и некоторое время ее контент загружается, так как там есть фрейм.
Как заставить загружатся форму ChronoForms вместе со страницей?
Т.е., чтобы форма просто псплывала по нажатию на кнопку вызова уже загруженная.

Вызов формы из HTML-модуля:
Код
<p><a class="zakaz" href="component/chronoforms5/?chronoform=forma&amp;tmpl=component" rel="{handler: 'iframe', size: {x: 460, y: 380}}" onclick="gtag('event', 'vyzovformysboku', { 'event_category': 'button', 'event_action': 'forma', });"><img src="images/tel.png" alt="tel" /></a></p>
« Последнее редактирование: 18.10.2018, 18:04:19 от corrector »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

url материала на email (ChronoForms) [Решено]

Автор Konstantinl

Ответов: 20
Просмотров: 12165
Последний ответ 12.08.2022, 03:00:20
от jesus
Как выводиться форма в модуле? ChronoForms 7?

Автор Alex_iPod

Ответов: 3
Просмотров: 2280
Последний ответ 26.04.2022, 06:19:06
от marksetter
Как вывести форму во всплывающем окне?

Автор sergspb

Ответов: 0
Просмотров: 2156
Последний ответ 20.12.2021, 14:48:30
от sergspb
Как в ChronoForms сделать изменение формы в зависимости от выбора?

Автор sashka17

Ответов: 0
Просмотров: 2342
Последний ответ 08.02.2021, 09:33:52
от sashka17
ChronoForms 3 перестал работать на joomle 2.5.9. Ищу совета или специалиста

Автор RuslanKazan

Ответов: 2
Просмотров: 2425
Последний ответ 09.12.2020, 14:19:18
от draff