Новости 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 

Вышел релиз Joomla 5.3.0

Вышел релиз Joomla 5.3.0

Проект Joomla с радостью объявляет о выходе Joomla 5.3 — последней минорной версии в серии Joomla 5.

Этот релиз сосредоточен на продуманных улучшениях, которые совершенствуют работу с CMS. От лучшей организации файлов и журналирования задач до расширенной обработки электронной почты и улучшенной доступности — Joomla 5.3 помогает администраторам и разработчикам работать более эффективно, сохраняя ваш сайт современным, безопасным и готовым к будущему.

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

Maffo

  • Захожу иногда
  • 175
  • 1 / 0
Привет ^-^

Вывожу часть текста материала в модуле, например {loadmoduleid 111}. На сайте эта часть текста из модуля отображается хорошо, в исходном коде тоже. А вот для микроразметки Open Graph вместо содержимого модуля берется сама конструкция {loadmoduleid 111}. *ОХ-Х-Х* Подскажите, как сделать чтобы бралось содержимое этого модуля, а не само {loadmoduleid 111} ? *ОХ-Х-Х*
*

sivers

  • Живу я здесь
  • 2571
  • 355 / 0
Подскажите, как сделать чтобы бралось содержимое этого модуля, а не само {loadmoduleid 111} ?
Если вставляете это в коде, то делайте так:
Код
echo JHtml::_('content.prepare', '{loadmoduleid 111}');
А если в другом модуле, то надо проверить в его настройках опцию "обрабатывать плагинами" - она должна быть включена.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

Maffo

  • Захожу иногда
  • 175
  • 1 / 0
sivers, я вставляю {loadmoduleid 111} в статью Joomla. Где искать "обработку плагинами"? ^-^
*

ShopES

  • Захожу иногда
  • 426
  • 11 / 0
sivers, я вставляю {loadmoduleid 111} в статью Joomla. Где искать "обработку плагинами"? ^-^
в модуле
дополнительно
*

ShopES

  • Захожу иногда
  • 426
  • 11 / 0
правда если модуль HTML
*

sivers

  • Живу я здесь
  • 2571
  • 355 / 0
sivers, я вставляю {loadmoduleid 111} в статью Joomla. Где искать "обработку плагинами"?
Вы таким способом в материал вставляете текст другого материала? Вот это изврат )))
Не знаю даже почему у вас не срабатывает - смотреть надо.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

Maffo

  • Захожу иногда
  • 175
  • 1 / 0
в модуле дополнительно

правда если модуль HTML

Нет, модуль не HTML, а сторонний (Responsive Post-It Note) и там нет таких настроек с обработкой плагинами :( . Может есть другой способ? 8)
« Последнее редактирование: 22.06.2021, 01:32:19 от Maffo »
*

Maffo

  • Захожу иногда
  • 175
  • 1 / 0
Вы таким способом в материал вставляете текст другого материала? Вот это изврат )))
Не знаю даже почему у вас не срабатывает - смотреть надо.

Нет, я пытаюсь добавить заметку из модуля Responsive Post-It Note в материал ::)
*

sivers

  • Живу я здесь
  • 2571
  • 355 / 0
Нет, я пытаюсь добавить заметку из модуля Responsive Post-It Note в материал ::)
Понятно. Попробуйте там указать ИД другого модуля - сработает или нет. Проверьте разрешен ли вывод модуля на той странице (привязка к пункту меню), хотя это и не должно бы влиять при выводе через ИД. Если и это не получится, то попробуйте выводить через {loadposition имяпозициимодуля}
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
из модуля Responsive Post-It Note в материал
Добавьте в точку входа модуля
Код
defined('_JEXEC') or die; // Метка для вставки
JPluginHelper::importPlugin('content');
$module->content = JHtml::_('content.prepare', $module->content, '', 'mod_имя_модуля.content');
*

Maffo

  • Захожу иногда
  • 175
  • 1 / 0
Понятно. Попробуйте там указать ИД другого модуля - сработает или нет

Попробовал вывести модуль HTML-код. Тоже самое - сам модуль отображается нормально, а для og:description берется {loadmoduleid 111}. Обработку плагинами включал и отключал, это не имеет значения.

Проверьте разрешен ли вывод модуля на той странице (привязка к пункту меню), хотя это и не должно бы влиять при выводе через ИД.

Привязка к пункту меню обязательная, если отключить, то модуль не отображается совсем.

Если и это не получится, то попробуйте выводить через {loadposition имяпозициимодуля}

Это конечно уберет {loadmoduleid 111} из микроразметки (совсем), но мне наоборот хотелось бы, чтобы в микроразметке был текст из модуля. Поэтому и вставляю модуль в начало материала ^-^ .
*

Maffo

  • Захожу иногда
  • 175
  • 1 / 0
Добавьте в точку входа модуля

А можете поподробнее объяснить, куда добавлять?
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Наверно не сработает вставка. если кастом модуль не вывел контент, при выполнении компонента com_content . Откройте папку модуля, файл имя_модуля.пхп и вставьте туда код.
*

Maffo

  • Захожу иногда
  • 175
  • 1 / 0
Откройте папку модуля, файл имя_модуля.пхп и вставьте туда код.

Вставил код:

Код
defined('_JEXEC') or die; // Метка для вставки
JPluginHelper::importPlugin('content');
$module->content = JHtml::_('content.prepare', $module->content, '', 'mod_postit');

в начало файла mysite.com/modules/mod_postit/mod_postit.php.

Но безрезультатно.

Или неправильно вставил?
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Или неправильно вставил?
Да, ошибка в коде . Нужно
Код
defined('_JEXEC') or die; // Метка для вставки
JPluginHelper::importPlugin('content');
$module->content = JHtml::_('content.prepare', $module->content, '', 'mod_postit.content');
Думаю лучше смотреть в сторону расширения микроразметки
*

Maffo

  • Захожу иногда
  • 175
  • 1 / 0
Да, ошибка в коде . Нужно

Так тоже не срабатывает.

Думаю лучше смотреть в сторону расширения микроразметки

В каком смысле расширения?
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Ну что то генерирует микроразметку- в шаблоне, плагине
*

Maffo

  • Захожу иногда
  • 175
  • 1 / 0
Ну что то генерирует микроразметку- в шаблоне, плагине

Да, буду смотреть, скорее всего там косяк :'(
*

fsv

  • Живу я здесь
  • 2781
  • 410 / 2
Что генерирует микроразметку? Если плагин группы content, то попробуйте в админке в списке плагинов перетащить его ниже плагина Content - Load Modules.
Веб-разработка: заказ. Только новая разработка.
*

Maffo

  • Захожу иногда
  • 175
  • 1 / 0
Что генерирует микроразметку?

Я никакие плагины для этого не устанавливал, наверно по умолчанию Joomla! генерирует  ::)

Если плагин группы content, то попробуйте в админке в списке плагинов перетащить его ниже плагина Content - Load Modules.

А вот тут совсем не понял. Если можно поподробнее?
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Я никакие плагины для этого не устанавливал, наверно по умолчанию Joomla! генерирует
Джумла откуда ?
Если включить стандартный шаблон- микроразметка есть ? Значит плагин, если нет- тогда в шаблоне .
« Последнее редактирование: 23.06.2021, 08:42:48 от draff »
*

Maffo

  • Захожу иногда
  • 175
  • 1 / 0
draff, да совсем забыл, микроразметка в шаблоне Flex :laugh:

Нашел код:

Код
$document->addCustomTag('<meta property="og:description" content="'. JHtml::_('string.truncate', $this->item->introtext, 1000, false, false ) .'" />');

Видимо тут скрыто решение. Я не силен в PHP, если кто разбирается подскажите *POPCORN*
« Последнее редактирование: 23.06.2021, 14:45:21 от Maffo »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться