Я сам нашел ошибку. Код такой:
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
Глядя на исходный код класса ContentModelArticle
(в components/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);
Теперь это работает.