Сегодня решил поделиться информацией по поводу того, как программным путем вытащить из адресной строки (URI) joomla, оптеделенные данные для какой-нибудь проверки или ещё чего-то.
К примеру строка может быть такой:
http://yoga-life.com.ua/yoga/index.php?option=com_content&view=article&id=4:poslednee-pristanische-napoleona-bonaparta&catid=4:it-is-interesting&Itemid=8
//чтобы вытащить часть адреса, который содержит номер пункта меню Itemid=8 т.е. просто цифру 8:
echo $currentMenuId = JSite::getMenu()->getActive()->id; //выведет 8, как получить имя меню->смотрите ниже
или
echo $Itemid = JRequest::getInt( 'Itemid', 1, 'get' )."<br>"; //выведет 8
или используя метод $_GET:
echo $_GET['Itemid']; //также выведет 8
//Если нужно вывести номер категории, то код такой:
echo $catid= JRequest::getInt( 'catid', 1, 'get' )."<br>"; //у меня это 4-я категория
//Если нужно вывести id статьи (не путать с id меню itemid) то код такой:
echo $articleid= JRequest::getInt( 'id', 1, 'get' )."<br>";
//Если нужно вообще узнать id меню по умолчанию * (в плане mainmenu*=1, usermenu=2 и так далее), то вызываем $menu->getDefault();
$menu = &JSite::getMenu();
$defaultMenu = & $menu->getDefault();
echo $itemid = $defaultMenu->id; //здесь id нашего меню (по умолчанию) =1
//Получить имя текущего меню можно так:
echo $currentMenuName = JSite::getMenu()->getActive()->name ;
//Получить уровень доступа (Public = 0, Registered = 1, Special= 2) к активному меню можно так:
echo $currentMenuAccess = JSite::getMenu()->getActive()->access ;
//Получить id родительского меню (для самого верхнего уровня будет всегда 0):
echo $currentMenuParent = JSite::getMenu()->getActive()->parent;
//Проверка меню на публикацию (опубликованное 1 или неопубликованное 0)
echo $currentMenuStatus = JSite::getMenu()->getActive()->published;
//Или же можно получить все одним заходом, используя несколько сокращенную запись:
<code>$menu = &JSite::getMenu();
$active = $menu->getActive();
echo $active->name; //получаем имя
echo $active->id; //получаем id меню
echo $active->published; //получаем публикацию
</code>
Как вы уже догадались — в можно делать выборку и найти элемент глядя на нашу адресную строку (выделил красным цветом) и используя различные типы get-> получать нужные значения.
Можно поиграться с вызовами и выполнить такой код
$menu = &JSite::getMenu();
$menuItem = $menu->getMenu();
echo '<pre>';
print_r($menuItem);
echo '</pre>';
В результате получим довольно большую простыню данных — все наше меню в виде массива, а дальше уже можно добраться до каждого элемента отдельно.
Array
(
[1] => stdClass Object
(
[id] => 1
[menutype] => mainmenu
[name] => Главные новости
[alias] => home
[link] => index.php?option=com_content&view=frontpage
[type] => component
[published] => 1
[parent] => 0
[componentid] => 20
[sublevel] => 0
[ordering] => 1
[checked_out] => 0
[checked_out_time] => 0000-00-00 00:00:00
[pollid] => 0
[browserNav] => 0
[access] => 0
[utaccess] => 3
[params] => num_leading_articles=10
num_intro_articles=3
num_columns=1
num_links=0
orderby_pri=
orderby_sec=front
multi_column_order=1
show_pagination=0
show_pagination_results=0
show_feed_link=1
show_noauth=
show_title=
link_titles=1
show_intro=
show_section=
link_section=
show_category=
link_category=
show_author=
show_create_date=
show_modify_date=0
show_item_navigation=
show_readmore=
show_vote=
show_icons=0
show_pdf_icon=0
show_print_icon=0
show_email_icon=0
show_hits=
feed_summary=
page_title=Главные новости
show_page_title=0
pageclass_sfx=
menu_image=-1
secure=0
[lft] => 0
[rgt] => 0
[home] => 1
[component] => com_content
[tree] => Array
(
[0] => 1
)
[route] => home
[query] => Array
(
[option] => com_content
[view] => frontpage
)
)
[2] => stdClass Object
(
[id] => 2
[menutype] => mainmenu
[name] => Здоровье
[alias] => health
[link] => index.php?option=com_content&view=category&layout=blog&id=1
[type] => component
[published] => 1
[parent] => 0
[componentid] => 20
[sublevel] => 0
[ordering] => 2
[checked_out] => 0
[checked_out_time] => 0000-00-00 00:00:00
[pollid] => 0
[browserNav] => 0
[access] => 0
[utaccess] => 0
[params] => show_description=0
show_description_image=0
num_leading_articles=10
num_intro_articles=4
num_columns=2
num_links=4
orderby_pri=
orderby_sec=
multi_column_order=0
show_pagination=2
show_pagination_results=1
show_feed_link=1
show_noauth=
show_title=
link_titles=
show_intro=
show_section=
link_section=
show_category=
link_category=
show_author=
show_create_date=
show_modify_date=
show_item_navigation=
show_readmore=
show_vote=
show_icons=
show_pdf_icon=
show_print_icon=
show_email_icon=
show_hits=
feed_summary=
page_title=
show_page_title=1
pageclass_sfx=
menu_image=-1
secure=0
[lft] => 0
[rgt] => 0
[home] => 0
[component] => com_content
[tree] => Array
(
[0] => 2
)
[route] => health
[query] => Array
(
[option] => com_content
[view] => category
[layout] => blog
[id] => 1
)
)
Также можно заапросить не все меню $menuItem = $menu->getMenu(); а только активное $menuItem = $menu->getActive();
|