Обновление PHP до последних версий повышает безопасность сайта и сокращает время загрузки страниц Joomla 3, поэтому возьмите update php за правило хорошего тона – это будет отличная профилактика программного геморроя. Следуя советам проктолога, я решил обновить PHP на блоге http://stihirus24.ru/ с версии 7.0 до 7.3.1, но печаль сразу же посетила моё сеошное сердце, ибо увидел я красоту со скрина выше.
Поиск корня ошибки
Далее телодвижения были нервные и хаотичные, так как на блоге Zegeberg, где вы и прибываете сейчас, версия 7.3 стала, как родная. Режим отладки при ошибке Joomla Using $this when not in object context показал следующее:
Call stack
# Function Location
1 () JROOT/libraries/src/Application/CMSApplication.php:370
2 Joomla\CMS\Application\CMSApplication::getMenu() JROOT/libraries/src/Application/SiteApplication.php:275
3 Joomla\CMS\Application\SiteApplication::getMenu() JROOT/components/com_xmap/router.php:96
4 XmapBuildRoute() JROOT/libraries/src/Component/Router/RouterLegacy.php:69
5 Joomla\CMS\Component\Router\RouterLegacy->build() JROOT/libraries/src/Router/SiteRouter.php:528
6 Joomla\CMS\Router\SiteRouter->buildSefRoute() JROOT/libraries/src/Router/SiteRouter.php:498
7 Joomla\CMS\Router\SiteRouter->_buildSefRoute() JROOT/libraries/src/Router/Router.php:281
8 Joomla\CMS\Router\Router->build() JROOT/libraries/src/Router/SiteRouter.php:154
9 Joomla\CMS\Router\SiteRouter->build() JROOT/libraries/src/Router/Route.php:102
10 Joomla\CMS\Router\Route::link() JROOT/libraries/src/Router/Route.php:52
11 Joomla\CMS\Router\Route::_() JROOT/modules/mod_menu/helper.php:139
12 ModMenuHelper::getList() JROOT/modules/mod_menu/mod_menu.php:15
13 include() JROOT/libraries/src/Helper/ModuleHelper.php:200
14 Joomla\CMS\Helper\ModuleHelper::renderModule() JROOT/libraries/src/Document/Renderer/Html/ModuleRenderer.php:98
15 Joomla\CMS\Document\Renderer\Html\ModuleRenderer->render() JROOT/libraries/src/Document/Renderer/Html/ModulesRenderer.php:47
16 Joomla\CMS\Document\Renderer\Html\ModulesRenderer->render() JROOT/libraries/src/Document/HtmlDocument.php:491
17 Joomla\CMS\Document\HtmlDocument->getBuffer() JROOT/libraries/src/Document/HtmlDocument.php:783
18 Joomla\CMS\Document\HtmlDocument->_renderTemplate() JROOT/libraries/src/Document/HtmlDocument.php:557
19 Joomla\CMS\Document\HtmlDocument->render() JROOT/libraries/src/Application/CMSApplication.php:1044
20 Joomla\CMS\Application\CMSApplication->render() JROOT/libraries/src/Application/SiteApplication.php:778
21 Joomla\CMS\Application\SiteApplication->render() JROOT/libraries/src/Application/CMSApplication.php:202
22 Joomla\CMS\Application\CMSApplication->execute() JROOT/index.php:49.
Отчего мозг начал кипеть и выделять ядовитые газы. Советы, консультации, взятки и угрозы позволили выяснить, что гадит на жизнь с высоты птичьего полёта компонент com_xmap, который не испытывает никаких добрых чувств к PHP 7.3. Убирать его не позволила дружбы с детства и верность суровым традициям, поэтому пришлось стать на 5 минут сеошником-хирургом.
Отправляем Using $this when not in object context на кладбище
Практика хирургии показала, что эпицентр болезни зарыт в 96 строке файла роутер карты сайта:
/components/com_xmap/router.php;
Здесь требуется для полного и долгого счастья просто заменить в 96 строке:
getMenu()?
На:
$menu = JFactory::getApplication()->getMenu();
После этого Joomla 3.9.5 стала работать на PHP 7.3.1 как родная, они слились в единое целое, чем и сделали мне настроение.
Вывод прост – не ищите сложных ответов на простые вопросы, а чаще посещайте блог Zegeberg, слушайте Б.Г., не верьте девушкам со стильными стрижками) и читайте древнегреческих философов.