web-dev-qa-db-ja.com

致命的なエラー:クラスContentModelArticlesを再宣言できません

Joomlaでいくつかのコアファイルを編集してみました。私はMVCオーバーライドプラグインを使用しています: ここにリンクの説明を入力してください

Components/com_content/modelsのarticle.phpとarticles.phpを上書きしたいのですが。

オーバーライドが完了し、現在機能しています。私の問題は、私のフロントページ/ホームページでこのエラーが発生することです。

Fatal error: Cannot redeclare class ContentModelArticles in /Applications/MAMP/htdocs/site/components/com_content/models/articles.php on line 680

それは私がそのエラーを受け取る唯一の場所です。 articles.phpおよびその他の場所では、同様のエラーの兆候はありません。誰かが解決策を教えてくれますか?

オーバーライドの方法がわかりません。私はarticles.phpをコピーして、私のテンプレートファイルの別のフォルダに入れました。したがって、articles.phpにフィールドをいくつか追加した以外はすべて同じです。それはこのように始まります:

defined('_JEXEC') or die;

use Joomla\Registry\Registry;

/**
 * This models supports retrieving lists of articles.
 *
 * @since  1.6
 */
class ContentModelArticles extends JModelList
{
    /**
     * Constructor.
     *
     * @param   array  $config  An optional associative array of configuration settings.
     *
     * @see     JController
     * @since   1.6
     */
    public function __construct($config = array())
    {
        if (empty($config['filter_fields']))
        {

私は何をすべきかわからない。 ContentModelsArticlesを別のものに変更した場合。

2
Peter

オーバーライドは通常、クラスを再宣言しません。ほとんどの場合、上書きは元のファイルの代わりに読み込まれたファイルです。 出力オーバーライドについて

とはいえ、システムプラグインを宣言し、元のクラスの前に新しいクラスをロードする高度な手法があります。その後、Joomlaクラスローダーは元のクラスをロードしません。 プラグインのテンプレート化されていないレイアウトファイルを上書きしますか?

1
Anibal

あなたはそれを正しく持っています。で:site/templates /mytemplate/ code/com_content/models/articles.php

次のようにクラスを作成する必要があります。

class ContentModelArticles extends ContentModelArticlesDefault

基本的に、プラグインは「元のクラス」を文字列に読み込み、実際にeval()を介して作成し、デフォルトを追加します。

0
Masaia