Новости 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 Ответов
  • 2327 Просмотров
*

sergey_2012

  • Захожу иногда
  • 81
  • 0 / 0
Перенёс сайт на локалный Денвер. При нажатии на КАРТА САЙТА (на самом сайте) вылетает ошибка
(все вкладки работают, кроме Карты сайта)
Что где исправить.Желательно без переустановки.

Fatal error: Uncaught exception 'RuntimeException' with message 'Unknown column 'header' in 'field list' SQL=SELECT `new_url`,`header`,`published` FROM `jom_redirect_links` WHERE `old_url` = 'http://my-site2.ru/?Itemid=154' LIMIT 0, 1' in Z:\home\my-site2.ru\www\libraries\joomla\database\driver\mysql.php:340 Stack trace: #0 Z:\home\my-site2.ru\www\libraries\joomla\database\driver.php(1279): JDatabaseDriverMysql->execute() #1 Z:\home\my-site2.ru\www\plugins\system\redirect\redirect.php(86): JDatabaseDriver->loadObject() #2 [internal function]: PlgSystemRedirect::handleError(Object(Exception)) #3 {main} thrown in Z:\home\my-site2.ru\www\libraries\joomla\database\driver\mysql.php on line 340
« Последнее редактирование: 01.11.2015, 21:15:38 от sergey_2012 »
*

sergey_2012

  • Захожу иногда
  • 81
  • 0 / 0
Перенёс сайт на локалный Денвер. При нажатии на КАРТА САЙТА (на самом сайте) вылетает ошибка
(все вкладки работают, кроме Карты сайта)
Что где исправить.Желательно без переустановки.

Fatal error: Uncaught exception 'RuntimeException' with message 'Unknown column 'header' in 'field list' SQL=SELECT `new_url`,`header`,`published` FROM `jom_redirect_links` WHERE `old_url` = 'http://my-site2.ru/?Itemid=154' LIMIT 0, 1' in Z:\home\my-site2.ru\www\libraries\joomla\database\driver\mysql.php:340 Stack trace: #0 Z:\home\my-site2.ru\www\libraries\joomla\database\driver.php(1279): JDatabaseDriverMysql->execute() #1 Z:\home\my-site2.ru\www\plugins\system\redirect\redirect.php(86): JDatabaseDriver->loadObject() #2 [internal function]: PlgSystemRedirect::handleError(Object(Exception)) #3 {main} thrown in Z:\home\my-site2.ru\www\libraries\joomla\database\driver\mysql.php on line 340
Может карту сайта заново поставить... Не хотелось бы...
*

b2z

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

sergey_2012

  • Захожу иногда
  • 81
  • 0 / 0
Попробуте зайти в менеджер расширений - там база данных - исправить
Исправление не приносит результата. Может карту сайта заново установить?
*

passer

  • Завсегдатай
  • 1013
  • 75 / 3
Ну пишет же что в таблице jom_redirect_links не находит поля с названием  'header'. Загляните в базу, чего там с этой таблицей. Кому бы знать как вы БД импортировали и почему в вас при этом поля в таблицах теряются.
*

sergey_2012

  • Захожу иногда
  • 81
  • 0 / 0
Ну пишет же что в таблице jom_redirect_links не находит поля с названием  'header'. Загляните в базу, чего там с этой таблицей. Кому бы знать как вы БД импортировали и почему в вас при этом поля в таблицах теряются.
В БД не разбираюсь особо. Нашёл инструкцию и сделал экспорт, а потом импорт на Денвер.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Не работает менеджер материалов, ошибка 500 SSL certificate problem

Автор Екатерина М

Ответов: 5
Просмотров: 731
Последний ответ 06.04.2025, 09:27:20
от wishlight
Как конвертировать сайт Joomla в мобильное приложение?

Автор 62411

Ответов: 1
Просмотров: 710
Последний ответ 14.06.2024, 15:31:24
от Olg
После выключения расширения лег сайт

Автор blind

Ответов: 4
Просмотров: 811
Последний ответ 19.05.2024, 14:13:33
от blind
Ошибка 0 Call to undefined function GuzzleHttp\choose_handler()

Автор Alllex

Ответов: 0
Просмотров: 651
Последний ответ 15.03.2024, 21:03:09
от Alllex
Google Переводчик не переводит сайт

Автор Aqua

Ответов: 1
Просмотров: 974
Последний ответ 04.03.2024, 12:50:00
от kovAlexandr78