コアブロックタイプのコントローラーをカスタマイズする
ブロックのビューテンプレートのように、ブロックのディレクトリ内の他のファイルもサイトの 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() 以外のメソッドは、コアの検索ブロッククラスから継承されますので、オーバーライドしたクラスに記載する必要はありません。