SugarCRMのビュー表示プロセス

とりあえずざっくりと。ロジックはSugarCE5.5.0GAのものとなります。(5.2系でも基本的には大差ないと思います。)

index.php

  • SugarApplication#execut() をコール

incluce/MVC/SugarApplication.php

  • ControllerFactory#getController() => コントローラオブジェクト(controller)を取得
  • controller#preProces() をコール
  • controller#execute() をコール

include/MVC/Controller/ControllerFactory.php

getController()はコントローラオブジェクトを返す。返されるコントローラオブジェクトのベースとなるクラスを定義するphpファイルは、以下の順序で検索される。

1. custom/modules/<モジュール名>/controller.php
2. modules/<モジュール名>/controller.php
3. custom/include/MVC/Controller/SugarController.php
4. include/MVC/Controller/SugarController.php

 また、上記順序に加えてクラス名が"<モジュール名>.CustomController"と定義されているものがさらに優先される。
(例) custom/modules/Accounts/controller.phpを作成した場合、AccountsCustomControllerクラスの存在が最初にチェックされ、存在しない場合AccountsControllerをチェックする。

controller#execute()

  • controller#processView() をコール
  • ViewFactory#loadView()をコール => ビューオブジェクト(view)を取得
  • view#process()をコール

include/MVC/View/ViewFactory.php

loadView()はアクションに応じた "view.xxx.php"を読み込み、その内容に従い画面を構築する。ファイルは以下の順序で読み込まれる。

1. custom/modules/<モジュール名>/views/view.<アクション名>.php
2. modules/<モジュール名>/views/view.<アクション名>.php
3. custom/include/MVC/View/views/view.<アクション名>.php
4. include/MVC/View/views/view.<アクション名>.php

view#process()

  • view#preDisplay() をコール
  • view#display() をコール

view.<アクション名>.php#preDisplay()

画面表示の定義ファイル(<アクション名>viewdefs.php)を読み込み、setup()をコールする。定義ファイルは以下の順序で読み込まれる。(EditViewを表示すると仮定)

1. custom/modules/<モジュール名>/metadata/editviewdefs.php
2. custom/modules/<モジュール名>/metadata/metafiles.php の $metafiles['モジュール名']['editviewdefs']に指定されたファイル
3. modules/<モジュール名>/metadata/metafiles.php の $metafiles['モジュール名']['editviewdefs']に指定されたファイル
4. modules/<モジュール名>/metadata/editviewdefs.php



実際はもうちょっと複雑に各種ビューの定義ファイルの取得やアクションマッピングの設定を行っていますが、単純なビューのカスタマイズ程度ならこのフローを知っていれば困らないと思います。むしろ、editviewdefs.php等で利用可能なパラメータを知ってた方がカスタマイズしやすかったりします。