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

  • 10 Ответов
  • 146 Просмотров

0 Пользователей и 1 Гость просматривают эту тему.

*

Inoken

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

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

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

*

robert

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

*

Inoken

  • Осваиваюсь на форуме
  • ***
  • 33
  • 0
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

  • Профи
  • ********
  • 9665
  • 930
а просто
Код
$menu_params = JFactory::getApplication()->getMenu()->getActive()->params;
разве не достаточно?
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

*

Inoken

  • Осваиваюсь на форуме
  • ***
  • 33
  • 0
в том-то и дело, что данный код:

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

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

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

*

dmitry_stas

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

А в даном случае настройки компонента по умолчанию учтуться или получатся только настройки пункта меню?
нет само собой, настройки компонента пройдут мимо. вы ж только сейчас говорите о параметрах компонента, тема то про параметры текущего пункта меню :)
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

*

Inoken

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

var_dump выводит NULL.

*

Inoken

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

*

dmitry_stas

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

P.S. ага, ну после редактирования стало понятно. ну тогда как я и говорю, просто передайте текущий Itemid как параметр запроса в ваш компонент
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

*

Inoken

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

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

и

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

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

*

dmitry_stas

  • Профи
  • ********
  • 9665
  • 930
например можно так
Код
$params = new JRegistry(JComponentHelper::getParams('com_medialib')->toArray() + JFactory::getApplication()->getMenu()->getItem($menu_item_id)->params->toArray());
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций