Форум русской поддержки Joomla!® CMS
05.12.2016, 20:42:19 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1] 2  Все   Вниз
  Добавить закладку  |  Печать  
Автор

Проблемы при обновлении на 3.2, потом на 3.2.1

 (Прочитано 10859 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Arkadiy
Группа развития
*****

Репутация: +431/-0
Offline Offline

Пол: Мужской
Сообщений: 5313


Крепитесь, други.


« : 19.12.2013, 09:14:42 »

У меня после обновления на 3.2 выскочил белый лист в админке и на фронте. Я пофиксил баги, вызывающие ошибку и все заработало. проблема была в том что в JPlugin (если не ошибаюсь - базовый класс от которого расширяются плагины) не объявлена $app, а в некоторых плагинах она вызывалась через $this->app, что приводило к фатальной ошибке.

При выходе апдейта 3.2.1 я подумал что эти недочеты устранены и обновился, но как оказалось грабли и ныне там где и были. Перелил весь дистрибутив 3.2.1 поверх, не помогло, пришлось снова руками исправлять ошибки. Так у всех или только у меня?

Ошибки:
Код:
PHP Fatal error:  Call to a member function get() on a non-object in /public_html/plugins/system/remember/remember.php on line 94

PHP Fatal error:  Call to a member function checkSession() on a non-object in /public_html/plugins/user/joomla/joomla.php on line 189
PHP Fatal error:  Call to a member function getQuery() on a non-object in /public_html/plugins/user/joomla/joomla.php on line 199

PHP Fatal error:  Call to a member function isAdmin() on a non-object in /public_html/plugins/authentication/cookie/cookie.php on line 51

Решение для тех кто в таком-же положении:
В плагине remember конструктор должен выглядеть так: (добавлена $this->app = JFactory::getApplication())
Код:
public function __construct(&$subject, $config = array())
{
parent::__construct($subject, $config);
$this->app = JFactory::getApplication();
// Use domain and path set in config for cookie if it exists.
$this->cookie_domain = $this->app->get('cookie_domain', '');
$this->cookie_path = $this->app->get('cookie_path', '/');
$this->lifetime = time() + ($this->params->get('cookie_lifetime', '60') * 24 * 60 * 60);
$this->secure = $this->app->isSSLConnection();
$this->length = $this->params->get('key_length', '16');
}

В плагине Joomla и в плагине cookie надо вообще вставить конструктор:
Код:
public function __construct(&$subject, $config = array())
{
parent::__construct($subject, $config);
$this->app = JFactory::getApplication();
$this->db = JFactory::getDBO();
}

« Последнее редактирование: 19.12.2013, 10:02:00 от Arkadiy » Записан
b2z
Support Team
*****

Репутация: +709/-0
Offline Offline

Пол: Мужской
Сообщений: 7521


Разраблю понемногу


« Ответ #1 : 19.12.2013, 11:37:33 »

Это странно, потому что такой проблемы у себя не заметил. Вот код, который добавляет $app и $db в качестве свойств в класс JPlugin. Это было сделано еще в 3.2.0. Плагин Remember вызывает parent::__construct($subject, $config); и эти свойства должны инициализироваться. У тебя нет?
Записан
Arkadiy
Группа развития
*****

Репутация: +431/-0
Offline Offline

Пол: Мужской
Сообщений: 5313


Крепитесь, други.


« Ответ #2 : 19.12.2013, 18:02:37 »

надо посмотреть.
Записан
ELLE
Support Team
*****

Репутация: +862/-0
Offline Offline

Пол: Женский
Сообщений: 4723



« Ответ #3 : 21.12.2013, 02:00:49 »

один в один ошибка с плагином remember
3.1.1 -> 3.2.1 обновлением из админки
Записан
Arkadiy
Группа развития
*****

Репутация: +431/-0
Offline Offline

Пол: Мужской
Сообщений: 5313


Крепитесь, други.


« Ответ #4 : 21.12.2013, 08:11:49 »

Во, нас прибыло, я еще в родитель не смотрел, руки не дошли.
Записан
Arkadiy
Группа развития
*****

Репутация: +431/-0
Offline Offline

Пол: Мужской
Сообщений: 5313


Крепитесь, други.


« Ответ #5 : 21.12.2013, 09:24:37 »

Начал расследование. По факту у меня оказалось два файла с классом JPlugin.
/libraries/joomla/plugin/plugin.php
и
/libraries/cms/plugin/plugin.php

в /libraries/joomla/plugin/plugin.php слова app вообще нету,
в  /libraries/cms/plugin/plugin.php в конструкторе есть выражение:
Код:
               if (property_exists($this, 'app'))
{
$reflection = new ReflectionClass($this);
$appProperty = $reflection->getProperty('app');

if ($appProperty->isPrivate() === false && is_null($this->app))
{
$this->app = JFactory::getApplication();
}
}
Получается что /libraries/joomla/plugin/plugin.php цепляется вместо нужного класса и $app остается пустым.

/libraries/joomla/plugin/plugin.php отсутствует в дистрибутиве 3.2.

Надо в обновлялке предусмотреть удаление устаревшего класса.
« Последнее редактирование: 21.12.2013, 09:33:27 от Arkadiy » Записан
b2z
Support Team
*****

Репутация: +709/-0
Offline Offline

Пол: Мужской
Сообщений: 7521


Разраблю понемногу


« Ответ #6 : 21.12.2013, 11:38:35 »

Это баг:
http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemEdit&tracker_item_id=32568

Как я понял, пока единственным решением является отключение плагина "Запомнить меня" непосредственно перед обновлением.
Записан
Arkadiy
Группа развития
*****

Репутация: +431/-0
Offline Offline

Пол: Мужской
Сообщений: 5313


Крепитесь, други.


« Ответ #7 : 21.12.2013, 19:37:11 »

Слишком много незнакомых буквосочетаний. Ты хочешь сказать что если отключить этот плагин, то обновление пройдет до конца и устаревший класс удалится?
Записан
HiopsNerevar
Завсегдатай
*****

Репутация: +87/-0
Offline Offline

Пол: Мужской
Сообщений: 656


Я удобный.


« Ответ #8 : 21.12.2013, 19:48:31 »

Была такая же ситуация. Я вообще изначально думал что если отключить вообще ВСЕ, процесс пройдет гладко и безболезненно. Отнюдь. Помимо этой были проблемы с удаление папок и обновлением БД. В результате довести до рабочего состояния сайт пока так и не удалось.
Записан
Arkadiy
Группа развития
*****

Репутация: +431/-0
Offline Offline

Пол: Мужской
Сообщений: 5313


Крепитесь, други.


« Ответ #9 : 21.12.2013, 21:26:21 »

У меня после описанных в первом посте действий сайт работает.
Записан
HiopsNerevar
Завсегдатай
*****

Репутация: +87/-0
Offline Offline

Пол: Мужской
Сообщений: 656


Я удобный.


« Ответ #10 : 21.12.2013, 22:54:24 »

Сейчас попробовал обновить сайт не на локалке а на хостинге. Создал подомен. Процесс тоже решил провести не совсем обычно. Как обычно отключил все что можно. Главное отличие - выбрал загрузку пакета по FTP. Также выключил сайт. Прошло все быстро и идеально. Я в шоке. Все работает. Ошибку remember не выдает. Вообще ошибок нет.
Записан
Arkadiy
Группа развития
*****

Репутация: +431/-0
Offline Offline

Пол: Мужской
Сообщений: 5313


Крепитесь, други.


« Ответ #11 : 21.12.2013, 22:58:54 »

Изначально какой дистриб был установлен?
Записан
HiopsNerevar
Завсегдатай
*****

Репутация: +87/-0
Offline Offline

Пол: Мужской
Сообщений: 656


Я удобный.


« Ответ #12 : 21.12.2013, 23:02:03 »

2.5.17
Записан
Arkadiy
Группа развития
*****

Репутация: +431/-0
Offline Offline

Пол: Мужской
Сообщений: 5313


Крепитесь, други.


« Ответ #13 : 22.12.2013, 08:16:23 »

А 3.1 устанавливалась?
Записан
HiopsNerevar
Завсегдатай
*****

Репутация: +87/-0
Offline Offline

Пол: Мужской
Сообщений: 656


Я удобный.


« Ответ #14 : 22.12.2013, 10:17:09 »

Нет. Устанавливал вчера через компонент Обновление. Накатил сразу 3.2.1. Но дело мне кажется не в версии. Так как до этого 3.2.1 устанавливалась криво.
Записан
Arkadiy
Группа развития
*****

Репутация: +431/-0
Offline Offline

Пол: Мужской
Сообщений: 5313


Крепитесь, други.


« Ответ #15 : 22.12.2013, 10:30:42 »

А я думаю, что дело в 3.1, если ее небыло, то все путем, если была, то появляется лишний файл. Это можно вычислить только сравнением дистрибутивов, но на это времени нет.
Записан
mr_green
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 11


« Ответ #16 : 29.12.2013, 00:17:11 »

та же проблема. вы помогли спасибо! я обновлялся с 3.0.3
правда теперь не работает админка: Table 'denny1_inshop.hf5vi_postinstall_messages' doesn't exist SQL=SHOW FULL COLUMNS FROM `hf5vi_postinstall_messages`
что с базой может быть?
как понял нет таблицы _postinstall_messages как её правильно вписать? в sql слабо понимаю (
« Последнее редактирование: 29.12.2013, 00:40:40 от mr_green » Записан
b2z
Support Team
*****

Репутация: +709/-0
Offline Offline

Пол: Мужской
Сообщений: 7521


Разраблю понемногу


« Ответ #17 : 29.12.2013, 00:45:13 »

Сюда можете попасть - administrator/index.php?option=com_installer&view=database ? Там можно исправить ошибки базы.
Записан
mr_green
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 11


« Ответ #18 : 29.12.2013, 01:10:24 »

решил )) https://github.com/joomla/joomla-cms/blob/master/installation/sql/mysql/joomla.sql#L1495 (не знаю можно ли ссылки выкладывать, если что соррь) тут запрос нашёл на создание этой таблицы, выполнил, заработало.. за одно начал работать плагин Saxum IPLogger, видать после обновления.. всем спасибо ))
Записан
Coresolo
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 43


Fishishere.com©Ваш лучший улов в океане интернета!


« Ответ #19 : 21.01.2014, 09:02:39 »

У меня после обновления на 3.2 выскочил белый лист в админке и на фронте. Я пофиксил баги, вызывающие ошибку и все заработало. проблема была в том что в JPlugin (если не ошибаюсь - базовый класс от которого расширяются плагины) не объявлена $app, а в некоторых плагинах она вызывалась через $this->app, что приводило к фатальной ошибке.

При выходе апдейта 3.2.1 я подумал что эти недочеты устранены и обновился, но как оказалось грабли и ныне там где и были. Перелил весь дистрибутив 3.2.1 поверх, не помогло, пришлось снова руками исправлять ошибки. Так у всех или только у меня?

Ошибки:
Код:
PHP Fatal error:  Call to a member function get() on a non-object in /public_html/plugins/system/remember/remember.php on line 94

PHP Fatal error:  Call to a member function checkSession() on a non-object in /public_html/plugins/user/joomla/joomla.php on line 189
PHP Fatal error:  Call to a member function getQuery() on a non-object in /public_html/plugins/user/joomla/joomla.php on line 199

PHP Fatal error:  Call to a member function isAdmin() on a non-object in /public_html/plugins/authentication/cookie/cookie.php on line 51

Решение для тех кто в таком-же положении:
В плагине remember конструктор должен выглядеть так: (добавлена $this->app = JFactory::getApplication())
Код:
public function __construct(&$subject, $config = array())
{
parent::__construct($subject, $config);
$this->app = JFactory::getApplication();
// Use domain and path set in config for cookie if it exists.
$this->cookie_domain = $this->app->get('cookie_domain', '');
$this->cookie_path = $this->app->get('cookie_path', '/');
$this->lifetime = time() + ($this->params->get('cookie_lifetime', '60') * 24 * 60 * 60);
$this->secure = $this->app->isSSLConnection();
$this->length = $this->params->get('key_length', '16');
}

В плагине Joomla и в плагине cookie надо вообще вставить конструктор:
Код:
public function __construct(&$subject, $config = array())
{
parent::__construct($subject, $config);
$this->app = JFactory::getApplication();
$this->db = JFactory::getDBO();
}


Столкнулся с такой же проблемой. Решил её так:
Совершил первое действие описанное в первом посте и после этого смог попасть в админку. На второе ума не хватило. Потом скачал заплатку по этой ссылке http://joomlacode.org/gf/download/frsrelease/19008/134339/Joomla_3.2.x_to_3.2.1-Stable-Patch_Package.zip установил ее из админки и все заработало.
Всем спасибо за подсказки.
Записан
belovpaha
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 72



« Ответ #20 : 28.01.2014, 13:46:21 »

 drink АЙ ДА МОЛОДЦА!
Записан
zegamind
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 2


« Ответ #21 : 06.02.2014, 08:17:06 »

Аркадию большое спасибо.
Записан
Arkadiy
Группа развития
*****

Репутация: +431/-0
Offline Offline

Пол: Мужской
Сообщений: 5313


Крепитесь, други.


« Ответ #22 : 06.02.2014, 11:08:40 »

Да незачто, пользуйтесь.
Записан
driada712
Новичок
*

Репутация: +0/-0
Offline Offline

Пол: Женский
Сообщений: 1



« Ответ #23 : 06.02.2014, 20:53:17 »

Присоединяюсь к zegamind. Специально зарегистрировалась здесь, чтобы сказать спасибо Аркадию  Kiss Изменила только плагин remember, и все заработало! Ура!
Записан
stylus83
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 192


« Ответ #24 : 26.05.2014, 13:29:24 »

У меня после обновления на 3.2 выскочил белый лист в админке и на фронте. Я пофиксил баги, вызывающие ошибку и все заработало. проблема была в том что в JPlugin (если не ошибаюсь - базовый класс от которого расширяются плагины) не объявлена $app, а в некоторых плагинах она вызывалась через $this->app, что приводило к фатальной ошибке.

При выходе апдейта 3.2.1 я подумал что эти недочеты устранены и обновился, но как оказалось грабли и ныне там где и были. Перелил весь дистрибутив 3.2.1 поверх, не помогло, пришлось снова руками исправлять ошибки. Так у всех или только у меня?

Ошибки:
Код:
PHP Fatal error:  Call to a member function get() on a non-object in /public_html/plugins/system/remember/remember.php on line 94

PHP Fatal error:  Call to a member function checkSession() on a non-object in /public_html/plugins/user/joomla/joomla.php on line 189
PHP Fatal error:  Call to a member function getQuery() on a non-object in /public_html/plugins/user/joomla/joomla.php on line 199

PHP Fatal error:  Call to a member function isAdmin() on a non-object in /public_html/plugins/authentication/cookie/cookie.php on line 51

Решение для тех кто в таком-же положении:
В плагине remember конструктор должен выглядеть так: (добавлена $this->app = JFactory::getApplication())
Код:
public function __construct(&$subject, $config = array())
{
parent::__construct($subject, $config);
$this->app = JFactory::getApplication();
// Use domain and path set in config for cookie if it exists.
$this->cookie_domain = $this->app->get('cookie_domain', '');
$this->cookie_path = $this->app->get('cookie_path', '/');
$this->lifetime = time() + ($this->params->get('cookie_lifetime', '60') * 24 * 60 * 60);
$this->secure = $this->app->isSSLConnection();
$this->length = $this->params->get('key_length', '16');
}

В плагине Joomla и в плагине cookie надо вообще вставить конструктор:
Код:
public function __construct(&$subject, $config = array())
{
parent::__construct($subject, $config);
$this->app = JFactory::getApplication();
$this->db = JFactory::getDBO();
}


Я не могу найти такие строки у меня. Вот что у меня

<?php
/**
 * @package     Joomla.Plugin
 * @subpackage  System.remember
 *
 * @copyright   Copyright (C) 2005 - 2014 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

/**
 * Joomla! System Remember Me Plugin
 *
 * @package     Joomla.Plugin
 * @subpackage  System.remember
 * @since       1.5
 */

class PlgSystemRemember extends JPlugin
{
   /**
    * Application object.
    *
    * @var    JApplicationCms
    * @since  3.2
    */
   protected $app;

   /**
    * Remember me method to run onAfterInitialise
    * Only purpose is to initialise the login authentication process if a cookie is present
    *
    * @return  void
    *
    * @since   1.5
    * @throws  InvalidArgumentException
    */
   public function onAfterInitialise()
   {
      // No remember me for admin.
      if ($this->app->isAdmin())
      {
         return;
      }

      // Check for a cookie if user is not logged in
      if (JFactory::getUser()->get('guest'))
      {
         $cookieName = JUserHelper::getShortHashedUserAgent();

         // Check for the cookie
         if ($this->app->input->cookie->get($cookieName))
         {
            $this->app->login(array('username' => ''), array('silent' => true));
         }
      }
   }

   /**
    * Imports the authentication plugin on user logout to make sure that the cookie is destroyed.
    *
    * @param   array  $user     Holds the user data.
    * @param   array  $options  Array holding options (remember, autoregister, group).
    *
    * @return  boolean
    */
   public function onUserLogout($user, $options)
   {
      // No remember me for admin
      if ($this->app->isAdmin())
      {
         return true;
      }

      $cookieName = JUserHelper::getShortHashedUserAgent();

      // Check for the cookie
      if ($this->app->input->cookie->get($cookieName))
      {
         // Make sure authentication group is loaded to process onUserAfterLogout event
         JPluginHelper::importPlugin('authentication');
      }

      return true;
   }
}

Записан
Arkadiy
Группа развития
*****

Репутация: +431/-0
Offline Offline

Пол: Мужской
Сообщений: 5313


Крепитесь, други.


« Ответ #25 : 26.05.2014, 16:09:22 »

Значит у вас более новая версия чем здесь обсуждается.
Записан
stylus83
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 192


« Ответ #26 : 26.05.2014, 16:14:24 »

Значит у вас более новая версия чем здесь обсуждается.
было написано обновить до 3.1.5. Так что ж можно сделать?
Записан
stylus83
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 192


« Ответ #27 : 26.05.2014, 16:16:33 »

при том что админка работает, только в панели управления выдает ошибку
Table 'arbolsem_admin.eqrxm_postinstall_messages' doesn't exist SQL=SHOW FULL COLUMNS FROM `eqrxm_postinstall_messages`
Записан
Arkadiy
Группа развития
*****

Репутация: +431/-0
Offline Offline

Пол: Мужской
Сообщений: 5313


Крепитесь, други.


« Ответ #28 : 26.05.2014, 16:30:40 »

У вас ведь совсем другая ошибка. Первым делом создайте таблицу eqrxm_postinstall_messages
Записан
Phobosm10
Новичок
*

Репутация: +0/-0
Offline Offline

Сообщений: 1


« Ответ #29 : 27.05.2014, 14:10:45 »

Всем привет. Помогите пожалуйста. После обновления с 3,0 на 3,2
Fatal error: Call to a member function isAdmin() on a non-object in Q:\home\phobos.kz\www\plugins\system\remember\remember.php on line 42
Тупо забить не могу. Руками работать не умею, Потому что Я дебил ))
Но готов научиться. Что делать?

   public function onAfterInitialise()
   {
      // No remember me for admin.
      if ($this->app->isAdmin())
      {
         return;
      }

      // Check for a cookie if user is not logged in
      if (JFactory::getUser()->get('guest'))
   
$this->app = JFactory::getApplication();   {
         $cookieName = JUserHelper::getShortHashedUserAgent();

         // Check for the cookie
         if ($this->app->input->cookie->get($cookieName))
         {
            $this->app->login(array('username' => ''), array('silent' => true));
         }
      }
   }

   /**
    * Imports the authentication plugin on user logout to make sure that the cookie is destroyed.
    *
    * @param   array  $user     Holds the user data.
    * @param   array  $options  Array holding options (remember, autoregister, group).
    *
    * @return  boolean
    */
   public function onUserLogout($user, $options)
   {
      // No remember me for admin
      if ($this->app->isAdmin())
      {
         return true;
      }

      $cookieName = JUserHelper::getShortHashedUserAgent();

      // Check for the cookie
      if ($this->app->input->cookie->get($cookieName))
      {
         // Make sure authentication group is loaded to process onUserAfterLogout event
         JPluginHelper::importPlugin('authentication');
      }

      return true;
   }
}

Как правильно вписать что он хочет не знаю.
« Последнее редактирование: 27.05.2014, 14:30:17 от Phobosm10 » Записан
Страниц: [1] 2  Все   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet