ホームページ  >  記事  >  バックエンド開発  >  テンプレート エンジンのスマートな動作原理と使用例_PHP チュートリアル

テンプレート エンジンのスマートな動作原理と使用例_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:29:26955ブラウズ

テンプレート エンジンは、テンプレート ファイルとデータ コンテンツを結合するために使用されるプログラムで、ウェブサイトの開発を容易にし、コードの分離とメンテナンスに役立ちます。ワンストップで使用するには、テンプレートを理解してその動作原理を知ることが最善です。 。

テンプレート ファイルは通常、HTML xml js やその他の種類のファイルです。テンプレート エンジンを使用せずにデータを Web ページに表示したい場合は、php で HTML を出力する必要があります。データをテンプレート エンジン プログラムに渡し、どのテンプレート ファイルを使用するかを指示すると、自然にデータとページが結合され、それを返すか出力します。テンプレートには少なくとも次の機能があります。 1. データを提供する機能。テンプレートエンジンに。 2. テンプレートの機能を指定します。 3. 結果を出力する機能。一般に、プログラマがテンプレート エンジンを使いやすくするために、開発者はその機能をある程度までカプセル化し、インスタンス化した後、オブジェクトを取得します。つまり、オブジェクトにはテンプレート エンジンのオブジェクトが含まれます。プロパティとメソッド。smarty オブジェクトのプロパティとメソッドは、smarty マニュアルに記載されています。まず、そのメソッドについて説明します。データをテンプレートに送信するためのメソッドです。テンプレート ファイルを指定するための個別のメソッドはなく、出力メソッドに統合されています。表示、直接出力、およびマージされた HTML コードを返すフェッチの 2 つの出力メソッドがあります。出力には、データを指定するため、主に assign を使用します。表示はさまざまです。それは数量である場合もあれば、配列数量である場合もあります。さまざまな状況でそれを Smarty に正しく送信する方法は、送信後にどのように表示するかが問題です。また、smarty エンジンが使用する解釈方法は、まず HTML ファイルを php ファイルに変換し、次にさまざまな値を代入し、この php ファイルを実行するという、さまざまなデータ形式に対応する固定の記述方法を必要とします。この書き込み方法を使用して、テンプレート ファイルに対応するマークを作成するには、smarty がデフォルトで使用するテンプレート タグは {} のペアです。たとえば、{$a} は php の echo $a に相当します。対応する代入処理を持たせるには、 $smarty->assign("a", "value"); 値を代入する数量が複数ある場合、Smarty はこれを 1 つずつ記述するのが非常に面倒になります。たとえば、データベースから記事を読み込むと、ページに表示される内容は、タイトル、内容、著者のデータ構造になります

コードをコピーします コードは次のとおりです:

array([id]=>1,['title']=>"title",…);

テンプレートには、

などの対応するタグがいくつか必要です。

コードをコピーします コードは次のとおりです:

{$title}


{$content}

値を一つずつ代入するのは面倒すぎます。 assign メソッドは配列、$rows = データベースから読み取ったデータの直接代入をサポートしています。

$smarty->assign($rows);smarty はデータ インデックスを取得し、値を 1 つずつ自動的に割り当てます。ただし、現時点では変数の競合を避けるために、値を直接割り当てることを希望します。たとえば、配列の形式です

コードをコピーします コードは次のとおりです:
$rows = データベースから読み取られたデータ、
$smarty->assign("rows",$rows);

現時点でテンプレート内のタグが {$rows} の場合、PHP の直接の echo 配列と同様に、出力時に配列のみを確認できます。PHP での特定の量の出力は echo $rows['title']; です。 Smarty は、記号はピリオド {$rows.title} であると規定しており、この点では

に似ています

コードをコピーします コードは次のとおりです:
echo $rows['title']

各テンプレートには、対応する記述ルールがあります。次に、mysql が 10 個のデータを返し、それらのインデックスがまったく同じである必要があると仮定します。プログラミングのアイデアは、結果を見つけるプロセスを知っていると仮定すると、次のようになります

。 コードのコピー

コードは次のとおりです。 li> ;

< ;li>4444
これが出力を次のようにしたい場合

まず第一に、これらは複数の量であり、もちろん配列を使用します




コードをコピーします
コードは次のとおりです:

$list=array();

while($rows=data){

$list[]=$rows;

}

$smarty-> ;assign(" リスト",$list);

最初にデータを配列に入れて、それを一度にsmartyに渡します。このようにして、リスト変数に2次元配列が含まれる場合、最善の方法は、すべてのデータを表示することです。これはループ出力です。Smarty はループ マーカー、セクション、foreach も提供します。

セクションタグの形式

コードをコピーします コードは次のとおりです:
{セクション名=このループの名前ループ=データボリュームの名前}
...
{/セクション}

{セクション名=i ループ=$list}

  • {$list[i].title}

  • {/section}

    上記のコードは for ループに非常によく似ていますが、ここでの i は for ループの $i ではなく、$list [ループ名] という書き込みメソッドは、先ほど述べたように、配列のたびに、$list は 2 次元配列ですが、$list[i] は配列を取得します。

    もう 1 つの書き方は foreach です。その構文は次のとおりです。

    コードをコピーします コードは次のとおりです:
    {foreach key=index item=value from=assignment variable}

    {$key}:{$item}

    {/foreach}

    {foreach item=v from=$list}

  • {$v.title}
  • {/foreach}


    ループリスト変数の各値をvに代入し、変数vから表示するインデックスを指定します。ループタグに加えて、インクルードファイル、条件判断、 Web ページのヘッダーなどの HTML ファイルをインクルードできないことはわかっていますが、smarty は、PHP などのファイルをインクルードできる {include} タグを提供しています (例: {include file="file path"})。このタグの形式は固定されています。 、このパスはテンプレートエンジン内にある必要があります。指定されたパスの下では、条件判定の構文はPHPの条件判定と同じです。

    コードをコピーします コードは次のとおりです:
    {if 変数 == 値または数量}
    trueの場合に表示される値
    {else}
    falseの場合に表示される値
    { /if}


    else を記述せず、true の場合にのみコンテンツを表示することもできます。たとえば、ログイン前に Web ページにログイン ポートがあり、ログイン後はフォームが表示されます。例: $username のように、ユーザー情報がテンプレートに割り当てられているとします。ユーザーがログインしていない場合、このボリュームは空になります。このように書くことができます

    コードをコピー コードは次のとおりです:
    {if $username !=""}
    ようこそ{$username}
    {else}
    まずログインしてください
    {/if}


    この変数をphpで用意してsmartyに代入するだけで済みます。これらのタグに加えて、他のタグについても自分でマニュアルを参照できます。 2 つ目は変数レギュレーターです。多くの場合、データベースから取得したデータは、出力する前に多少の処理が必要になります。たとえば、日付形式では、出力内容の改行のみが表示されます。
    になった場合のみ、対応する外観をページに表示できます。このとき、形式は次のとおりです。

    コードをコピーします

    コードは次のとおりです:{出力する変数名:パラメータ}

    コンテンツ部分がすべて
    で改行表示されている場合は以下のように書くだけです

    コードをコピーします

    コードは次のとおりです:{$content|nl2br}

    マニュアルなどで date_format を使用して日付をフォーマットできます

    コードをコピーします

    コードは次のとおりです:index.php:
    $smarty = 新しい Smarty;
    $smarty->assign('yesterday', strtotime('-1 day'));
    $smarty->display('index.tpl');

    index.tpl:

    {$smarty.now|date_format}

    {$smarty.now|date_format:"%A, %B %e, %Y"}

    {$smarty.now|date_format:"%H:%M:%S" }

    {$yesterday|date_format}

    {$yesterday|date_format:"%A, %B %e, %Y"}
    {$yesterday|date_format:"%H:%M:%S"}

    出力:

    2001年2月6日

    2001年2月6日火曜日

    14:33:00

    2001年2月5日

    2001年2月5日月曜日
    14:33:00



    それが機能しない場合は、php を使用して処理し、値を割り当てることができます。

    以下に設定を記述します

    コードをコピーします

    コードは次のとおりです:

    define("ROOT",str_replace('\','/',dirname(__FILE__)).'/');//ルートパスを定義します
    //smartyクラスをロードします
    ROOTが必要です。 ' lib/smarty.class.php';
    $samrty = new Smarty();//smarty クラスをインスタンス化します
    //各種ディレクトリを設定します
    $smarty ->setTemplateDir(ROOT.'templates/')
    -> ; setCompileDir(ROOT.'templates_c')
    - > gt;caching = false;//キャッシュを有効にするかどうか
    $smarty->left_delimiter = '<{';//キャッシュを無効にする左右を設定JS CSS などとの競合
    $smarty->right_delimiter = '}> ;';
    ?>



    http://www.bkjia.com/PHPjc/776460.html

    www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/776460.html技術記事テンプレート エンジンは、テンプレート ファイルとデータ コンテンツを結合するために使用されるプログラムです。これにより、Web サイトの開発が容易になり、コードの分離とメンテナンスが容易になります。テンプレートを理解するには、その仕組みを知ることが最適です...
    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。