smarty サンプル チュートリアル (1) 1. Smarty とは何ですか? smarty は、PHP で書かれたテンプレート エンジンです。簡単に言うと、ロジックと外部コンテンツを分離します。の目的は、PHP プログラマーとアーティストを分離することです。プログラムの論理コンテンツを変更するために使用されるプログラマーはアーティストのページ デザインに影響を与えず、アーティストによるページの再変更はプログラム ロジックに影響を与えません。これは、複数人で協力するプロジェクトでは特に重要です 。 2. Smarty の利点: 1. 速度: Smarty で作成されたプログラムは、他のテンプレート エンジン テクノロジと比較して最大の速度向上を実現できます。 2. コンパイル済みタイプ:smarty で書かれたプログラムは、実行時に非テンプレート テクノロジの PHP ファイルにコンパイルされる必要があります。このファイルは、次回テンプレートにアクセスするときに、PHP と HTML を組み合わせて使用します。 WEB リクエストをテンプレートを再コンパイルせずに直接このファイルに変換します (ソースプログラムが変更されていない場合) 3. キャッシュ技術: ユーザーを保存できる、smarty が選択したキャッシュ技術です。最終的に表示される HTML ファイルがキャッシュされます。 Smarty のキャッシュ属性が true に設定されている場合、ユーザーの WEB リクエストは、smarty によって設定されたキャッシュタイム期間内にこの静的 HTML ファイルに直接変換されます。静的 HTML ファイル。 4. プラグイン技術: Smarty はプラグインをカスタマイズできます。プラグインは実際にはいくつかのカスタム関数です。 5. If/elseif/else/endif をテンプレートで使用できます。テンプレート ファイルで判断ステートメントを使用すると、テンプレートを非常に便利に再フォーマットできます。 3. Smarty が適さない場所: 1. リアルタイムで更新する必要があるコンテンツ。たとえば、頻繁にデータを更新する必要がある株式表示のように、このタイプのプログラムに Smarty を使用すると、テンプレートの処理が遅くなります。 2. 小さなプロジェクト。プロジェクトが単純であるためにアーティストとプログラマーの両方が関与する小規模なプロジェクトの場合、smarty を使用すると、迅速な PHP 開発という利点が失われます。 4.smarty クラスをインストールします: smarty をインストールする環境: PHP バージョン 4.06 以降。 smarty のインストール方法は非常に簡単です。http://samrty.php.net から Smarty.t をダウンロードします。LIB 内のすべてのファイルを comm ディレクトリにコピーして、基本的なインストールを完了します。 その他の高度なインストール方法と使用方法については、マニュアルを参照してください。 5. テンプレートでの Smarty の使用方法については、このセクションで説明します。いくつかの例。 Smarty テンプレートは通常、.tpl で識別されます。芸術の便宜上、拡張子を直接 .html として記述する人もいますが、これも問題ありません 。この記事では、smarty の標準的な記述方法を採用しており、smarty テンプレートとして .tpl で表現されています。 PHP コード:----------------------------------------------------- --------------------------------------- 例 1: まず簡単な例を見てみましょう。 =========================================== ====== index.tpl =================================== ================== {* コメント内容として Smarty 変数識別子の * に含まれるテキストが表示されます *} {インクルードファイル="header.tpl"}{*ページ ヘッダー*} 皆さん、こんにちは。私の名前は {$name} です。私の Smarty 学習教材をぜひ読んでください。 {include file="foot.tpl"}{*ページ終了*} 上記の例は tpl テンプレートです。 1. {**} は、 template page では、smarty がテンプレートを解析するときに出力は生成されず、テンプレート設計者がテンプレートに注釈を付けるためにのみ使用されます。 2. {include file="xxx.tpl"}この文を使用して、現在のページにテンプレート ファイルをインクルードします。この例では、Web サイトでよく使用される head.tpl と foot.tpl がインクルードされます。 can このように考えて、この文を使用して、xxx.tpl のすべての内容を現在のステートメントにコピーします。もちろん、この文を使用する必要はありません。XXX.tpl の内容を現在の文 にコピーしても問題ありません。 3.{$name}:smarty のコアコンポーネントであるテンプレート変数は、smarty によって定義された左境界文字 {および右境界文字} に含まれており、PHP 変数の形式で与えられます。 Smarty プログラムでは、 $smarty->assign("name", "Li Xiaojun"); を使用して、テンプレート内の $name を 3 つの単語「Li Xiaojun」に置き換えます。 ソースプログラム全体の例は次のとおりです。 ============================== header.tpl ============================
兄貴の賢いチュートリアル ========== === =================
foot.tpl
===================== === =======
シニア ブラザー著 2004 年 8 月 本文> ========================= =================== index.tpl ====================== =============================== {* Smarty 変数識別子に * を付けて表示されます。テキストは注釈の内容 *} {include file="header.tpl"}{*ページ ヘッダー*} 皆さん、こんにちは。私の名前は {$name} です。私のスマートな学習教材を読んでいただければ幸いです。 {include file="foot.tpl"}{*ページ終了*} ======================== = ======================= Index.php ================= = ============================== include_once("./comm /Smarty.class.php"); //smarty クラス ファイルが含まれます $smarty = new Smarty(); //smarty インスタンス オブジェクトを作成 $smarty $smarty->templates("./ templates "); //テンプレート ディレクトリを設定します $smarty->templates_c("./templates_c"); //コンパイル ディレクトリを設定します //-------- --- -------------------------------------- //左と右境界文字、デフォルトは {} ですが、実際のアプリケーションでは Javascript // と競合しやすいため、<{}> などに設定することをお勧めします。 //------------------------------------------ --- ------- $smarty->left_delimiter = "{"; $smarty-> $smarty->assign ("name ", "Li Xiaojun"); // テンプレート変数を置き換えます // ./templates にあるindex.tpl テンプレートをコンパイルして表示します $smarty->display("index. tpl") ; ?> このプログラムが最終的に実行されると、次のように表示されます: ================== ======= ======= Index.php を実行 ========================== ======== 私の名前は Li Xiaojun です。私のスマートな学習教材をぜひ読んでください。 /html> smarty インスタンスのチュートリアル (2) この例は、smarty テンプレート パラメーターの包括的な使用例です。これらのパラメータは、テンプレートの出力を制御するために使用されます。そのうちのいくつかは、参考のために他のパラメータを選択することができます。 ====================================== ========== exmple2.tpl =============================== ================= 兄貴のスマートな例 2 🎜> 1. 最初の文の最初の文字は大文字にする必要があります: {$str1|capitalize} } 🎜> 3. 3 番目の文は現在の日付を出力します: {$str3|date_format:" %Y year %m month %d day"} 4. 4 番目の文は PHP プログラムでは処理されません。デフォルト値が表示されます: {$str4|default:"No value!"} 5. 5 番目の文は 8 つの空白文字でインデントされ、これらの 8 つの空白文字を「*」に置き換える必要があります: {$str5|indent:"*"}} 6 6 番目の文で、TEACHerLI@163.com をすべて小文字に変更します: {$str6| lower} 7. 7 番目の文で、変数の Teacherli を次のように置き換えます。 Li Xiaojun: {$ str7| replace:"Teacherli":"李晓君"} 8. 8 番目の文は変数修飾子の組み合わせです: {$str8|capitalize|cat:"Here is the new added time:"|date_format :" %Y 年 %m 月 %d 日"| lower} === ================================ example2.php ======= ================================== ====== include_once("./Smarty.class.php"); //smarty クラス ファイルをインクルード $smarty = new Smarty( ); //smarty インスタンス オブジェクトを作成 $smarty $smarty->templates("./templates") //テンプレート ディレクトリを設定 $smarty->templates_c("./templates_c"); //コンパイルディレクトリを設定します //---- -------------------------------- ------------- // 左右の境界、デフォルトは {} ですが、実際のアプリケーションでは JavaScript // と競合しやすいので、 & lt; {} & gt; に設定することをお勧めします。 //------------------------------------------ --- ------- $smarty->left_delimiter = "{"; $smarty-> $smarty->assign ("str1 ", "私の名前はシャオジュン、リーです。"); // str1 を私の名前はシャオジュン、リーに置き換えます。 $smarty->assign("str2", "私の名前は:" ) ; //出力: 私の名前は: Li Xiaojun $smarty->assign("str3", "AD") //西暦 2004 年 8 月 21 日を出力 / /$ Smarty->assign("str4", ""); //4 番目の文を処理しない場合はデフォルト値が表示されます。前の文を使用する場合は、"" に置き換えます。 $smarty-> assign(" str5", "前に 8*"); // 5 番目の文の出力: ********前に 8* $smarty->assign("str6", "TEACHerLI@) 163.com "); //Teacherli@163.com がここに出力されます $smarty->assign("str7", "this is Teacherli"); //テンプレートでは次のように表示されます: this is Li Xiaojun $smarty ->assign("str8", "HERE IS COMBINING:"); // ./templates にあるindex.tpl テンプレートをコンパイルして表示します $smarty-> ;display("example2 .tpl"); ?> 最終的な出力効果: =================== ===== ============================ example2.php の出力結果: ===== ===== =========================================== ; 兄貴のスマートな例 2 1.文は大文字で入力してください: My Name Is Xiao Jun, Li. 2. テンプレート変数 Li Xiaojun の 2 番目の文: 私の名前は: Li Xiaojun 4 番目の文は PHP プログラムでは処理されず、デフォルト値 (値なし) が表示されます。 5. 5 番目の文は 8 個の空白文字でインデントし、これら 8 個の空白文字を「*」に置き換えます。 6. 6 番目の文では、TEACHerLI@163.com をすべて小文字に変更します (Teacherli@163)。 com 7. 7 番目の文で、変数の Teacherli を次のように置き換えます。 Li Xiaojun: this is 李晓君< br> 8. 8 番目の文は、変数修飾子の組み合わせです。新しく追加された時刻は次のとおりです: 2004 年 8 月 21 日 テンプレート内のこれらのパラメーターは、制御に使用できます。テンプレートに対する一連の変更。変数修飾子 修飾子を適用するには「|」と修飾子名を使用し、修飾子のパラメータを区切るには「:」を使用します。変数修飾語は8文目のように組み合わせて使用することができ、実際の運用において柔軟に適用することができます。 例 3. ================================ ================== example3.tpl ======================= =========================== テンプレートの一部のデフォルトFunction {*次の段落はテンプレート内の変数 UserName の定義に相当します*} {assign var="UserName " value="Big Brother"} これにより、テンプレート内で定義された変数が表示されます: UserName = admin 次の行には 3 つのチェックボックスが表示されます: {html_checkboxes name ="CheckBox "values=$CheckNamechecked=$IsCheckedoutput=$value separator=" "} この行には 3 つの無線が表示されます: {html_radioes name ="RadioBox"値= $ radioname checked = $ ischecked output = $ value separator = "&lt; br /&gt;"} ; ;/body> ================= ====== ======================== example3.php =========== ====== ===================================== require_once ("./comm/Smarty.class.php"); $smarty = new F117_Smarty $smarty->template_dir = './templates/'; >compile_dir = './templates_c/'; $smarty->config_dir = './configs/'; $smarty->cache_dir = './cache/' ; ->キャッシュ = false; //-------------------------------- --- ---------------------------------------------- --- ---- //処理中 {html_checkboxes name="CheckBox" value=$CheckName selected=$IsChecked Output=$value separator=" "} //-- --- ---------------------------------------------- --- ----------------------------- $smarty->assign('CheckName', array( 1001 => '中国語', 1002 => '数学', '外国語')); $smarty->assign('IsChecked', 1001 ); //-------------------------------------- -------------------------------------------------- - //処理中 {html_radioes name="RadioBox" value=$RadioName selected=$IsChecked Output=$value separator=" "} //------------------------------------------ --- -------------------------------------- $smarty-> ;assign ('ラジオネーム', array ( 1001 = & gt; '中国語', 1002 = & gt; '数学', 1003 = & gt; '外国語')); > $ Smarty- & GT; assign('IsChecked', 1001); //-------------------------- ---------------------------------------------------- ------- --- //{html_select_date} は処理せずに自動的に出力されます //--------------------- -------- -------------------------------------- -------- ------- $smarty->display("example3.tpl"); ?> スマートなサンプル チュートリアル(3) ====================================== ======== ======== example3.php の出力結果: ====================== ======== ======================== テンプレートの一部のデフォルト関数< /title> {assign var="UserName" value="Senior Brother"} 这里将显示模板内部定义的一个变量:UserName = 大师兄 下面的这一行将显示3个checkBox: 语文 数学 外语 下面在这一行将显示3个radio: 语文 数学 外语 下面显示一个月,日, 年选择框: January February March April May June July August September October November December 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 <名前="日付_年" を選択> 2004 CopyRight(C) By XiaoJun, Li 2004Áмϵ×÷Õß 例 3 いくつかのスマート モジュール内にある関数を使用し、同様の関数を大家が手動で実行でき、方法を使用して、大家が自分で去れます。 例4.模板制御(if / elseif / else/ endif ) ======================= =============================== example4.tpl ========== ============================================= < html> モール板内のフロー制御 {assign var="tbColor" value="#D4D0C8"} 色:{$tbColor} {section name=loop loop=$News} {if $tbColor == "#D4D0C8"} {assign var="tbColor" value="#EEEEEE"} {else $tbColor == "#EEEEEE"} {assign var="tbColor" value="#D4D0C8"} {/if} {$News[loop].newsID} {$News[loop].newsTitle}
======================================================= example4.php ======================================================= require_once ("./public/inc/F117_Smarty.php"); $smarty = new F117_Smarty; $smarty->template_dir = './templates/'; $smarty->compile_dir = './templates_c/'; $smarty->config_dir = './configs/'; $smarty->cache_dir = './cache/'; $smarty->caching = false; $array[]= array("newsID"=>"001", "newsTitle"=>"第1条新闻"); $array[]= array("newsID"=>"002", "newsTitle"=>"第2条新闻"); $array[]= array("newsID"=>"003", "newsTitle"=>"第3条新闻"); $array[]= array("newsID"=>"004", "newsTitle"=>"第4条新闻"); $array[]= array("newsID"=>"005", "newsTitle"=>"第5条新闻"); $array[]= array("newsID"=>"006", "newsTitle"=>"第6条新闻"); $array[]= array("newsID"=>"007", "newsTitle"=>"第7条新闻"); $array[]= array("newsID"=>"008", "newsTitle"=>"第8条新闻"); $smarty->assign("News", $array); $smarty->display("example4.tpl"); ?> smarty实例教程(4) ================================================== example4.php输出: ================================================== 模板中的流程控制 001 第1条新闻 002 第2条新闻 003 第3条新闻 004 第4条新闻 005 第5条新闻 006 第6条新闻 /tr> "} 🎜>背景色、{assign var="tbColor" value= "#D4D0C8"} は、例 3 のテンプレートの内部変数を設定する定義方法です。 テンプレートに組み込まれたフロー制御ステートメントを使用すると、プログラムの制御能力を向上させるために、大幅に改善される場合があります。次の例は、phpx.com の友人から尋ねられたもので、皆さんが学ぶための例としてここに載せておきます。 例 5: テンプレートの組み込みプロセス コントロールを使用する。複数のセルの内容を 1 行に出力するステートメント。つまり、視覚的にスマートなレコードごとに複数のレコードを出力します: ================= ======= ======================== example5.tpl ========== ======= ============================== 出力1つのライン&lt;/gt;&lt&gt;&lt; body&gt;
========================================= =========== example5.php ==================================================== require_once ("./public/inc/F117_Smarty.php"); $smarty = new F117_Smarty; $smarty->template_dir = './templates/'; $smarty->compile_dir = './templates_c/'; $smarty->config_dir = './configs/'; $smarty->cache_dir = './cache/'; $smarty->caching = false; $array[]= array("newsID"=>"001", "newsTitle"=>"第1条新闻"); $array[]= array("newsID"=>"002", "newsTitle"=>"第2条新闻"); $array[]= array("newsID"=>"003", "newsTitle"=>"第3条新闻"); $array[]= array("newsID"=>"004", "newsTitle"=>"第4条新闻"); $array[]= array("newsID"=>"005", "newsTitle"=>"第5条新闻"); $array[]= array("newsID"=>"006", "newsTitle"=>"第6条新闻"); $array[]= array("newsID"=>"007", "newsTitle"=>"第7条新闻"); $array[]= array("newsID"=>"008", "newsTitle"=>"第8条新闻"); $smarty->assign("News", $array); $smarty->display("example5.tpl"); ?> ================================================== example5.php输出内容: ================================================== 一行输出多条记录 001 第1条新闻 002 第2条新闻 003 第3条新闻 004 第4条新闻 005 第5条新闻 006 第6条新闻 007 第7条新闻 008 第8条新闻
説明: 最初の行が空白行を出力しないように最適化できた可能性があります。単純にしておく方が良いので、まず次のように説明します: {section name=loop loop=$News step=1} {if $smarty.section.loop.index % 4 == 0} > {$News[loop].newsTitle} {/section} {section}{/section} は、後で紹介するループ セクションを指します。次のセクションで詳細を説明します。主に次の文を見てみましょう。 {if $smarty.section.loop.index % 4 == 0} $smarty.section.loop は、セクション セグメントが$smarty インスタンスにはループ部分と呼ばれるセクションがあり、現在のループのインデックス値を表すインデックスと呼ばれる属性があります。 は 0 から始まり増加します。%4 の後の 0 と比較します。つまり、現在のインデックス値が 4 の倍数である場合、 を出力します。それ以外の場合は、次の部分を実行します。 プログラムに実装するのが非常に面倒な問題を簡単に解決します。 >
声明: この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。