ДОСТИГНУТО:

01.11.2016-300 страниц в индексе Google;
19.01.2017-300 страниц в индексе Яндекса;
03.02.2017-40 ТИЦ;
05.02.2017- сайт принят в DMOZ каталог;

Обновление Joomla 3.2.0 и фатальные ошибки

.

джумла

Обновление Joomla 3.2.0 и фатальные ошибки

Добрый день дорогие друзья!

06 Ноября 2013 состоялся финальный релиз многими долгожданного и много обещающего, по крайней мере в анонсах, Joomla! 3.2.0. Владельцы сайтов с предыдущими версиями Joomla решили обновиться, но многие из них неожиданно столкнулись с проблемами. У кого-то онлайн обновление не работает как нужно, у других после обновления на Joomla! 3.2.0 перестали работать некоторые расширения, а у некоторых (вообще-то их уже много) вообще либо нет доступа в панель управления, либо не открываются страницы сайтов.

На многих форумах, включая конечно же форум поддержки THE JOOMLA FORUM, один за одним появляются топики и сообщения о проблемах, появляющихся на сайтах после обновления на JOOMLA 3.2.0. В ответ на эти сообщения появляются различные советы для их решения, но все они, как говорится, носят лишь «точечный» характер, так как рекомендованные «заплатки» помогают лишь единицам.

В этой статье я хочу рассказать о решении одной из самых критических проблем, когда после обновления вместо страницы своего сайта некоторые видят пустую страницу, а если у них включено отображение ошибок, то сразу же появляется сообщение о фатальной ошибке типа Fatal error: Call to a member function getItems() on a non-object in .../components/com_sef/joomsef.php on line 1102. Это пример, когда проблема касается популярного расширения «ARTIO JomSEF 4.5», но возможно таким же образом можно будет исправить и другие.

Один из посетителей моего блога обратился ко мне за помощью и сообщил, что после обновления Joomla 3.1.5 на Joomla 3.2.0 у него перестали открываться страницы сайта, и вместо них появляется фатальная ошибка, которую я упомянул выше. Установив на свой тестовый сайт расширение «JomSEF 4.5» с чистой Joomla 3.2.0 я также сразу же получил точно такую же ошибку и начал искать вероятные причины ее появления. Ведь после отключения всех частей JomSEF сайт работал адекватно, страницы отображались без проблем и ошибок не было.

Для начала я открыл файл расширения joomsef.php и перешел к строке с номером 1102, которая была указана в сообщении о фатальной ошибке:

Очевидно, что фатальная ошибка вызвана тем, что функция $menu->getItems якобы не возвращает значения типа «объект». Тогда пришлось найти строку кода, где объявлялась переменная $menuкак объект. Это была строка в том же файле с номером 1085:

Под подозрение сразу же попал класс JSite и его функция getMenu(true). Запустил поиск по файлам Joomla 3.2.0 нашел, что класс JSite объявлен в файле/administrator/components/com_search/helpers/site.php, и как оказалось, функция getMenu(true) теперь уже не принимает никаких параметров:

Сравнив с Joomla 3.1.6 стало видно, что в предыдущих версиях финальный класс JSite был объявлен совсем в другом файле /includes/application.php, но уже в обновлений Joomla  3.2.0 объявление этого класса убрали из файла application.php. Вот вырезка из объявления класса Joomla 3.1.6:

Как видите, там упомянутая ранее функция getMenu('site', $options); была с параметрами.

Исходя из этого стало понятно, что расширение ARTIO JomSEF 4.5 некорректно вызывало функцию JSite::getMenu и как следствие вместо ожидаемого объекта переменная $menu в файлеjoomsef.php получала значение NULL, что собственно и вызывало фатальную ошибку.

Решение проблемы для «ARTIO JomSEF 4.5»

Для того, чтобы сайт после обновления Joomla 3.2.0 нормально работал с установленным расширением «JomSEF 4.5», нужно в двух его файлах /components/com_sef/joomsef.php и/components/com_sef/sef.router.php изменить все строки с кодом

или

на строки без параметров «true» и «false» при вызове функции getMenu()

Я правда не уверен на все 100%, что расширение «JomSEF 4.5» будет работать как нужно, так как проверил пока лишь на тестовом сайте и на сайте посетителя моего блога, который обращался за помощью касательно проблемы с расширением «JomSEF 4.5». Однако, если функция getMenu(...) раньше должна была использоваться с параметрами для определения нужной области для получения меню, то скорее всего строки типа $menu =& JSite::getMenu(true); нужно было бы заменить на

Некоторым может показаться статья слишком огромной и нудной, но мне хотелось изложить свои мысли и пути решения проблемы с обновлением Joomla 3.2.0 как можно детальнее. Надеюсь, что это поможет решить и другие проблемы, приведшие к неработоспособности многие сайты или расширения.

Напоследок хочу напомнить, что перед любым обновлением, особенно работающего сайта, нужно обязательно делать резервные копии файловой системы и базы данных! Мало того, перед тем, как приступить к обновлению, очень рекомендую убедиться на локально установленном сайте, что после апдейта все расширения и сам сайт работает исправно!

Если у кого появятся свои решения такой же и других проблем, пожалуйста, пишите о них подробно в комментариях. Позже я смог бы добавить их к статье.

Удачи!

Ну и как всегда:

БЕРЕГИТЕ СЕБЯ!




лайк

Эти красотки хотят чтобы ты их жестко лайкнул и даже несколько раз твитнул!

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *