私は CodeIgniter を使用していますが、非常に使いやすくしたいので、そのテンプレート ライブラリを使用する可能性があります。テンプレート変数のコンテンツはデータベースから取得されますが、ビジネス管理者にはどのコンテンツ領域が利用可能かを知ってもらいたいです。基本的に、特定のテンプレートを選択するときのパラメーターの名前。たとえば、Joomla は各領域を定義する追加の XML ファイルを使用しますが、Wordpress はページ テンプレート内のコメントを使用して、PHP ファイルがテンプレートであることをシステムに通知します。領域を見つけるために PHP ファイルを解析する必要がないため、Joomla アプローチが好きですが、すべてのテンプレートに関連付けられた余分な XML ファイルがないため、Wordpress アプローチが好きです。私が見逃している他のアプローチはありますか?
4 に答える
テンプレートパーサークラスに小さなハックを追加するのが最も良い方法だと思います。system/libraries/Parser.php のコードは非常に読みやすく、きれいに見えます。変数を追跡するために使用できるフックをそのクラスに挿入できます。それが機能するかどうかはわかりませんが、ここにスニペットがあります:
class CI_Parser {
var $varCallback;
function setVarCallback($callbackFunction) {
$this->varCallback = $callbackFunction;
}
...
function _parse_single(...) {
$callback = $this->varCallback;
$callback($key);
}
...
//Somewhere in your code
function storeVarName($variableName) {
// Persist the variable name wherever you want here
}
$this->parser->setVarCallback('storeVarName');
コントローラーで直接これを行うことができます:
// in the controller
print_r($data);
$this->load->view("main", $data);
または、もう少し初歩的ですがarray
、変数の PHP (またはobject
)をテンプレートに渡すことができます。
// in the controller
$data = array();
$data["namespace"] = array(
"title" => "My website",
"posts" => array("hi", "something else")
);
$this->load->view("main", $data);
次に、ビューで、使用可能なすべての変数を表示するフラグを設定print_r
してnamespace
、ビジネス管理者が何を使用すればよいかを正確に把握できるようにします。
// in the view
if(isset($namespace["showAllVars"])) print_r($namespace);
1 つのオプションは、PHP ファイルでtoken_get_allを呼び出し(ビジネス管理者がファイルを読み込んでいる場合のみ)、その出力を解析することです。
私の意見では、変数の定義を別の場所 (データベース テーブルや別のファイルなど) に保持するのが最善の方法です。これは、テスト (つまり、プログラマーがタグを削除するだけではなく、タグがなくなってしまう) に役立ち、時間内にアプリケーション開発を進めても、まだ機能していることを確認できます。
もう 1 つの利点は、アプリケーション ロジックがテンプレート エンジンから独立していることです。
余談ですが、大量のトラフィックが予想される場合は、代わりに smarty を使用することを検討してください。周囲のほとんどのテンプレート エンジンで広範なテストを行った結果、smarty が最も高速です。