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

denimet

  • Осваиваюсь на форуме
  • 11
  • 0 / 1
Подскажите пожалуйста как убрать home в в адресной строке?
При переходе в меню в категорию допустим "планшеты" в строке появляется home, как его убрать? Что то нигде не нашел.
Вот так сейчас: мой сайт.ру/home/planshety
А надо чтоб было так: Мой сайт.ру/planshety
Заранее всем спасибо за помощь.
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
Re: Как убрать home в в адресной строке?
« Ответ #1 : 15.02.2018, 15:51:59 »
смотреть алиасы пунктов меню и вообще структуру, урлы наследуются соответственно уровням вложенности в меню
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

denimet

  • Осваиваюсь на форуме
  • 11
  • 0 / 1
Re: Как убрать home в в адресной строке?
« Ответ #2 : 15.02.2018, 15:59:53 »
смотреть алиасы пунктов меню и вообще структуру, урлы наследуются соответственно уровням вложенности в меню
А где алиасы смотреть? перерыл все в меню не нашел. раньше такого не было, первый раз с таким столкнулся.
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
Re: Как убрать home в в адресной строке?
« Ответ #3 : 15.02.2018, 16:02:29 »
в настройках пунктов меню, рядом с заголовком есть поле алиас
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

denimet

  • Осваиваюсь на форуме
  • 11
  • 0 / 1
Re: Как убрать home в в адресной строке?
« Ответ #4 : 15.02.2018, 16:55:40 »
спасибо
*

Zaka

  • Новичок
  • 3
  • 0 / 0
Как убрать home в адресной строке?
« Ответ #5 : 28.04.2024, 21:22:10 »
Здравствуйте!
Эта тема уже у кого-то возникала здесь 5 лет назад.

Проблема такая: у меня под Joomla 4 адреса выглядят так:
https://мой_сайт.ru/home/статья1

А хотелось бы без /home/:
https://мой_сайт.ru/статья1

home - это алиас главного меню, оставить его пустым (как кто-то советовал 5 лет назад) не получится.

Попытки убрать /home/ через .htaccess

RewriteCond %{REQUEST_URI} ^(.*)/home/(.*)$
RewriteRule ^(.*)$ %1/%2 [R=301,L]


приводят к тому, что адреса становятся такими как нужно, но выдают ошибку 404.

Есть ли варианты решения?

*

SeBun

  • BanMaster
  • 4030
  • 259 / 5
  • @SeBun48
Re: Как убрать home в в адресной строке?
« Ответ #6 : 29.04.2024, 17:12:33 »
А что у вас с меню? home является родительским для остальных пунктов? Если да, переделывайте, и 301 редирект, что бы не потерять проиндексированные ссылки.
Оказываю услуги по Joomla | Миграция/Обновление | Сопровождение | IT-аутсорсинг | Недорогие домены и хостинг
*

Zaka

  • Новичок
  • 3
  • 0 / 0
Re: Как убрать home в в адресной строке?
« Ответ #7 : 30.04.2024, 09:14:21 »
Да, home - родительский.
Никак не могу сообразить, как это переделать. Может ли быть главное меню вообще без родительского пункта?

UPD: ага, вроде бы, разобрался. Спасибо!
Если создать user-menu вместо main-menu, то там этого home не будет. Спасибо!

Интересно, есть ли способ продублировать всю структуру, уже созданную в главном меню, в пользовательское меню?
« Последнее редактирование: 30.04.2024, 10:21:20 от Zaka »
*

Театрал

  • Захожу иногда
  • 232
  • 7 / 0
Re: Как убрать home в в адресной строке?
« Ответ #8 : 02.05.2024, 08:33:13 »
Зачем дублировать?

У главного пункта меню может не быть дочерних. Чаще всего так и поступают, он нужен лишь для того чтобы понять который пункт главный.
Если на главной не нужен никакой компонент (только модули), есть специальный компонент пустой страницы: https://web-tolk.ru/dev/components/blank-page-component-for-joomla

Чтобы его не показывать (спрятать) есть специальная настройка "Показывать в меню" во вкладке "Параметры ссылки".

Если уж вам прям нужны дубли пунктов одного меню в другом, это делают при помощи "Псевдонима пункта меню" для каждого. При создании такого пункта нужно выбрать: Тип пункта меню -> Системные ссылки -> Псевдоним пункта меню, и там уже выбрать основной пункт, на который текущий будет ссылаться.
*

Zaka

  • Новичок
  • 3
  • 0 / 0
Re: Как убрать home в в адресной строке?
« Ответ #9 : 02.05.2024, 11:39:18 »
Это я неудачно выразился. Я имел в виду: можно ли как-то перенести уже созданную структуру меню из main-menu в user-menu, чтобы не копипастить ее по пунктам ручками - как я в итоге и сделал. В результате так и получилось - главное меню без дочерних пунктов.

Спасибо за информацию про компонент пустой страницы! Это мне как раз сейчас нужно.

Проблема решена, всем спасибо!

Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Убрать из ссылки /images

Автор step147

Ответов: 4
Просмотров: 2528
Последний ответ 17.08.2021, 11:19:32
от step147
Как убрать ID из URL Joomla 3?

Автор SaxMusicOnly

Ответов: 142
Просмотров: 58735
Последний ответ 02.03.2021, 14:47:35
от Vasiliy111
Как убрать 301 редирект с Get параметров (Sef модуль joomla)?

Автор Sergei1212

Ответов: 2
Просмотров: 1947
Последний ответ 27.09.2017, 23:01:57
от dmitry_stas
sh404SEF и мультиязычность, убрать из ссылки ru (сам url нормальный)

Автор Artorius

Ответов: 0
Просмотров: 1811
Последний ответ 12.04.2017, 15:34:37
от Artorius
Как убрать index.php после названия сайта?

Автор alexanderuss

Ответов: 7
Просмотров: 2487
Последний ответ 22.04.2016, 18:01:02
от Sini