ThinkPHPモジュールエンジンの変数出力詳細

2804 ワード

この例では,ThinkPHPテンプレートエンジンにおける変数出力の使用法を解析した.皆さんの参考にしてください.具体的な分析は以下の通りである.
Actionでassignメソッドを使用するとテンプレート変数に値を割り当てることができ、値を付けた後、どのようにテンプレートファイルに変数の値を出力するかがわかりました.
Actionでnameテンプレート変数を割り当てた場合:

   $name = 'ThinkPHP'; 
  
$this->assign('name',$name);

組み込みテンプレートエンジンを使用して変数を出力するには、テンプレートファイルでのみ使用します.
{$name}
テンプレートをコンパイルした結果は

    
 

最後に実行すると、ThinkPHPの出力結果をラベル位置に表示できます.テンプレートラベルの{と$の間にスペースがないことに注意してください.そうしないと、ラベルは無効になります.通常ラベルのデフォルトの開始フラグは{、終了フラグは}です.また、TMPL_L_DELIMとTMPL_R_DELIMを設定することで変更できます.たとえば、プロジェクトプロファイルで定義します.

   'TMPL_L_DELIM'=>' 'TMPL_R_DELIM'=>'}>', 
 

では、上の変数出力ラベルは次のように変更します.
次の内容では、assignメソッドの最初のパラメータがテンプレートファイルで使用される変数名であることをデフォルトのラベル定義で説明します.次のコードに変更すると、次のようになります.

   $name = 'ThinkPHP'; 
  
$this->assign('name2',$name);

テンプレート変数の値を出力するには、{$name}を使用する必要があります.ユーザー・データ・オブジェクトをテンプレート変数に割り当てる必要がある場合は、

   $User = M('name'); 
  
$user = $User->find(1);
$this->assign('user',$user);

つまり$userは実際には配列変数であり、次の方法で関連する値を出力することができます.

   {$user['name']}//        
  
{$user['email']} // email

$userが配列ではなくオブジェクトである場合.

   $User = M('name'); 
  
$User->find(1);
$this->assign('user',$User);

関連する属性値は、次の方法で出力できます.

   {$user:name}//         
  
{$user:email} // email

3.1以降、クラスの属性出力方式が調整され、元のPHPオブジェクトの書き方がサポートされているので、上のラベルは以下のように変更する必要があります.

   {$user->name}//         
  
{$user->email} // email

テンプレート定義を容易にするために、ポイント構文もサポートできます.たとえば、上記の 

   {$user['name']}//         
  
{$user['email']} // email

変更可能

   {$user.name} 
  
{$user.email}

ポイント構文のデフォルトの出力は配列方式であるため、上記の2つの方式は構成されていない場合に等価であり、TMPL_VAR_IDENTIFYパラメータを構成することによってポイント構文の出力効果を決定することができ、以下の出力を例にとると{$user.name}
TMPL_VAR_IDENTIFYがarrayに設定されている場合、
{$user.name}と{$user['name']}は等価である、すなわち出力配列変数である.
TMPL_VAR_IDENTIFYがobjに設定されている場合、
{$user.name}と{$user:name}は等価です.つまり、出力オブジェクトのプロパティです.
TMPL_VAR_IDENTIFYを空にすると、出力する変数が配列なのかオブジェクトなのかが自動的に判断され、効率にある程度影響し、2次元配列と2段階オブジェクト属性のみがサポートされます.
多次元配列または多層オブジェクトのプロパティの出力の場合は、次の定義を使用します.

   {$user.sub.name}//        
 

または

   {$user['sub']['name']}//           
  
{$user:sub:name}//

本明細書では、ThinkPHPフレームワークに基づくPHPプログラムの設計に役立つことを期待します.