BerdirとApemantusからの良い答えはすでに(+1)ですが、追加の試行の余地があります:
DrupalsとMVCの関係については、「Drupalモジュールの内部動作のメタファー」という質問に対するこの回答でトピックを突き刺しました。これは、「高レベル」の概要に対するあなたの要求に適合する可能性があります。
theme('page, $return)
トップレベルの関数呼び出しについては、3つに分かれているものもあるので、この呼び出しを組み合わせて、概要を完成させることをお勧めします。
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
$return = menu_execute_active_handler();
// Menu status constants are integers; page content is a string.
if (is_int($return)) {
switch ($return) {
// [...] Snipped error page handling code
}
}
elseif (isset($return)) {
// Print any value (including an empty string) except NULL or undefined:
print theme('page', $return);
}
drupal_page_footer();
一つずつ:
drupal_bootstrap()
名前が示すように、これは主に「ステージの設定」に関係しています。
- 基本構成を初期化する
- データベースアクセスを初期化する
- セッション処理を初期化します
- 要求しているユーザーを特定する
- 最終的には、キャッシュされたコンテンツを提供することでリクエストをショートカットします
- ...(その他)
ここで重要な点は、すでにこのフェーズ中に、フックシステムが他のモジュールを呼び出し、要求があれば、この初期フェーズでカスタムロジックを挿入する機会を与えることです。モジュールがこれを行うことは一般的ではありませんが、Drupalの柔軟性に加えて、ユーザー識別プロセスへの影響、キャッシュヒットの防止または強制、要求されたパスの書き換え、その他の低レベルなどの特別なニーズに対応できます。 '操作。
menu_execute_active_handler()
これは、CodeIgniterスケッチのステップ1と2にほぼ一致します。要求されたパスを検査し、適切なコールバック関数(「ワイルドカードをパラメーターに変換する」ロジックを含む)と照合し、そのコールバックを呼び出して、抽出された(または事前定義された)パラメーターを渡します。コールバックは通常、メインページのコンテンツを返すことが期待されていますが、リクエストをリダイレクトするなど、他のことも自由に行うことができます。ほとんどの「ビジネスロジック」はここで実行されますが、返されるコンテンツはすでにマークアップフラグメントであることが非常に多いため、このフェーズにはビューレイヤーの一部がすでに含まれていることに注意してください。
theme_page()
(関数を介して間接的に呼び出されtheme()
、周囲の多くの「魔法」が追加されます)
これは、返されるマークアップの最終的なアセンブリが行われる場所であるため、通常のビューレイヤーとほぼ一致します。ただし、ページの「周囲」の要素(メニュー、ヘッダー、サイドバーなど)が組み立てられる場所でもあるため、この段階でも「ビジネスロジック」が進行する可能性があります。
これらすべてのステップで、フックシステム(および同様に設計されたテーマシステム)は、必要に応じて、他のモジュールが「サブスクライブ」するためのかなりの数の「フックイン」ポイントを提供します。呼び出されると、その時点で処理されている関連情報が渡され、ステップインして操作する(または単に別の処理をトリガーする)オプションがあります。これらすべてが非常に柔軟なシステムになります(カスタムモジュールの「インターセプトと操作」オプションが大量にあるため)が、「いつ何が起こるか」という問題として、Drupalの学習における多くの困難の原因にもなります。多くの場合、簡単には答えられません:/
簡単にまとめると、次のようになります。
- ブートストラップ-初期化のうなり声の作業、最終的には「ビジネスロジック」の初期の侵入で強化されます。
- 実行-メインの「ビジネスロジック」処理、すでにいくつかの「ビュー」生成ロジック(マークアップフラグメントのアセンブリ)。
- テーマ-「ビジネスロジック」のいくつかの重要な部分がまだ混在している、メインのマークアップ生成。