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

Olga

  • Осваиваюсь на форуме
  • 25
  • 0 / 0
Ребят, привет.

Помогите, пожалуйста, как изменить в этом коде условие, чтобы текст видела группа пользователей с ID 10, а все другие не видели.

Вот пример:

Код
<?php if ($user->guest) { ?> 
Текст для гостей
<?php } else { ?>
Текст для всех пользователей
<?php } ?>

Только тут видят гости, а пользователи не видят.
*

NewUsers

  • Живу я здесь
  • 2310
  • 215 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Засунь в условие
Код: php
 <?php in_array(10, $user->getAuthorisedViewLevels()); ?>
Занимаюсь создание расширений для Joomla 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

Olga

  • Осваиваюсь на форуме
  • 25
  • 0 / 0
Parse error[/size]: syntax error, unexpected 'else' (T_ELSE) in [/size]/var/www/site/data/www/site.info/tmp/sourcerer_php_20ab79a0d970a8f4f4a4e781bc4b40a4[/size] on line [/size]12[/size]

[/size]
Я получила ошибку
*

NewUsers

  • Живу я здесь
  • 2310
  • 215 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Код: php
if(in_array(10, $user->getAuthorisedViewLevels())) {
echo '';
} else {
echo '';
}

ничего удивительного
Занимаюсь создание расширений для Joomla 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
$user->getAuthorisedViewLevels()
только обратите внимание, что группы ($user->groups) и уровни доступа - это немного разные вещи
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Olga

  • Осваиваюсь на форуме
  • 25
  • 0 / 0
только обратите внимание, что группы ($user->groups) и уровни доступа - это немного разные вещи

У меня есть и группа и уровень Company. Как им показать текст а всем другим включая Register и т.д. скрыть?

Код
{source 0}
<? if(in_array(10, $user->getAuthorisedViewLevels())) {
echo '<div style="text-align: center;">ТЕКС КОТОРЫЙ НУЖНО ПОКАЗАТЬ</div>';
} else {
echo '<div style="text-align: center;">ТЕКС КОТРЫЙ ДЛЯ ГОСТЕЙ И ВСЕХ ОСТАЛЬНЫХ</div>';
} ?>
{/source}
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
ну так вам же написали условие. что не так?
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Olga

  • Осваиваюсь на форуме
  • 25
  • 0 / 0
Но он почему-то не сработал(((
*

Olga

  • Осваиваюсь на форуме
  • 25
  • 0 / 0
только обратите внимание, что группы ($user->groups) и уровни доступа - это немного разные вещи

Все, спасибо. Я изменила ID уровня и все заработало!)

Извините, за невнимательность)
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Все, спасибо. Я изменила ID уровня и все заработало!)
всегда пожалуйста

Извините, за невнимательность)
за невнимательность - конечно. это с каждым бывает. но вот за
он почему-то не сработал
никогда :) на фразу "почему-то не работает" по сути можно ответить только "значит что-то в нем не так". что именно - ошибка выполнения, не проверяет вообще, проверяет, но не то, и т.д. в общем, добро пожаловать на самый добрый форум :) тут почти всегда найдется тот, кто сможет помочь ответом. но вот времени на вытягивание клещами необходимой информации как правило тут нет ни у кого...
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Доступ в админку без права редактировать контент

Автор NIKOLY

Ответов: 1
Просмотров: 661
Последний ответ 01.06.2023, 14:12:06
от stepan39
Вывод обновленной информации

Автор vlmedia

Ответов: 1
Просмотров: 394
Последний ответ 20.09.2022, 09:56:47
от effrit
Доступ к страницам после оплаты

Автор Kosshechka

Ответов: 26
Просмотров: 1055
Последний ответ 15.04.2022, 18:15:49
от Alex2108
Посещение сайта только для зарегистрированных пользователей

Автор FlexNL

Ответов: 9
Просмотров: 1626
Последний ответ 05.11.2021, 20:57:59
от FlexNL
Изменить вывод информации о материале и доп полях

Автор kolhoz

Ответов: 1
Просмотров: 449
Последний ответ 03.11.2021, 00:01:53
от NewUsers