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

06 Ноября 2013 состоялся финальный релиз многими долгожданного и много обещающего, по крайней мере в анонсах, Joomla! 3.2.0. Владельцы сайтов с предыдущими версиями Joomla решили обновиться, но многие из них неожиданно столкнулись с проблемами. У кого-то онлайн обновление не работает как нужно, у других после обновления на Joomla! 3.2.0 перестали работать некоторые расширения, а у некоторых (вообще-то их уже много) вообще либо нет доступа в панель управления, либо не открываются страницы сайтов.
Фатальные ошибки при обновлении 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», но возможно таким же образом можно будет исправить и другие. Те, кому лень читать всю статью, могут сразу же перейти к разделу Решение проблемы для ARTIO JomSEF 4.5.

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

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

$items = $menu->getItems(array('home'), array('1'));

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

$menu  =& JSite::getMenu(true);

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

public function getMenu()
{
        $result = new JSite;
        return $result;
}

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

final class JSite extends JApplication
{ 
        ...
        public function getMenu($name = null, $options = array())
        {
                $options = array();
                $menu = parent::getMenu('site', $options);
                return $menu;
        }
        ...
}

Как видите, там упомянутая ранее функция 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 изменить все строки с кодом

$menu  =& JSite::getMenu(true);

или

$menu  =& JSite::getMenu(false);

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

$menu  =& JSite::getMenu();

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

$menu =& JFactory::getApplication()->getMenu("site");

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

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

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

Удачи!

 

Метки: JomSEF, Joomla, обновление, расширение, фатальная ошибка

Поделитесь материалом с другими, воспользуйтесь этими кнопками:
Получать обновления и новые материалы блога по E-mail

42 комментария к “Обновление Joomla 3.2.0 и фатальные ошибки”

  1. Команда разработчиков JoomSEF совсем недавно выпустила новую версию своего расширения — JoomSEF 4.5.1, которая уже совместима с Joomla 3.2.0. Изменения в ней конечно в нескольких местах отличаются от того, что я предлагал. Но думаю, что все же мои старания пригодятся для решения других проблем :)

    Кстати, разработчики JoomSEF что-то долго тянули с выпуском совместимого с Joomla 3.2.0 расширения. За месяц можно было уже проверить на бета-версиях и все исправить до выхода финальной.

  2. fomfom:

    Обновил сайт с версии 3.1.5 до 3.2.0 — перестал работать плагин reCaptcha.

    Исправляется редактированием файла plugins/captcha/recaptcha/recaptcha.php

    Подробно можно прочитать на _http://kireevdv.ru

  3. katerina:

    Обновила сайт до 3.2.0 — что-то происходит с кешированием материалов. Редактирую материал, сохраняю, открываю новый — и в нем стоит текст, который только что вставляла в предыдущий материал. Очистка кеша сайта, браузера и удаление устаревшего ни к чему не приводит! Не представляю, где копать…

    • katerina, у вас вероятно установлено какое-то расширение, отвечающее или причастное к кэшированию, и скорее всего оно не совместимо с Joomla 3.2.0.

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

      • Артем:

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

        • Артем,
          каким редактором вы пользуетесь для добавления или редактирования статей и какая у него версия?
          Если вы не устанавливали абсолютно ничего стороннего (до и после обновления), т.е. никаких расширений, никаких плагинов, и пользуетесь стандартным редактором, то проверьте его версию, возможно он не обновился на новый. Заодно скажите, с какой версии Joomla вы обновились на 3.2.0.

  4. Установил 3.2.0 и теперь не работает авторизация, новые пользователи появляются в админ панеле, активирую их, но авторизоваться не могу, пишет ошибку, полазил в базе данных, заметил что пароли при регистрации записываются через md5-хэширование в базе данных, а до этого записывались по-другому, тобиш при регистрации записывается в одном виде, а при авторизации проверяет по-другому виду, не знаю как исправить!
    Если менять у пользователя пароль в админке, то сохраняется как надо, по старому, но не буду же каждому пользователю менять пароль(

    • Все разобрался) в registration.xml слетела required (Обязательное поле), поставил true, теперь пароли по-старому в базу записывает

      • Bourne, поздравляю. Вас с успешным решением проблемы. И спасибо, что отписали здесь — информация другим может пригодится. Да, и просьба — не пишите пожалуйста несуществующий адрес сайта в поле «Сайт» когда комментируете, а то получается битая ссылка. Спасибо.

      • Дмитрий:

        Здравствуйте! У меня такая же проблема с авторизацией на 3.2.1. Вчера обновил джумлу до 3.2.2 результат тот же. Пользователь успешно регистрируется, а зайти не может, пишет что не найден пользователь с таким id. Если пересохранить пароль в админке то тогда все в норме. В registration.xml везде required=»true».
        Помогите пожалуйста люди добрые… Сайт уже запускать нужно, а тут такая лажа…

        • Дмитрий, так как вы дали мало информации, то могу посоветовать вот что:

          0) сделайте полный бэкап файлов сайта и Базы Данных;
          1) убедитесь, что на вашем сервере PHP 5.3.1 или выше, MySQL 5.1 или новее;
          2) отключите в админке подтверждение регистрации по почте;
          3) почистите кэш Joomla в админке, кэш в браузере и удалите куки вашего сайта;
          4) переключите сайт на стандартный шаблон Joomla;

          Если после этого ситуация не изменится, то отключите ВСЕ плагины и расширения, которые вы устанавливали лично (только не отключайте родные компоненты и плагины Joomla!) и снова проверьте процесс регистрации.

          Если все будет в порядке, то по одному подключайте отключенные плагины и расширения, и снова проверяйте регистрацию, чтобы выявить «проблемный» плагин или расширение.

          Заодно проверяйте, что записывается в БД в таблицы «_session» и «_users» и «_user_usergroup_map» при каждой неудачной регистрации (когда при попытке входа выдается ошибка).

          • Дмитрий:

            Короче решил я вопрос этот.
            Спасибо большое, что попытались помочь! Но проблема была в самой джумле.
            Вообщем долго рассказывать, лучше ткну ссылку на тему которую я создал на форуме.
            Вот: http://joomlaforum.ru/index.php/topic,288001.0.html
            А Вы можете разместить это решение у себя на блоге, ибо поиски решения этой проблемы привели меня сюда. Может еще кому поможет.

            От Владимир (админ блога):
            Дмитрий, я смог бы разместить ваше решение проблемы на блоге, но оно к сожалению решает проблему лишь до очередного обновления Joomla, при котором все изменения снова придется вносить вручную. Мне бы не хотелось, чтобы посетители блога запутались. В общем нужно более гибкое решение проблемы, а пока посетители блога смогут о вашем решении узнать здесь, в комментариях. Надеюсь на ваше понимание.

          • Дмитрий:

            Да, действительно. Забыл упомянуть, что решение временное. Будем надеяться, что разработчики учтут эти проблемы в следующих обновлениях, а пока имеем то, что имеем…

  5. Анна:

    После обновления с 3.1 на 3.2 вот какая ошибка
    Fatal error: Call to a member function getTag() on a non-object in /home/ontargit/public_html/joomlademo/libraries/cms/application/site.php on line 436
    уже все перепробовала, все форумы облазила

    • Анна,
      у Вас были установлены сторонние (не Джумловские) расширения?
      Если да, то войдите в панель управления и отключайте их по очереди и проверяйте, после отключения какого ошибка исчезает.
      Однако, у меня подозрение, что у вас это из-за шаблона — ошибка вызвана в функции public function getTemplate($params = false). Попробуйте подключить стандартный шаблон, который входит в состав Joomla 3.2. Попробуйте временно для сайта включить шаблоны «Beez3″ или «Protostar».

      • Nikko320:

        Я поставил на голую систему, из нестандартных только artio joomsef.
        та же ошибка. шаблон тут не при чем, как и artio joomsef, в админ панели ошибка возникает Fatal error: Call to a member function getTag() on a non-object in /…./libraries/cms/application/site.php on line 305

        • Nikko320, Вы уверены, что используете последнюю версию ARTIO JoomSEF 4.5.1, в которой исправлена проблема совместимости с Joomla 3.2?

  6. Анна:

    Только K2 и Helix из сторонних.
    Строка 436 вот: $tag = $this->getLanguage()->getTag();
    Смену языка и т.п. уже пробовала отключать — без изменений.

    • Строка 436 как раз в функции public function getTemplate($params = false).
      Попробуйте временно для сайта включить шаблоны «Beez3» или «Protostar».

      • Анна:

        Ничего не меняется

        • Если смена шаблона на стандартный ничего не дает, то остается отключать сторонние расширения и плагины, начните наверное с «Helix».

          • Анна:

            Уже все отключила/включлиа, но к сожалению, так ничего и не поменялось. Даже не знаю, как быть…

  7. Анна,
    нужно НЕ включать повторно, а только отключать (и шаблоны тоже) по очереди, затем чистить кэш и проверять. Вы уверены, что отключали все сторонние шаблоны, плагины и прочие расширения?

    Если хотите, можете мне написать в почту (со страницы «Контакты») и я попозже вышлю вам перечень «родных» для Joomla 3.2.0 расширений, которые должны быть включены по умолчанию.

  8. Михаил:

    Добрый день!
    В Joomla 3.2 обновленный TinyMCE
    редактирование изображения вставленного в текст материала упростили до описания и размера
    кучи возможностей как в joomla 3.1.5 таких как отступ текста от картинки расположение самой картинки и прочее нету

    И что теперь делать? Может я чего то дополнительного не нашел в редакторе? Сторонние ставить не хочу.
    Спасибо!

    • Насколько я знаю, теперь это убрали из последней версии TinyMCE, чтобы все было одинаково во всех статьях (по мнению разработчиков), и зависит либо от стандартных настроек, либо от настроек шаблона. Ну а если хочется что-то свое, то нужно теперь подключать свои CSS классы в настройках самого плагина — «Plugin Manager: Editor — TinyMCE». Так что если хочется всегда вручную форматировать картинки, то нужно переключаться в режим исходного кода, или создать свои CSS классы и подключить их к плагину. В другом случае придется устанавливать другой редактор.

      • Михаил:

        Спасибо за информацию.
        Зря так поступили.
        Статьи не могут быть одинаковыми за редким исключением
        а сторонние ставить — могут и не пройти обновления

  9. Михаил:

    Вопрос еще!
    Не совсем в курсе
    Почему на Денвере joomla обновляется через «обновить версию?» ?
    А на хосте выдает что есть новые версии, но не обновляется
    - обновление начинается и не заканчивается никогда ?

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

      • Михаил:

        Спасибо!
        Но хотел уточнить
        Все совершенно одинаково в сайте на Денвере и на Хосте
        изменены только 4-и строчки в файле «configuration»
        пароль, имя хоста и имя базы данных и пользователь

        На Денвере joomla обновляется без всякого
        На Хосте как идет загрузка так и до бесконечности
        Что не так? Что может быть причиной?

        • Причин может быть несколько, например из-за конфигурации хостинга: т.е. к примеру если обновление занимает много времени (долгий по времени процесс может быть остановлен сервером) или недостаточно памяти и т.п.
          Для начала попробуйте скачать оригинальный архив полной версии Joomla 3.2.0 и залить его на хостинг по FTP (в папку /tmp), а после установить обновление вручную, таким же образом, как установка обычного расширения. Если это не прокатит, то сообщите исходную версию вашей CMS, версию PHP, попробуем что-нибудь придумать. (хотя трудно будет конкретно что-то сказать, не зная что и как у вас установлено и настроено на хостинге). Да, и скажите, в момент «зависания» процесса обновления что вы видите, белый экран или нет? Сайт после неудачной попытки обновления работает или нет?

          В крайнем случае можно попросить помощи у хостера, они ведь смогут просмотреть все серверные логи и возможно определят причину.

          • Михаил:

            Процесс обновления идет как обычно — кружок загрузки крутится
            Возможно Вы правы с причинами — не позволяет просто хост скоростью и временем
            Спасибо за совет о обновлении с самого хоста.
            На данный момент задумался о обновлении — TinyMCE ИСПОРТИЛИ.

  10. katerina:

    После обновления на joomla.3.2 упал шаблон JaT3 blank Сам шаблон не сохраняется при изменениях в нем, и не подгружаются стили. На сайте — просто обычный лист с текстом и картинками без каких-либо стилей и верстки… Пробовала перезалить шаблон и плагин T3 framework — безрезультатно. Вот и думаю — а можно ли вернуть джумлу на старую версию?

    • katerina, сначала проверьте, может уже есть новая версия этого шаблона под Joomla 3.2.

      На старую версию откатиться нельзя, такого функционала не предусмотрено в Joomla. Можно прежнюю версию либо поднять из бэкапа (если такой у вас есть), либо поставить с нуля. Но обязательно перед откатом создайте бэкап базы данных текущей версии, чтобы не потерять свои данные в случае установки Joomla с нуля. Бэкап БД можно будет после установки импортировать снова в базу данных, однако нет гарантии, что все пройдет гладко, т.к. в Joomla 3.2 есть изменения в структуре БД.

      • katerina:

        Да, вы правы, Владимир, перезалить старую версию поверх новой не удалось — сайт сломался совсем))
        К сожалению, бэкап, который я делала, без последних изменений на сайте в материалах и модулях.. Но видимо придется вернуться к нему и вновь загружать модули и вносить данные в материалы…

  11. Юрий:

    После обновления на 3.2.0 перестала отправляться почта (как в автоматическом режиме (при регистрации клиентов), так и в ручном, при массовой рассылке) выходит сообдщение The mail function has been temporarily disabled on this site, please try again later. Что можно сдеалть?

    • Зайдите в «Общие настройки -> Сервер (Настройки сервера)» и в блоке «Настройка почты» отключите почту (нажав кнопку «Send mail» -> [Нет]), затем обязательно сохраните настройки кнопкой [Сохранить] в левом верхнем углу панели управления, а после снова включите почту и сохраните настройки.

      Еще один способ заставить почту работать:
      Зайдите в «Общие настройки -> Сервер (Настройки сервера)» и в блоке «Настройка почты» проверьте настройки почты. Попробуйте сменить «Способ отправки», сохранить настройки, затем вернуть все обратно и снова сохранить. Если это не поможет, тогда зайдите в «Менеджер расширений: Проверка базы данных» и вверху-слева нажмите кнопку «Исправить».

      Худший случай: возможно у Вас на сайте используется какой-то плагин или компонент, управляющий почтой, и он возможно несовместим с версией 3.2.0. Тогда отключите его и пробуйте отправить почту стандартным способом.

  12. Николай:

    Михаилу: у меня после обновления также редактор TinyMCE обеднел и не давал возможности задавать параметры для изображений (отступы), решил вопрос заменой редактора JCE Editor 2.3.3.2 Rus — Лучший редактор для Joomla 1.5, 2.5 и 3.0

  13. Nikko320:

    Попробуйте поманипулировать плагином Language Filter.
    _http://www.willows-consulting.com/Joomla/fatal-error-gettag-with-joomla-3-2.html

    • Nikko320, я пробовал на финальной версии 3.2.0, но у меня нет проблем при включении или отключении обоих плагинов «Система — Фильтр языков» и «Система — Подмена кода языка», и также при манипуляциях с языками для сайта и админки. У меня кроме стандартного English (United Kingdom) стоят и русские языковые пакеты.

      Может проблема кроется в том, что у меня только английский для «Язык Контента». Вот что Joomla подсказывает при сменах языков:

      Внимание! Если вы используете на сайте многоязычность (иными словами, если включен плагин «Система — Фильтр языков»), то для Языка Сайта по умолчанию должен быть создан и опубликован так же Язык Контента.

      • Кстати, если например включен плагин «Система — Фильтр языков» и для сайта установлен в настройках русский язык, то при попытке логина можно получить отказ в доступе, так как URL будет не верный:

        _http://joomla320-test.ru/index.php//
        

        а должен быть вот такой

        _http://joomla320-test.ru/index.php/ru/
        

        Это говорит о том, что НЕ «опубликован так же Язык Контента», о чем Joomla и предупреждала.

  14. qwer:

    Здравствуйте. я как начинающий пользователь не могу загрузить текстовый документ на сайт подскажите как это сделать. Как загрузить текстовый документ на сайт платформа 3.2 и сделать ссылку на этот документ. Спасибо.

    • qwer, обычно для загрузки файлов на сайт используют протокол FTP. Если у вас есть доступ по FTP на ваш сайт, то для загрузки файлов на него можно использовать например бесплатную программу Filezilla (_http://filezilla.ru).

      По ссылке немного не понятно, где вы хотите создать ссылку на этот докуиент? Если где-то в меню вашего сайта на Joomla, то откройте панель управления Joomla, зайдите в раздел «Меню», выберите там нужное меню, в котором хотите разместить ссылку, и создайте в нем новый пункт меню. При создании пункта меню для поля «Тип пункта меню» выберите «Системные ссылки -> Внешний URL», а в поле «Ссылка» введите ссылку на ваш документ (например такую: http ://вашсайт.ru/documents/vash-document.txt).

Оставить комментарий к katerina

Уважаемые посетители, пожалуйста, пишите осмысленные и исчерпывающие комментарии. Короткие фразы типа «спасибо автору», «возьму на заметку», «мне помогло» и т.п. будут удаляться. Исключение, когда Вы отвечаете на чей-то вопрос или благодарите за помощь.

Ссылки на Ваш сайт получат статус DoFollow после третьего комментария.

Для вставки кода в комментарии можно использовать BB-коды:
[text] [/text], [php] [/php], [html] [/html]

Подписаться на обновления блога 4remind.ru по RSS
Новости блога в социальных сетях

4remind.ru - персональный блог вебмастера



Наверх
Наверх