discuz 1.5 Xソースの簡単な分析


しばらくDISCUZ X 1を見ました.5のコード、収穫を記録します.
バックグラウンドを考慮せず,dzxのリクエストエントリは約7つである.ルートディレクトリの下のforumです.php(広場、実はフォーラム)、group.php(グループ)、home.php(自宅)、index.php(トップページ)、member.php(会員管理、ログイン登録など)、misc.php(ランキング)、search.php(検索)、userapp.php(不明、ユーザーアプリケーション?)
要求トップページindex.phpの場合、デフォルトでは広場forumに向かいます.php.リクエストforumを簡単に分析します.php時のDZX全体の実行フロー.
開くphp
まず、2つのファイルを引用しました.

require './source/class/class_core.php';
require './source/function/function_forum.php';

class_CoreはDZXの環境を初期化する.次の2つのコードで実現

$discuz = & discuz_core::instance();
$discuz->cachelist = $cachelist;
$discuz->init();

$discuz->cachelist=$cachelist;何の役に立つのか分からなかった.
次に、異なるmodに基づいて異なるphpファイルを呼び出します.コードは次のとおりです.

$mod = !in_array($discuz->var['mod'], $modarray) ? 'index' : $discuz->var['mod'];

urlに合格しなかったら?mod=xxxでmodを指定すると、デフォルトはindexです.
次にモジュールファイルを参照

require DISCUZ_ROOT.'./source/module/forum/forum_'.$mod.'.php';

sourcemoduleの下のディレクトリとファイルを見ると、各エントリファイルにどのmodパラメータが指定できるかがわかります.
ここではデフォルトでsourcemoduleforumforum_が見つかりますindex.php.
forum_index.phpトップページは表示ページに必要なデータを取り、前にたくさんのものが書いてあって、詳しく見ていません.プロセスで最も重要なのは、次のとおりです.

include template('diy:forum/discuz:'.$gid);

直感的な印象で、templateはパスを返します.よく考えてみると、実は流れは大体このようなものです.
templateのパラメータはテンプレートファイルのパスを指定しているに違いありませんが、テンプレートファイルは解析によって使用されます.だからtemplate関数は必ずテンプレートのラベルを解析しなければなりません.では、なぜURLを返すのでしょうか.DZXは効率を高めるために解析したテンプレートをキャッシュしています.つまり、htmlのテンプレートをphpの「コンパイル」したファイルに解析し、1つの場所に保存します.次に使うときは、「コンパイル」したファイルを直接読んで、コンパイルを省いて効率を高めます.
template関数はsourcefunctionfunction_にありますcore.phpファイルにあります.だいたい見てみると、上に言ったのとあまり違いません.
読み込んだテンプレートファイルはtemplatedefaultforumdiscuzです.htm
返されたキャッシュファイルは/data/templateディレクトリに保存されます.
次にテンプレートファイルを開きます.htmとキャッシュファイルatatemplate1_diy_forum_discuz.tpl.php.
比較すると、$announcementsが,$announcements変数はどこから来たの?source\module\forum\forum_index.phpのget_index_announcements関数はこの値を取りに来ました.
{lang xxx}直接ローカル化されて対応する文字になりました

<!--{hook/index_side_bottom}-->

次のようになりました.

<?php if(!empty($_G['setting']['pluginhooks']['index_side_bottom'])) echo $_G['setting']['pluginhooks']['index_side_bottom']; ?>

$_GはDZXでよく見られるが,膨大なグローバル変数であると感じられる.まだ細かく研究していない.
全体的にDZXの流れは、現在多くのCMSの設計方式でもある.URLに基づいてデータを準備し、対応するテンプレートを呼び出し、テンプレートをコンパイルしてキャッシュとして保存し、キャッシュファイルに関数や準備したデータを呼び出し、最後に表示します.私が見たwordpressのようにtextpatternの差は多くありません.