【问题标题】:JModel error when getting article获取文章时出现 JModel 错误
【发布时间】:2012-04-05 10:23:01
【问题描述】:

我正在编写一个 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

有人知道为什么吗?


编辑

/var/www/site/joomla/component/com_content/models/article.php 的第 170 行是

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

如果我这样做var_dump($tihs->getState('params')),我会得到NULL

【问题讨论】:

    标签: joomla joomla-extensions joomla2.5


    【解决方案1】:

    我自己发现了错误。代码是这样的:

    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);
    

    现在可以了。

    【讨论】:

      猜你喜欢
      • 2020-08-16
      • 2013-01-01
      • 2020-07-20
      • 1970-01-01
      • 2013-10-25
      • 2018-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多