Joomla: как получить URL определенного ItemID меню? - PullRequest
5 голосов
/ 25 декабря 2010

Друзья, вопрос новичка ......... Мне нужна помощь в получении URL-адреса определенного элемента меню. Ситуация такая:

Я запускаю Joomla и прошу пользователя ввести идентификатор меню и выбрать макет для этого идентификатора меню.

Я хочу сделать что-то еще с этим URL идентификатора элемента меню.

Как я могу получить URL этого ID элемента меню, предоставленный пользователем?

Например, если пользователь вводит liek $this->get ('menulayoutid'>;, а он вводит и ID 54, то как мне получить URL для идентификатора меню 54.

Обратите внимание: Я хочу получить этот URL из моего PHP-файла, а не из браузера, чтобы я мог использовать значение этого URL для каких-то других целей.

Пожалуйста, помогите.

Ответы [ 5 ]

12 голосов
/ 25 декабря 2010
$itemid = JRequest::getVar('Itemid');
$application = JFactory::getApplication();
$menu = $application->getMenu();
$item = $menu->getItem($itemid);
$link = new JURI($item->link);
$link->setVar('ItemId', $itemid);

Источник: http://forum.joomla.org/viewtopic.php?p=1836005

3 голосов
/ 28 мая 2013

Тем не менее, мы получаем Itemid из любого места (пользовательский ввод, из нашего собственного разработанного модуля, используя тип поля «пункт меню» в файле XML, как описано в Joomla Docs - Стандартные типы полей формы )

// get the menuItemId from wherever...
// as described above or as in other posts here and do whatever with that!
$menuItemId = 'fromWherever'; // as an example "107";

// build the link to the menuItemId is just easy and simple
$url = JRoute::_('index.php?Itemid=' . $menuItemId);

Я думаю, что если нам нужна только ссылка на конкретный идентификатор меню, это лучшее решение, потому что у нас абсолютно меньше запросов и чистый код

, это работает и в Joomla3,0, 3,1

2 голосов
/ 13 декабря 2011

Я просто хочу добавить, что если вам нужно настроить таргетинг на определенное меню, вы передаете имя меню в качестве аргумента getMenu ().

$itemid = JRequest::getVar('Itemid');
$application = JFactory::getApplication();
$menu = $application->getMenu( 'menu-name' );
$item = $menu->getItem($itemid);
$link = new JURI($item->link);
$link->setVar('ItemId', $itemid);
1 голос
/ 09 июля 2013

Когда вам нужно получить идентификатор активного элемента меню в Joomla, чтобы отобразить какой-то конкретный контент только для этого элемента меню или просто показать идентификатор элемента меню, вставьте следующий код, где вы хотите отобразить идентификатор активного элемента меню. :

<?php 
$currentMenuId = JSite::getMenu()->getActive()->id;
echo $currentMenuId; 
?>
1 голос
/ 19 мая 2013

Я не уверен, изменил ли Joomla способ, которым это работает, с 2.5 или даже 1.7, но я потратил на это худшую половину 2 часов.

Надеюсь, это кому-нибудь поможет.

$menuID = $params->get('menuItem'); // from module field menu ex. '105'
$js = new JSite;
$menu = $js->getMenu();
$link = $menu->getItem($menuID)->route;

//Returns URL Friendly Link -> menu/article 
//Then format it -> 

$link = 'http://www.yoursite.com/index.php/'.$link;
echo '<a href="'.$link.'">Borrowed Menu Link Path</a>";
...