コアブロックタイプのコントローラーをカスタマイズする

ブロックのビューテンプレートのように、ブロックのディレクトリ内の他のファイルもサイトの application ディレクトリに複製することで、コアブロックの該当のファイルをオーバーライドすることができます。これには、controller.php ファイルも含まれます。例えば、検索ブロックで、ページ内のコンテンツ全体ではなく、ページのタイトルだけを対象に検索したいとします。208-210行目がこの変更に必要なコードです。

if (isset($_REQUEST['query'])) {
    $ipl->filterByKeywords($_q);
}

このコードは do_search メソッド内にあります。それでは、コアの検索ブロックのコントローラーをオーバーライドし、filterByKeywords メソッドを filterByName メソッドに変更してみましょう。まず、[管理画面 > システムと設定 > 最適化 > キャッシュとスピード設定]からオーバーライドキャッシュを無効にします。このキャッシュが有効の間は、concrete5 は application ディレクトリに新しいファイルを作成しても読み込みません。

次に、オーバーライドディレクトリ application/blocks を作成します。Webルートディレクトリにいる場合は次のコマンドで作成できるでしょう。

mkdir application/blocks/search

次に、空の controller.php ファイルをこの位置に作成します。作成されたファイルの位置はこのようになるでしょう。application/blocks/search/controller.php.

次に、名前空間を指定します。このファイルは application ディレクトリにありますので、次のようになります。

<?php
namespace Application\Block\Search;

そして、コアの検索ブロックのコントローラーへの参照を指定します。

use Concrete\Block\Search\Controller as SearchBlockController;

そして、コアの検索ブロックのコントローラーを継承してクラスを作成します。

class Controller extends SearchBlockController

ファイルの全体は次のようになります。

<?php
namespace Application\Block\Search;
use Concrete\Block\Search\Controller as SearchBlockController;
class Controller extends SearchBlockController
{
 
 
}

あとは、do_search() メソッドをオリジナルの検索ブロックコントローラーからコピーしてこのクラスに追加し、変更したいコードを変更するだけです。do_search() 以外のメソッドは、コアの検索ブロッククラスから継承されますので、オーバーライドしたクラスに記載する必要はありません。

原文:Using a Custom Controller for a Core Block Type