2012-03-20 14 views
2

Joomla 2.5.3モジュールを作成しています。私はJModelから記事を取得しようとしています。記事を取得するときに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/var/www/site/joomla/component/com_content/models/article.php

ライン170は、私がvar_dump($tihs->getState('params'))をすれば、私はNULLを得る

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

です。

答えて

3

自分でエラーが見つかりました。コードはこれです:

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 

は( components/com_content/models/application.php中)クラス ContentModelArticleのソースコードを見てみると、私は機能 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); 

上記のコードは記事のプライベート属性を取得し、グローバル属性をオーバーライドしようとしています。

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

今では動作します:私はグローバル記事が線で状態オブジェクトに属性を与え$model->getItem($id)への呼び出しの前に

関連する問題