После обновления Joomla с версии 3.4.x до 3.5.1 некоторые администраторы в лог файлах веб-сервера могут наблюдать следующие ошибки:
[Wed May 11 05:54:42 2016] [error] [client 185.3.16.210] PHP Notice: Undefined variable: this in /libraries/cms/application/cms.php on line 430, referer: http://useful-notes.ru/ [Wed May 11 05:54:42 2016] [error] [client 185.3.16.210] PHP Notice: Undefined variable: this in /libraries/cms/application/cms.php on line 430, referer: http://useful-notes.ru/ [Wed May 11 05:54:42 2016] [error] [client 185.3.16.210] PHP Notice: Undefined variable: this in /libraries/cms/application/cms.php on line 430, referer: http://useful-notes.ru/ [Wed May 11 05:54:42 2016] [error] [client 185.3.16.210] PHP Notice: Undefined variable: this in /libraries/cms/application/cms.php on line 430, referer: http://useful-notes.ru/
Строка 430 в файле cms.php
// Inject this application object into the JMenu tree if one isn't already specified if (!isset($options['app'])) { $options['app'] = $this; }
Это уведомление о пустой переменной не является проблемой ядра Joomla.
Метод который вызывает ошибку JApplicationCms::getMenu() не объявлен как статический. Если вы получаете эту ошибку, это означает, что расширение вызывает этот метод статически.
Будет правильным использовать следующий вызов JFactory::getApplication()->getMenu()
Для решения проблемы вам достаточно пройтись поиском текста в файлах ваших сторонних расширений для Joomla и найти вхождения JSite::getMenu() и заменить его на JFactory::getApplication()->getMenu()
Пример решения проблемы для модуля IceMegaMenu, файл /modules/mod_icemegamenu/libs/menucore.php
if($item->type == 'menulink')
{
//$menu = &JSite::getMenu();
$menu = &JFactory::getApplication()->getMenu();
if($newItem = $menu->getItem($item->query['Itemid'])) {
$tmp = clone($newItem);
$tmp->name = 'title.']]>';
$tmp->mid = $item->id;
$tmp->parent = $item->parent_id;
} else {
return false;
}
}
Строчку номер три комментируем и вставляем строку номер четыре. В файле /modules/mod_icemegamenu/helper.php делаем тоже самое.