У меня есть пункт меню для конкретного представления в пользовательском компоненте. Прикрепленный к этому пункту меню у меня есть другой Template Style
выбранный, а не стандартный шаблон. Доступ к представлению через меню работает хорошо, так как он прикрепляется к URL Itemid
.
Теперь я хочу связать, используя JRoute, представление с другим, однако JRoute не генерирует желаемый URL.
echo JRoute::_('index.php?option=com_example&view=reporting');
/index.php?option=com_example&view=reporting
JRoute
не добавит Itemid к URL, из-за чего выбранный стиль шаблона для пункта меню не будет работать.
Есть ли способ «вычислить» Itemid (кроме выполнения запроса в таблице jos_menu
по столбцу link
) и прикрепить его к JRoute?
joomla-2.5
jroute
Валентин Деспа
источник
источник
Ответы:
Вот техника, которую я использовал (не могу вспомнить, где я ее нашел).
Это творило чудеса для меня.
источник
вывод JRoute будет зависеть от того, что вы его кормите.
может вернуть что-то еще, чем
На самом деле, если у вас есть список пунктов меню в блоге для catid = 5, последний может дать вам URL-адрес меню (я не проверял этот точный URL-адрес). Попробуйте использовать разные get-параметры, чтобы получить разные результаты (иногда очень неправильно, как сказал @Fedik)
источник
Ключевым моментом здесь является настройка файла вашего компонента router.php (который должен быть найден в корневой папке вашего компонента на внешнем интерфейсе) с логикой, которая будет искать и выбирать соответствующий пункт меню. Я бы хотел, чтобы это произошло автоматически, но, насколько я знаю, это не так.
Вероятно, было бы лучше использовать этот блок кода для некоторой вспомогательной функции, которая может использоваться для автоматического поиска наиболее подходящего пункта меню для содержимого.
Вот код, который я использовал в нескольких моих пользовательских компонентах, чтобы получить наиболее подходящий элемент меню:
Все это в некотором роде беспорядок (и я хотел бы, чтобы улучшения были у кого-нибудь!), Но это сделано. Если текущий пункт меню является наиболее подходящим, он всегда будет придерживаться этого.
В противном случае он должен найти наилучшее совпадение на основе имени компонента -> имя представления -> имя макета -> значение идентификатора. Чем дальше справа, тем лучше я считаю матч!
источник
Afaik JRoute возьмет активное
Itemid
(и также активноеoption
), если ничего не предоставлено. Если это не сработает, это означает, что вызов вашего кода начинается без Itemid. Если это так, проще всего было бы добавить Itemid к первоначальному вызову.Если вам нужно поискать пункт меню, я бы не делал прямой запрос, а использовал бы вместо этого JMenu.
источник
JRoute::_('index.php?option=com_example&view=reporting&Itemid=10')
JRouter может вернуть/current-path?view=reporting&Itemid=10
... есть ли какие-то конкретные вещи?