Форум русской поддержки Joomla!® CMS
26.06.2017, 07:48:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Ошибка при попытке получить параметры активного пункта меню в контроллере компонента

 (Прочитано 121 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Inoken
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 27


« : 16.06.2017, 23:31:33 »

Здравствуйте. В процессе обработки ajax-запроса в контроллере компонента необходимо получить доступ к параметрам активного пункта меню. При попытке сделать это с помощью инфтрукции:

Код:
$menu_params->merge(JFactory::getApplication()->getMenu()->getActive()->params);
возникает ошибка PHP - Попытка обратиться к свойству необъекта.

Очевидно, что, в силу моего невысокого числа часов летного стажа на Joomla, делаю что-то не то, а параметры меню получить необходимо. Подскажите, пожалуйста, как это правильно сделать в контроллере компонента?
Записан
robert
Профи
********

Репутация: +375/-14
Offline Offline

Пол: Мужской
Сообщений: 4069


« Ответ #1 : 16.06.2017, 23:43:32 »

возникает ошибка PHP - Попытка обратиться к свойству необъекта.
1. Никогда не переводите сообщения об ошибках (предупреждениях).
2. Всегда приводите код в контексте: что такое $menu_params, есть ли у него свойство merge?
Записан
Inoken
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 27


« Ответ #2 : 16.06.2017, 23:54:10 »

robert, контекст таков:

Код:
$menu_params = JComponentHelper::getParams ('com_mycomponent');
$menu_params->merge(JFactory::getApplication()->getMenu()->getActive()->params);

использовал этот же код в модели другого пункта меню, там все работает без ошибок, а в данном контроллере приходит сообщение об ошибке: Trying to get property of non-object in ...

Записан
dmitry_stas
Профи
********

Репутация: +916/-6
Offline Offline

Сообщений: 9537



« Ответ #3 : 16.06.2017, 23:57:04 »

а просто
Код:
$menu_params = JFactory::getApplication()->getMenu()->getActive()->params;
разве не достаточно?
Записан
Inoken
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 27


« Ответ #4 : 17.06.2017, 00:19:54 »

в том-то и дело, что данный код:

Код:
JFactory::getApplication()->getMenu()->getActive()->params;

и является источником ошибки.

а просто
Код:
$menu_params = JFactory::getApplication()->getMenu()->getActive()->params;
разве не достаточно?
А в даном случае настройки компонента по умолчанию учтуться или получатся только настройки пункта меню?
Записан
dmitry_stas
Профи
********

Репутация: +916/-6
Offline Offline

Сообщений: 9537



« Ответ #5 : 17.06.2017, 00:30:14 »

в том-то и дело, что данный код и является источником ошибки.
вы уверены? что выводит
Код:
var_dump(JFactory::getApplication()->getMenu()->getActive());
?

А в даном случае настройки компонента по умолчанию учтуться или получатся только настройки пункта меню?
нет само собой, настройки компонента пройдут мимо. вы ж только сейчас говорите о параметрах компонента, тема то про параметры текущего пункта меню Azn
Записан
Inoken
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 27


« Ответ #6 : 19.06.2017, 10:27:10 »

вы уверены? что выводит
Код:
var_dump(JFactory::getApplication()->getMenu()->getActive());
?
нет само собой, настройки компонента пройдут мимо. вы ж только сейчас говорите о параметрах компонента, тема то про параметры текущего пункта меню Azn

var_dump выводит NULL.
Записан
Inoken
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 27


« Ответ #7 : 19.06.2017, 10:45:26 »

ошибка локалиовалась до метода getActive () - он возвращает null, насколько я понял из документации по этому методу (с моим неидеальным английским), он вернёт объект пункта активного меню, если таковой был установлен, в противном случае null, что собственно и наблюдаем. Значит проблема в том, что пункт меню не установлен как активный, точнее контроллер не имеет доступ к этой информации (если я всё правильно понимаю). Задачей данного контроллера в разрабатываемом компоненте является обработка ajax-запроса отправляемого из шаблона активного пункта меню, параметры которого мне и необходимы, дабы в соответствии с ними отфильтровать данные и отправить их в качестве ответа. Как передать этому контроллеру информацию об активном пункте меню?
« Последнее редактирование: 19.06.2017, 10:50:08 от Inoken » Записан
dmitry_stas
Профи
********

Репутация: +916/-6
Offline Offline

Сообщений: 9537



« Ответ #8 : 19.06.2017, 10:54:54 »

тут надо бы понимать, какой вы в принципе пункт меню хотите видеть... я так понял, что тот пункт меню, с которого делается AJAX запрос? тогда передайте текущий
Код:
JFactory::getApplication()->input->getInt('Itemid')
в AJAX запросе к вашему контроллеру

P.S. ага, ну после редактирования стало понятно. ну тогда как я и говорю, просто передайте текущий Itemid как параметр запроса в ваш компонент
Записан
Inoken
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 27


« Ответ #9 : 19.06.2017, 14:14:54 »

параметры появились, но их необходимо объединить с параметрами компонента. Объекты, возвращаемые инструкциями:

Код:
JComponentHelper::getParams ('com_medialib');

и

Код:
JFactory::getApplication()->getMenu()->getItem($menu_item_id)

различны, поэтому через merge () их не склеить. Подскажите, пожалуйста, есть ли в API Joomla какие-нибудь другие стандартные способы объединить настройки воедино с их перекрытием?
« Последнее редактирование: 21.06.2017, 13:18:43 от Inoken » Записан
dmitry_stas
Профи
********

Репутация: +916/-6
Offline Offline

Сообщений: 9537



« Ответ #10 : 19.06.2017, 15:29:22 »

например можно так
Код:
$params = new JRegistry(JComponentHelper::getParams('com_medialib')->toArray() + JFactory::getApplication()->getMenu()->getItem($menu_item_id)->params->toArray());
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet