Новости 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 Гость просматривают эту тему.
  • 5 Ответов
  • 977 Просмотров
*

timofe

  • Захожу иногда
  • 149
  • 0 / 0
  • alex tim.
Всем привет!

Как перенести часть заголовка материала на новую строчку?
Например, чтобы было вместо:

"Перенос части строки на новую в заголовке материала"

так:

"Перенос части строки на новую
в заголовке материала"


В сети ничего толкового не нашел(...
Спасибо!
*

AlexB

  • Завсегдатай
  • 1973
  • 54 / 2
А <br/>
В нужном месте не работает?
*

timofe

  • Захожу иногда
  • 149
  • 0 / 0
  • alex tim.
А <br/>
В нужном месте не работает?

Не работает.
Более того, если разрешить вывод html-кода в заголовке, то будет выводиться просто код типа "на новую<br />строку"
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
здра.
если место разбиения не принципиально, то проще через CSS назначить width заголовку
если принципиально, то вставляем спецсимвол "`", к примеру, потом заменяем его в шаблоне вывода материала
+ надо будет и title от него вычищать.
минус - это все просквозится в блог категории и прочие новостные модули
так что максимально системно будет использовать запись {br} + системный плагин, который будет отовсюду это сочетание удалять, заменяя на пробел
*

timofe

  • Захожу иногда
  • 149
  • 0 / 0
  • alex tim.
здра.
если место разбиения не принципиально, то проще через CSS назначить width заголовку
если принципиально, то вставляем спецсимвол "`", к примеру, потом заменяем его в шаблоне вывода материала
+ надо будет и title от него вычищать.
минус - это все просквозится в блог категории и прочие новостные модули
так что максимально системно будет использовать запись {br} + системный плагин, который будет отовсюду это сочетание удалять, заменяя на пробел

Через CSS было бы естественно проще, но не вариант... Нужно именно в определенных местах...

Решил вопрос с Вашей подсказкой. Заменил в шаблоне вывода материала строку:

<?php echo $this->escape($this->item->title); ?>

на

<?php
$title = $this->item->title;
$title = str_ireplace('  ','<br />',$title);
echo $title;
?>

В качестве спецсимвола - два пробела
И все получилось!
*

Grigoriy82

  • Осваиваюсь на форуме
  • 11
  • 0 / 1
Благодарю за полезную информацию.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

[Решено] Вывод значений из custom fields материала в модуле по имени поля

Автор goga_pgasovav

Ответов: 3
Просмотров: 626
Последний ответ 30.12.2024, 13:22:11
от goga_pgasovav
Переход на страницу материала после его размещения пользователем

Автор stepan39

Ответов: 0
Просмотров: 433
Последний ответ 22.11.2024, 07:14:15
от stepan39
Пропадают иконки на части страниц, пока не удалишь кеш браузера

Автор minibelka

Ответов: 4
Просмотров: 1535
Последний ответ 25.02.2024, 22:56:50
от cherianov
Вывод даты материала в списке тегов

Автор androv77

Ответов: 2
Просмотров: 1482
Последний ответ 09.11.2023, 16:33:08
от denxio
Вывод дополнительного поля материала в модуле

Автор timofe

Ответов: 10
Просмотров: 2028
Последний ответ 06.10.2023, 14:02:24
от Mitriy