0

にあるコントローラーファイルをオーバーライドし/concrete/blocks/page_list/controller.phpて内部に配置する方法はあります/packages/mypackage/blocks/page_list/か? 元の編集と表示にいくつかの変更を加えたいと思います。

で、これ/packages/mypackage/blocks/page_list/controller.phpを実行しようとしましたが、効果がないようです:

class PageListBlockController extends Concrete5_Controller_Block_PageList { ... }

4

2 に答える 2

3

新しいバージョンの Concrete5 (v.5.6+) では、パッケージを介してコア クラスをオーバーライド/拡張​​できるようになりました。

パッケージのメインの controller.php ファイルに次を追加する必要があります。

public function on_start(){
    $objEnv = Environment::get();
    $objEnv->overrideCoreByPackage('blocks/page_list/controller.php', $this);
}

コア コントローラー全体をコピーする必要はありません。新しいブロック コントローラーを次のように宣言するだけです。

class PageList extends Concrete5_Controller_Block_Page_List {
    public function mymethod() {
    }
}

(拡張しているクラスとファイルを配置する場所は、C5 のバージョンによって異なる場合があります。/concrete/フォルダー構造とファイルを参照用に比較してください)

次の C5 フォーラムの投稿が役立つ場合があります。

パッケージによるコア クラスのオーバーライド

パッケージはコア ライブラリをオーバーライドできますか?

ただし、注意が必要です。公式の C5 マーケットプレイスに提出することを希望している場合、通常、オーバーライドのあるアドオンは受け入れられません。

于 2013-10-08T20:18:35.600 に答える
1

いいえ。パッケージ内からブロック コントローラーをオーバーライドすることはできません。複数のパッケージがこれを行ったかどうか想像してみてください。(ただし、パッケージ ディレクトリ内にブロック テンプレートを配置することはできますが、置換ではなく追加するため、これは理にかなっています。)

可能であれば、 に入れてオーバーライドする必要があります/blocks/page_list/controller.php

ただし、パッケージからオーバーライドする必要がある場合は、あまりサポートされていないものを調べて、次のことEnvironment::overrideCoreByPackage()を試してください。

Environment::get()->overrideCoreByPackage('/blocks/page_list/controller.php', $myPackage);

ソースを参照してください: https://github.com/concrete5/concrete5/blob/master/web/concrete/core/libraries/environment.php#L123

使用例: http://www.concrete5.org/community/forums/customizing_c5/override-a-core-class-within-a-package/#460765

于 2013-08-18T14:25:36.640 に答える