詳細な説明ありがとうございます。
ご指摘の通りオーバーライドキャッシュをオフにしたところ、
controllerを認識することが出来ました。
お騒がせしまして申し訳ありませんでした。
既存Block(autonav)のController部の修正方法
2013年4月14日 at 13:12
現在autonavを使用してメニューに子ページを表示させていますが、
表示されるページのリストに親のページも追加したいと思い、
autonavの変更を試みてます。
concrete5\concrete\blocks\autonav\controller.phpでは
Concrete5_Controller_Block_Autonavを継承しており、
controller.phpで目的の関数をオーバーライドして動作を変更したいと思ってます。
上記変更を加えたファイルをconcrete5\blocks\autonav\controller.phpと
単体でおいてもどうも読み込まれていないようです。
既存BlockのController部を修正したい場合は、
どのようにしたら良いかご教授お願いします。
タグ:
Your post has been saved and will be published after approval by the forum moderator.
takuro hishikawa
Re: 既存Block(autonav)のController部の修正方法
コアクラスとは…
concrete5の主要な機能はcoreディレクトリーに置かれ、従来のクラスはコアクラスを継承するようになりました。このことにより、従来はクラス単位でのオーバーライドしか出来ませんでしたが、メソッド単位のオーバーライドが可能になりました。
コアクラスのブロックのコントローラー(例:オートナビブロックのコアクラス)
/concrete/core/controllers/blocks/autonav.php
オートナビの実際の処理が記載されているクラスになります。
ブロックのコントローラー(例:オートナビブロックのコントローラー)
/concrete/blocks/autonav/controller.php
concrete5はブロック単位でのMVCを実現していますが、そのコントローラーに当たるクラスです。中身はコアクラスを継承しているだけで、空になっています。
ブロックのコントローラーのユーザー領域でのオーバーライド
/blocks/autonav/controller.php
concreteフォルダの上に並んでいる空の各フォルダはユーザー領域となっており、ここにconcreteフォルダ内と同階層、同名のファイルを置くことでconcreteフォルダ内のファイルをオーバーライド(上書き)することができます。
コアクラスにある同名のメソッドを用意すれば、メソッド単位でオーバーライド(上書き)することで、より細かく、柔軟にconcrete5の動作をカスタマイズすることが可能になります。
※ 注意点
1. オーバーライドキャッシュ
concrete5.6以降導入されたオーバーライドキャッシュにより、どのクラスをオーバーライドするかはキャッシュに保持されています。このことにより高速化を実現していますが、同時にキャッシュが保持されている期間はあたらしいオーバーライドが反映されません。管理画面からのキャッシュのクリアを行いましょう。
また、管理画面の環境設定から、オーバーライドファイルがconcrete5に認識されているかどうかを確認することができます。
2. クラス名はかならず同じにする
クラス名にスペルミスがあるといつまでたっても読み込まれませんのでご注意を。