Ошибка JModel при получении статьи - PullRequest
2 голосов
/ 21 марта 2012

Я пишу модуль Joomla 2.5.3.Я пытаюсь получить статью из JModel.

JModel::addIncludePath(JPATH_SITE.'/components/com_content/models', 'ContentModel');
$model =& JModel::getInstance('Article', 'ContentModel', array('ignore_request' => true));
$item =& $model->getItem((int) $id);

Результат:

Fatal error: __clone method called on non-object in /var/www/site/joomla/components/com_content/models/article.php on line 170

Кто-нибудь знает почему?


EDIT :

Строка 170 из /var/www/site/joomla/component/com_content/models/article.php равна

$data->params = clone $this->getState('params');

Если я наберу var_dump($tihs->getState('params')), я получу NULL.

1 Ответ

3 голосов
/ 21 марта 2012

Я сам нашел ошибку. Код такой:

JModel::addIncludePath(JPATH_SITE.'/components/com_content/models', 'ContentModel');
$model =& JModel::getInstance('Article', 'ContentModel', array('ignore_request'=>true));

$appParams = JFactory::getApplication()->getParams();
$model->setState('params', $appParams);

$item =& $model->getItem($id);

Ошибка была:

Fatal error: __clone method called on non-object in /var/www/site/joomla/components/com_content/models/article.php on line 170

Глядя на исходный код класса ContentModelArticlecomponents/com_content/models/application.php), я заметил, что функция getItem() пытается получить доступ к переменной $params объекта состояния. Эта переменная не инициализирована ранее.

$registry = new JRegistry;
$registry->loadString($data->attribs);
$data->params = clone $this->getState('params'); // 'params' was not previously initialized! The call to clone will fail if you don't provide your own initialization.
$data->params->merge($registry);

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

Перед вызовом $model->getItem($id) я поставил глобальные атрибуты статьи для объекта состояния со строками:

$appParams = JFactory::getApplication()->getParams();
$model->setState('params', $appParams);

Теперь это работает.

...