dedecms コード調査 (1) オープニング
dedecms この CMS システムは比較的強力で、比較的完全なコンテンツ公開とコンテンツ静的システム
を備えており、独自の独自のタグ システムとテンプレートを備えていることを誰もが知っておく必要があると思います。システム。テンプレート システムは、他の CMS システムが模倣するのが難しいものでもあります。この
には、依然としてある程度の開発スキルとスキルが必要です。
この一連の記事では、dedecms のシステムを研究し、どのような優れた点があるかを詳しく調べます。
まず dedecms の機能を理解することをお勧めします。まずは実際に使ってみて、システムの機能を全体的に理解してください。
この記事では、まず dedecms のコードと機能アーキテクチャについて説明します。
実際、dedecms には、アーキテクチャの観点から言えば、アプリケーション アーキテクチャ パターンはありません。これは、単なる最も単純な PHP アプリケーションです。さまざまな PHP ファイルにアクセスし、
さまざまなシステム機能を管理します。ディレクトリを見れば、各ディレクトリが何に使用されているかは誰でも推測できます。 include ディレクトリにはシステムのいくつかのパブリック関数とクラスが含まれ、
plus ディレクトリにはプラグインが含まれ、template ディレクトリにはテンプレートが含まれ、dede ディレクトリは管理バックエンド ディレクトリです。
インクルードディレクトリを開いて、そこにどんな良いものが入っているか見てみましょう。
カレンダー、時間を選択するためのjs
キャプチャ、検証コード、またはオープンソースコンポーネント
コードは無意味で、ページをめくるテキストだけ
データには、サウンド、単語セグメント、フォント、画像など、システムによって使用されるいくつかのリソースが含まれています、など。
ダイアログ 一部の AJAX ポップアップ ウィンドウのコンテンツ部分であると推定されます。これについては、
inc でいくつかの個別の関数を見つけたときに説明します。なぜ
payment 支払いインターフェイス
taglib を個別に配置する必要があるのかを検討します。これは、dedecms タグが保存されている場所です。見てください。中には dedecms と思われるファイルがたくさんあります。テンプレートには
tpllib テンプレート ライブラリとマークされていますか?まだ理解していませんが、研究が深まるにつれて理解できるようになると思います。インクルード ディレクトリ内のその他のファイルは、一般的に使用される関数やテンプレート システムなど、おそらく最も基本的な機能ファイルです。
を使って話してください
dede ディレクトリ (dedecms の管理ディレクトリ) を開いて見てください。名前を見れば、たくさんのものが入っています。
関数管理ファイル。関数ごとに 1 つのファイル。最も独創的なウェブサイト開発モデルで作られています。それを効率的と呼びましょう。結局のところ、PHPwind
やdiscuzも似たような手法で開発されています。
プログラム全体は基本的にこれらのことについてです。機能については説明しません。dedecms に詳しくない友人には、dedecms のバックグラウンド管理機能を見てもらうことをお勧めします。これは、dedecms をよりよく理解して分析するのに役立ちます。
尚、今回のコード解析は主にページ生成、表示、テンプレート処理、ラベル処理の部分を解析していますが、この
システムも今後さらに解析していきたいと考えています。関数コードはクールです。
最後に、このコード分析の旅から皆さんが何かを得られることを願っています。
Sourcejoyのdedecmsコード研究(2)インデックスからスタート
さて続きまして、今日は主にdedecmsのエントリーコードについてです。
2
まず、index.php を開いて、中身を確認します。ルートディレクトリのindex.phpを開きます。そこに表示されるのはifステートメントです。
/data/common.inc.php が存在するかどうかを確認します。存在しない場合は、インストール インターフェイスに移動します。
/data/ に移動して、このディレクトリと common.inc.php を見てみましょう。
/data/ を開くと、アップロードされた一時ディレクトリ、テンプレート キャッシュ、圧縮された一時ディレクトリ、さまざまなデータベースに
システム構成情報を保存するキャッシュ ファイルなど、多くのディレクトリとファイルが含まれています。混乱の一言です~
さて、common.inc.php を開いてみましょう。ああ、データベース接続に関連する変数を保存しているだけであることがわかりました。平たく言えば、dedecms
のデータベース接続設定ファイルで、システムインストール後に生成されると思われます。したがって、/index.php はそれが存在するかどうかを確認します。
/index.php に戻り、引き続き下を見てみましょう。2 番目の if ステートメントは、GET リクエスト「upcache」が存在するかどうかを判断し、存在しない場合は、ホームページのキャッシュを更新します。 html with 301。これは dedecms の静的ホームページでもあります (dedecms のフロントエンド ページはシステムによって生成された静的ページであることを思い出してください)。
次に何を勉強すべきか考えてみませんか?はい、これは GET リクエスト「upcache」が存在するときにホームページのキャッシュを更新する小さなコードです。
コードは次のとおりです:
require_once (dirname(__FILE__) . "/include/common.inc.php");
require_once DEDEINC."/arc.partview.class.php";
$GLOBALS['_arclistEnv'] = 'index ';
$row = $dsql->GetOne("Select * From `dede_homepageset`");
$row['templet'] = MfTemplet($row['templet']);
$pv = new PartView( );
$pv->SetTemplet($cfg_basedir . $cfg_templets_dir . "/" . $row['templet']);
$pv->SaveToHtml(dirname(__FILE__).'/index.html ');
include(dirname(__FILE__).'/index.html');
exit();
最初に /include/common.inc.php をロードします。これは、おそらく他のシステム関数をロードするいくつかの一般的な関数とファイルです。クラス。
次に、DEDEINC."/arc.partview.class.php" が再度ロードされます。前回の検証で、定数 DEDEINC に注目してください。dedecms のディレクトリ構造を観察すると、arc.partview.class.php は /include ディレクトリにありますが、/include/common.inc.php のロードは機能しません
DEDEINC 定数。DEDEINC が common.inc.php で定義されていることを示します。この定数は後で使用できます。これは、common.inc.php の一般的な機能がシステム操作の基本部分であり、すべてがこの中に含まれていることを証明しています。急いで common.inc.php に入り、
index.php の更新されたキャッシュ コードを読み続ける必要はありません。
3 番目の文はグローバル変数を設定します: $GLOBALS['_arclistEnv'] = 'index';
4 行目はテーブル 'dede_homepageset' のすべてのレコードを取得します もちろん、データベースを見ると、
はありません。 "dede_homepageset" "このテーブルは、テーブル名の前半をテーブル名のプレフィックスに置き換えるデータベース操作関連の関数であると判断します。これはどれも重要ではありません。重要なことは、この文を通じて、ホームページの関連構成情報。データベース内の dede_homepageset
テーブルを開きます。基本的に 1 つのレコードと 2 つのフィールドしかありません。もう 1 つは生成されたホームページの場所です。静的ファイル。
戻って前のコードの分析を続けます
$row['templet'] = MfTemplet($row['templet']);
$row['templet'] は MfTemplet を通じて何らかの方法で変換されたようです関数。後で調べるために MfTemplet 関数に注目します。
次のステップは、新しい PartView クラスを作成することです。名前を見ると、先ほど arc.partview.class.php をロードした目的がわかります。
この PartView クラスが何を行うかについては、引き続きコードを見てみましょう。次の 2 行を読めば、誰もが
$pv->SetTemplet($cfg_basedir . $cfg_templets_dir . "/" . $row['templet']);
3
$pv->SaveToHtml( dirname (__FILE__).'/index.html');
ビュー オブジェクト (PartView クラスのインスタンス。これをビュー オブジェクトと呼びます) を作成し、テンプレートを設定し、SaveToHtml を介して指定された場所に最後に生成されたページを書き込みます。方法。
ホームページが生成されたら、次のステップは生成された静的ファイルをインクルード形式で表示し、終了してページ解析を中断します。
この時点で、/index.php は分析されています。
最初に /data/common.inc.php を渡して、dedecms がインストールされているかどうか、またはデータベース構成情報が定義されているかどうかを判断し、後続の操作の基礎を築きます。
次に、GET リクエスト「upcache」があるかどうかを確認し、ある場合は /include/common.inc.php をロードしてシステムを初期化し、
partview クラスの関連メソッドを呼び出して静的ホームページ ファイルを生成します。最後に表示します。
この観点から見ると、dedecms にはそれほど多くの秘密はありません~
しかし、私たちの記事にはいくつかの疑問も残っています:
1) /include/common.inc.php がロードされた後、そこでどのような作業が行われますか?
2) /include/arc.partview.class.php は何をするものですか? /include/ の下にある arc で始まる多くのファイルは何ですか?
3) MfTemplet 関数は文字列テンプレート ファイル パスに対して正確に何をしますか?
4) partview クラスの関連メソッドの秘密は何ですか?
これらの疑問を持ってこの記事を終了し、次の記事でこれらの謎を一つずつ明らかにしていきます。
sourcejoy の dedecms コード調査 (3) Partview の混乱
前回、dedecms のindex.php ファイルから多くの情報を学び、いくつかの疑問も提起しました。この記事は以前の質問から始まります。
dedecms の続きを見てみましょう。 。
まず、index.php ファイルについての以前の研究で要約した内容を確認しましょう。
最初にcommon.inc.phpをロードし、次にテンプレートを整理し、静的ページを生成し、静的ページにジャンプします。
次に、common.inc.php の内容を見てみましょう。 /include/common.inc.php を開くと、中のコメントがより明確になります。構造について大まかに話しましょう。
まず、一連の定数を定義します。次に、セキュリティ対策を講じ、PHP システム環境をいくつか設定する必要があります。コード内のコメントは非常にわかりやすく書かれています。
次のステップは、dedecms のシステム構成パラメーター ファイルをインクルードすることです: require_once(DEDEDATA."/config.cache.inc.php");
ファイル名を見ると、この構成ファイルは構成のキャッシュである可能性があると推測されます。データベース内の情報。
次に、データベース構成情報ファイルがロードされます: require_once(DEDEDATA.'/common.inc.php');
このファイルはデータベース内の情報に基づいて生成されるキャッシュではなく、dedecms のインストール時に生成されます。前回の記事では、
index.php ファイルから dedecms がインストールされているかどうかを確認することは、このファイルが存在するかどうかを確認することであると述べました。
次に、サイトのルート ディレクトリ、テンプレート ディレクトリ、プラグイン ディレクトリ、データ ディレクトリなどの多くのディレクトリを整理し、多くの変数も整理しました。最後に、データベース操作クラス dedesql.class.php と共通関数ファイル common.func.php がロードされました
4
さて、common.inc.php の謎が明らかになりました。最も基本的なこと。
次に、dedecms のキーとなる arc.partview.class.php を確認する必要があります
channelunit.class.php、typelink.class.php、ftp.class.php がロードされます
以下は、パートビュークラスLa
index.php ではpartview クラスの SetTemplet メソッドと SaveToHtml メソッドが使用されているため、より深く掘り下げやすくするために、これら 2 つのメソッドから始めます。
最初にpartviewのコンストラクターを見てみましょう。
DedeTagParseクラスのインスタンスを作成しました。名前はタグ解析クラスです。次に、いくつかのパラメータを設定します。
次に、新しい TypeLink クラスを作成し、一連のパラメーターを設定します。とても混乱しました。
SetTemplet を見てください。ああ、これはとても簡単です。
まず、DedeTagParse クラスの LoadTemplet メソッドを使用してテンプレートを読み込みます。
次に、Fields 配列のいくつかの要素を設定します。
最後に、ParseTemplet メソッドを呼び出します。
ParseTemplet メソッドは、$GLOBALS 配列の多数の要素を取得し、MakeOneTag 関数を呼び出します。わかりにくいです
SaveToHtml メソッドを見てみましょう。最初のステップはディレクトリを作成し、最後に DedeTagParse の SaveTo メソッドを使用してファイルに保存します。
う~ん、迫力がないですね。
見たものを振り返って考えるしかありません〜
さて、ホームページを生成するために、理解できないpartviewクラスを作成し、一見万能に見えるDedeTagParseメソッドを呼び出してテンプレートを解析して生成しました静的ファイル。
以上です。
他にも関数やクラスが混在していますが、何といってもこのDedeTagParseに注目して、次回は重点的に解析していきたいと思います。
今日はここまでです、鳥の〜はごちゃごちゃしすぎて構造が全くありません〜
sourcejoyのdedecmsコード研究(4)パートビューを歩き続ける前に
、沼に落ちたように無限の変数と配列要素が見えました、何か不可解です私たちの前に置かれました。現在も、私たちはパーツビューの泥沼から抜け出す方法を見つけようと、懸命に前進し続けています。
前の記事では、partview クラスをランダムに分析しましたが、その中には大量の変数が含まれていました。
最も明確なのは、ホームページを生成するためのいくつかの重要な場所しかわかっていなかったということです。 DedeTagParse クラスの LoadTemplet メソッドと SaveTo メソッドを呼び出します。 partview クラスによって定義されたファイル ヘッダーには、いくつかのファイルが含まれています。partview を避けて、最初にこれらの含まれているファイルを見てみましょう。
require_once(DEDEINC.'/channelunit.class.php');
require_once(DEDEINC.'/typelink.class.php');
require_once(DEDEINC.'/ftp.class.php');
5
ftp. Class.php は言うまでもなく、ftp 関連の操作クラスです。以前にパートビューのコードを見たときに、静的ファイルを生成するときに ftp
関連のメソッドが使用されていることがわかりました。これにより、リモートからファイルを書き込むことができるようです。 FTP の操作方法については、実際には PHP の関数ライブラリに ftp をはじめとする関連関数がカプセル化されています。コードは非常に単純なので、詳細は説明しません。
typelink.class.php、partview コードでも見ましたので、開いて見てください。コードを簡単に確認すると、各メソッドが指定されたタイプのリンク HTML 文字列を要求していることがわかります。
実際のところ、dedecms では type が列を指すのではないかと漠然と感じています。これが事実かどうかはわかりません。
もう一度channelunit.class.phpを見てみましょう。
中には ChannelUnit クラスの定義があり、この ChannelUnit クラスは使用されていないことがわかりました。だからまだ彼に会いに行かないでください。 2 つのファイルが追加されていることに気付きました:
require_once(DEDEINC."/dedetag.class.php");
require_once(DEDEINC."/channelunit.func.php");
dedetag.class。それを開いて、ほら、これは非常に複雑ですが、テンプレートを解析してファイルを生成するために使用される DedeTagParse クラスが含まれていることがわかりました。はは、まず覚えておいてください。
後でゆっくり勉強します。
channelunit.func.phpにはどのような関数がありますか?それを開いて見てください。この種の情報を取得するための変数といくつかの関数が存在します。MfTemplet と MakeOneTag という 2 つの関数が、index.php で使用されていることがわかりました。戻って、index.php を開いて、それがどのように呼び出されているかを確認します。値 .htm はテンプレート ファイルのパスです。次に、MfTemplet 関数が何を行うかを見てみましょう。
//テンプレートディレクトリのルール
function MfTemplet($tmpdir)
{
$tmpdir = str_replace("{style}",$GLOBALS['cfg_df_style'],$tmpdir);
$tmpdir = ereg_replace("/{1, }","/",$tmpdir);
return $tmpdir;
}
コメントには「テンプレート ディレクトリのルール」と書かれています。コードをもう一度見てください。ああ、少し理解できたみたいです。テンプレートのパスを置き換えるだけです { style} は、グローバル変数
$GLOBALS['cfg_df_style'] の値です。おそらく、異なるテンプレート セットの使用に関係があると思われます。それが大きな重要性を持たない場合、私たちはそれを研究し続けることはありません。
partview クラスの ParseTemplet メソッドにある別の関数 MakeOneTag を見てみましょう。このメソッドは名前に基づいてテンプレートを解析します。このメソッドのコードのほとんどは、それが何を行うかは明らかではありません。文はMakeOneTag関数を呼び出します。この関数は主にテンプレートを解析するために使用されるようです。次のように使用します:
MakeOneTag($this->dtp,$this);
最初のパラメータは DedeTagParse クラスの強度であり、2 番目のパラメータは Partview クラス インスタンスのハンドルです。
channelunit.func.php のこの関数が何をするのか見てみましょう。
うーん、はっきりと分かっていないことが多いので、大まかにしか見ることができず、落ち込んでいます。
これは、/include/taglib/ の下にある lib サフィックスを持つすべてのファイルを走査し、ファイル パスを配列に追加してから、DedeTagParse クラスの CTag を走査します。
6
DedeTagParse クラスを学習していないため、このセクションは利用できません。とりあえずは理解できますが、それは小さな進歩であると考えられます。パートビューに戻ってもう一度見る必要があるようです。
コンストラクターは特別なものではなく、DedeTagParse クラスのインスタンスを作成し、いくつかの設定を行うだけです。 index.php は、partview インスタンスの作成後に SetTemplet メソッドを実行することがわかります。SetTemplet メソッドをもう一度見てみましょう。
ここでDedeTagParseクラスインスタンスのLoadTempletメソッドを呼び出しています。 どうやらここからコクーンを剥がす必要があるようです。
もう分析できません~
次回のためにいくつかの質問を残してください。
1) DedeTagParseクラスのLoadTempletメソッドについて説明します。
2) MakeOneTag は一体何をしているのでしょうか?
さらに先に進むには、DedeTagParse クラスの LoadTemplet メソッドを徹底的に理解するしかないようです。現時点ではまだ混乱しています。
sourcejoy の dedecms コード研究 (5) は DedeTagParse から始まります
以前、私たちは dedecms の周辺部にいて、さまざまなグローバル変数とさまざまな呼び出しに混乱していましたが、重要な手がかりである DedeTagParse クラスをつかんで、それを理解するために研究しました。多くのことを理解することができます。
この NB の DedeTagParse クラスを見てください。
まず、コンストラクターを見てみましょう。これは特別なものではなく、一連の初期化パラメーターを設定するだけです。
次に LoadTemplet メソッドを探してみましょう。
調べてみると、LoadTemplet メソッドが実際には LoadTemplate メソッドを指していることがわかりました。著者の英語はそんなに下手なのでしょうか?
LoadTemplate メソッドを見てください。
まず SetDefault メソッドを使用していくつかの初期変数を設定します:
$this->SourceString = '';
$this->CTags = '';
$this->Count=-1;
次にテンプレートを判断しますファイルが存在するかどうか。次に、さまざまな状況に応じて $this->SourceString に値を割り当て、$this->ParseTemplet(); メソッドを呼び出します。
このコードを見ると、作成者の開発スキルを向上させる必要があることがわかります。これはすでに 5.6 ですが、コードのリファクタリングはまだひどいです。なぜ $this->ParseTemplet(); ができないのでしょう。
if の外側に配置されますか?
ファイルが存在しない場合、$this->SourceString に「ファイルが存在しません」という文を入れて、$this->ParseTemplet(); を呼び出すのは非常に簡単です。
ファイルが存在する場合、fgets はファイルの内容を読み取り (問題、file_get_contents を使用しないのはなぜですか)、次に別の if を使用して
$this-> の戻り値を通じてキャッシュがあるかどうかを判断します。 LoadCache($filename) が true を返した場合は、キャッシュされたテンプレートが読み取られたことを意味し、空の文字列を返します (どうすればよいでしょうか?戻り値が無責任すぎます)。 false を返した場合は、$this を呼び出します->ParseTemplet(); 再度テンプレートを解析します。
LoadTemplate もほぼ同じです。テンプレート ファイルの内容を読み取り、キャッシュがあるかどうかを確認するだけです。キャッシュがある場合、テンプレートは解析されません。それでおしまい。
次に、$this->LoadCache メソッドを見てみましょう。すごい量のコードがあります。
7
まず、$this->IsCache を使用してキャッシュが許可されているかどうかを判断します (この属性は DedeTagParse クラスがインスタンス化されるときに設定され、テンプレート キャッシュ パラメーター $cfg_tplcache が dedecms のシステム構成に追加されるかどうかに関連します)。これは DedeTagParse のクラスのコンストラクターに反映されます。dedecms のインストール後、デフォルトのシステム構成は true なので、ここでのデフォルトは true です)。これが false の場合、$this->LoadCache は続行せずに false を返します。 . LoadTemplate
メソッドでは、この戻り値に基づいて解析テンプレートが決定されます。
$this->IsCache を渡した後、プログラムは続行します。以下は、現在のテンプレート ファイルに対応するキャッシュを見つけることです。
dedecms のファイル キャッシュは少し特殊で、テンプレート キャッシュ ディレクトリ (data/tplcache) を観察すると、同じ名前のファイルが多数あることがわかります。 。コードから確認してみましょう。
前述したように、LoadCache メソッドで $this->IsCache レベルを渡しました。次に、次のコードを見てみましょう。
$cdir = dirname($filename);
$cachedir = DEDEROOT.$cfg_tplcache_dir;
$ckfile = str_replace($cdir,'',$filename).substr(md5($filename),0,16).'.inc';
$ckfullfile = $cachedir. '/'.$ckfile ;
$ckfullfile_t = $cachedir.'/'.$ckfile.'.txt';
最初の 3 つの文は、キャッシュ ファイル名をスペルなしで取得する方法です。ディレクトリにアクセスし、それを md5 でハッシュし、そのハッシュを取得します。文字列の最初の 16 文字を取得し、
の後に「inc」サフィックスを追加します。
文4は完全なキャッシュファイル名を取得するものです。
5 番目の距離は、別のファイル名のようです。これは、キャッシュ ファイル名の後にサフィックス「.txt」を追加することです
上記で 2 つのファイル名が得られましたが、2 番目のファイル名が何であるかはわかりません。続けましょう以下のコードを見てみましょう。
$this->CacheFile = $ckfullfile;
$this->TempMkTime = filemtime($filename);
if(!file_exists($ckfullfile)||!file_exists($ckfullfile_t))
{
return false;
}
最初の文は現在のテンプレートのキャッシュを指定しますファイル
2 番目の文は、ファイルの最終変更時刻を読み取り、時間属性を設定します。これはまだ明確ではありません。
次の if ステートメントは、テンプレートの 2 つのキャッシュ ファイル (上で結合した 2 つのファイル) が見つからない場合に false を返し、LoadTemplate メソッドでテンプレートを解析します。
テンプレートのキャッシュ ファイルが利用可能であると想定し、コードの確認を続けます。次のコード スニペットはコメント化されており、テンプレートの最終更新時刻を検出するものです。コードは非常に単純で、上記の $ckfullfile_t 変数で指定された txt ファイルを開いて、内容を比較します。キャッシュ変更時刻を含むコンテンツ。元の .txt ファイルは、キャッシュされたファイルの保存時間を保存するために使用されます。時間が一致しない場合は、false を返し、LoadTemplate メソッドにテンプレートを解析させます。
キャッシュが有効であると想定しているので、続行できます。
キャッシュが有効な場合、キャッシュされたファイルが含まれます。
これはキャッシュ ファイルに基づいて詳細に分析されるので、index.htm テンプレートが読み込まれていると仮定します。tplcache で、
8
サフィックスが inc である、index.htm で始まるファイルを見つけて開きます。
これは抜粋です:
$z[0]=Array("global","",236,264);
$z[0][4]['name']="cfg_soft_lang";
$z[1] =Array("グローバル","",277,303);
$z[1][4]['name']="cfg_webname";
$z[2]=Array("グローバル","",347,377) ;
$z[2][4]['name']="cfg_description";
$z[3]=Array("グローバル","",414,441);
$z[3][4][' name']="cfg_keywords";
......
LoadCache メソッドに戻ります。
先ほども述べたように、テンプレートキャッシュファイルがインクルードされているので、次のif文でキャッシュファイル内の情報配列「$z」が正常かどうかを判定します。正常であれば、このforeachループが実行されます。 。コードを見てみましょう。
foreach($z as $k=>$v){
$this->Count++;
$ctag = new DedeTAg();
$ctag->CAttribute = new DedeAttribute();
$ctag-> ;IsReplace = FALSE;
$ctag->TagName = $v[0];
$ctag->InnerText = $v[1];
$ctag->StartPos = $v[2];
$ctag ->EndPos = $v[3];
$ctag->TagValue = '';
$ctag->TagID = $k;
if(isset($v[4]) && is_array($v[ 4])){
$i = 0;
foreach($v[4] as $k=>$v){
$ctag->CAttribute->Count++;
$ctag->CAttribute-> ;Items[$k]=$v;
}
}
$this->CTags[$this->Count] = $ctag;
}
これは、キャッシュ情報配列を走査し、各 $zこのソースコードを見ると、$z 配列要素の 0 がタグ名 (TagName) であることがわかりました。 、1は内部テキスト(InnerText)、2は開始位置(StartPos)、
3は終了位置(EndPos)です。新しい DedeTag オブジェクトの tagID は配列インデックスです。
ここにはループもあります。これは、$z 配列の各要素の 4 番目のサブ要素です。次に、関連する値を現在の DedeTAg オブジェクトの DedeAttribute オブジェクトに割り当てます。
これを見ると、私たちは何かを理解しているようです。
1) tplcache に保存されるのは、解析されたテンプレートではなく、情報配列の束です。
2) 情報配列には、テンプレート ページに含まれるすべてのタグの情報が格納されます。
3) 上記のループは、実際にキャッシュ内のタグ情報を DedeTAg オブジェクトに読み書きし、それを現在の DedeParse クラスの CTags 配列に保存します。現時点では、DedeParse の現在のインスタンスがテンプレートのコンテンツを取得します。 $this->SourceString)、テンプレート上のすべてのタグ情報 ($this->CTags
)。
上記の操作が完了したら、LoadCache メソッドについては終了です。キャッシュの読み取りが完了したので、安全に LoadTemplate メソッドに戻って分析を続行できます。
sourcejoy の dedecms コード調査 (6) ParseTemplet アルゴリズム分析
国慶節の連休中に体調を崩し始めましたが、回復してから、フラフラになりながら、ようやく更新を続けることができました。 。今日は dedecms の最も重要なこと、テンプレート分析について話します。
まず dedecms タグを見てください。誰もが次のことを考えています:
{dede:arclist row=10 orderby=pubdate type='image.' imgwidth='143' imgheight='106'}