Войти
Помощь

Joomla — получить id меню, материала, категории, программным путем

Снитко Александр 06.01.2023

Сегодня решил поделиться информацией по поводу того, как программным путем вытащить из адресной строки (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();

 

 


Добавить комментарий



Обновить

InsCalc PRO — калькулятор для расчета страховой премии
(Win32. Связь с БД. Мгновенный расчет страховых премий. Печать расчета.)


PRO Tourist — программное обеспечение для туристического страхования.
(Win32. Связь с БД. Мгновенный расчет страховой премии. Печать полиса. Аналитика. Система напоминаний.)