ホームページ  >  記事  >  バックエンド開発  >  初心者のための Smarty 入門 PHP_PHP チュートリアル

初心者のための Smarty 入門 PHP_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:58:041752ブラウズ

テンプレート エンジンに触れ始めたばかりの PHP デザイナーは、Smarty と聞くと難しく感じるでしょう。実際、著者も例外ではなく、あえて触れません。しかしその後、XOOPS のプログラム アーキテクチャを分析したところ、Smarty は実際には難しくないことがわかり始めました。 Smarty の基本的なスキルをマスターしていれば、一般的なアプリケーションには十分です。もちろん、基礎をしっかりと築くことができれば、その後の高度な応用について心配する必要はありません。

この記事の主な目的は、公式の使用説明書に完全に記載されている Smarty の使用法を掘り下げることではありません。著者は、Smarty を理解したいのに理解できない友人がそこからインスピレーションを得られるように、自身の使用体験の一部だけを書き留めています。この記事の内容はそれほど深いものではないため、Smarty の使い方を知っている友人にとっては、少し簡単だと感じるかもしれません。

この記事は 3 回目の改訂であり、さらに情報を追加したいと思っていますが、時間の都合上、Smarty の高度なスキルの多くを十分に学習していないため、あえて紹介しません。この記事は、Smarty を学びたいほとんどの初心者を満足させることができるはずです。もちろん、この記事に誤りがある場合はお知らせください。著者は次回の改訂でそれらを修正します。

Smarty の紹介

テンプレート エンジンとは何ですか?

いつからか、HTML にサーバー スクリプトを埋め込むことに不満を感じる人が現れました。ただし、Microsoft の ASP であれ、オープンソースの PHP であれ、それらはすべてサーバー スクリプトが組み込まれた Web サーバーサイド言語です。そこで、プログラムのアプリケーションロジック(または業務アプリケーションのロジック)とWebページのプレゼンテーション(レイアウト)のロジックを分離できれば良いのではないかと考える人もいるのでは?

実際、この問題は長い間存在していました。インタラクティブな Web ページが普及したとき、ASP と PHP のユーザーは両方ともプログラム開発者であり、ビジュアル デザイナーでもありました。しかし、通常、これらのユーザーはプログラミングが得意か芸術が得意で、その両方を同時に処理しようとすると、多くの脳細胞を失うことになります...

そこで、テンプレート エンジンが登場しました。テンプレート エンジンの目的は、上記の論理的分離の機能を実現することです。これにより、プログラム開発者はデータ制御や機能の実現に集中できる一方、ビジュアルデザイナーは Web ページのレイアウトに集中して、Web ページをよりプロフェッショナルに見せることができます。したがって、テンプレート エンジンは企業の Web サイト開発チームによる使用に適しており、誰もが専門知識を活用できます。

筆者がこれまで触れてきたテンプレートエンジンは、データの表現方法により、プログラムで処理する必要があるテンプレートエンジンと、プログラムで完全に決定されるテンプレートエンジンの2種類に大別されます。テンプレート自体。

プログラムで処理する必要があるテンプレート エンジンでは、プログラム開発者は変数のプレゼンテーション ロジックを担当する必要があります。つまり、変数の内容をテンプレートに出力する前に処理する必要があります。課題の仕事。言い換えれば、プログラム開発者は変数の外観を決定するためにさらに多くのプログラムを作成する必要があります。テンプレート エンジンはテンプレート自体によって完全に決定され、変数をテンプレートに直接割り当てることができるため、ビジュアル デザイナーはテンプレートの設計時に変数がどのように表示されるかを決定できます。したがって、制御変数の提示を容易にするために、独自のテンプレート プログラム構文の別のセット (Smarty など) が存在する場合があります。ただし、このように、ビジュアル デザイナーはテンプレート言語の使用方法も学ぶ必要があります。

テンプレートエンジンの動作原理 まず、以下の動作図を見てみましょう:

一般的なテンプレートエンジン(PHPLibなど)は、テンプレートオブジェクトを作成する際に解析対象のテンプレートを取得し、変数と変数を挿入します。 use parse() このメソッドはテンプレートを解析し、最終的に Web ページを出力します。

Smarty ユーザーの場合、プログラムで解析アクションを実行する必要はなく、Smarty が自動的に実行します。さらに、コンパイルされた Web ページのテンプレートが変更されていない場合、Smarty はコンパイル アクションを自動的にスキップし、コンパイルされた Web ページを直接実行してコンパイル時間を節約します。

Smarty のいくつかの概念を使用する

一般的なテンプレート エンジンでは、いわゆるブロックの概念はおそらく次のようになります:

Region content


これらのブロックのほとんどは、PHP プログラムでの表示ステータスを制御するために if または for を使用しますが、テンプレートは 1 つだけ必要です。表示方法が異なるテンプレートを使用するには、PHP プログラムを再度変更する必要があります。

Smarty では、すべてが変数に基づいており、すべてのプレゼンテーション ロジックはテンプレートによって制御されます。 Smarty には独自のテンプレート言語があるため、ブロックを表示する必要があるか繰り返す必要があるかに関係なく、ブロックは Smarty のテンプレート構文 (if、foreach、section) と変数コンテンツを使用して表示されます。このように、テンプレートが少し複雑になったように感じますが、きちんと計画を立てれば、PHP プログラムを 1 行も変更する必要がないという利点があります。

上記の説明から、Smarty を使用する場合は、プログラム アプリケーション ロジックと Web ページ レンダリング ロジックを明確に分離するという 1 つの原則を習得する必要があることがわかります。つまり、PHP プログラム内に HTML コードが多すぎてはなりません。プログラムでは、どの変数をテンプレートに挿入するかを決定するだけでよく、これらの変数をどのように表示するか (またはまったく表示しないことも) はテンプレートに決定させます。

Smartyの基本

Smartyのインストール

まず、プログラムを配置する場所を決めます。

Windows では、「d:appservwebdemo」のような場所がある場合があります。

Linux では、場所は「/home/jaceju/public_html/」のようになります。

Smarty の公式 Web サイトにアクセスして、最新の Smarty パッケージをダウンロードします: http://smarty.php.net。

Smarty 2.6.0 のロックを解除すると、libs フォルダーを含む多くのファイルが表示されます。 libs には 3 つの class.php ファイル + 1 つの debug.tpl + 1 つのプラグイン フォルダー + 1 つのコア フォルダーがあるはずです。次に、libs をプログラムのメイン フォルダーに直接コピーし、その名前を class に変更します。それだけです?それは正しい!このインストール方法は比較的簡単で、通常、独自のホストを持たないユーザーに適しています。

なぜ Smarty 公式マニュアルではより複雑なインストール方法が紹介されているのでしょうか?基本的に、これは公式の方法に従ってインストールされ、ホスト上に 1 回だけインストールされ、その後、Smarty のコピーを繰り返しインストールすることなく、さまざまなプログラムを開発する際に直接参照できるようにホスト下のすべての設計者に提供されます。著者が提供する方法は、プログラムをあちこちに移動したいプログラム開発者に適しているため、ホストに Smarty がインストールされているかどうかを心配する必要はありません。

プログラムフォルダーの設定

Windows に Appserv をインストールする著者を例に挙げます。プログラムのメインフォルダーは「d:appservwebdemo」です。 Smarty をインストールした後、メイン フォルダーの下に次のようなフォルダーを作成します:

Linux では、templates_c のアクセス許可を 777 に変更することを忘れないでください。 Windows では、読み取り専用としてキャンセルします。

Smarty で作成した最初の小さなプログラム

まず、次のファイルに main.php という名前を付けて、メイン フォルダーに配置してください。 class/Smarty.class.php";
define(@#__SITE_ROOT@#, @#d:/appserv/web/demo@#); // 末尾にスラッシュはありません
$tpl = new Smarty( ;
$tpl ->cache_dir = __SITE_ROOT . "/cache/";
$tpl-<{@#;
$tpl->@#;



上記のように設定する目的は、プログラムを他の場所に移植する必要がある場合に、__SITE_ROOT を変更するだけです。 (これは XOOPS の参照用です)

Smarty のテンプレート パスが設定された後、プログラムはこのパスに従ってすべてのテンプレートの相対位置を取得します (この例では @#d:/appserv/web/demo/templates です) /@#) 。次に、display() Smarty メソッドを使用してテンプレートを表示します。

次に、test.htm をテンプレート フォルダーの下に配置します: (拡張子の名前は問題ありませんが、ビジュアル デザイナーが開発するのに便利です。私は今でも .htm をメインの拡張子として使用しています。)

templates/test.htm:

<{$title}>
<{$content}>



ここで、上記のテンプレートを表示し、ページのタイトル ($title) とコンテンツ ($content) を変更したいと思います。次のファイルに content test.php という名前を付け、メイン フォルダーに配置してください:

test.php :

< ;?php
require "main.php";
$tpl->assign("title", "テスト用 Web ページ タイトル");
$tpl->assign("content", "テスト Web のコンテンツpage used");
// 上記の 2 行は次の行でも置き換えることができます
// $tpl->assign(array("title" => "テストに使用される Web ページのタイトル", " content" => ; "テスト用 Web ページのコンテンツ"));
$tpl->display(@#test.htm@#);
?>




ブラウザを開いて http:/ と入力してください/localhost/demo /test.php 試してみてください (URL は環境に応じて決定します)、次の画面が表示されるはずです:



templates_c に移動すると、奇妙なフォルダー (%%179) が表示されます。その下には奇妙なフォルダー (%%1798044067) があり、その中に次のファイルがあります:

templates_c/%%179/%%1798044067/test.htm.php:




<?php echo $this->_tpl_vars[@#title@#]; ?>

のファイル。次回同じコンテンツが読み取られると、Smarty はこのファイルを直接取得して実行します。

最後に、Smarty プログラムの作成手順全体を整理しましょう:

ステップ 1. Smarty テンプレート エンジンをロードします。

ステップ 2. Smarty オブジェクトを作成します。

ステップ 3. Smarty オブジェクトのパラメータを設定します。

ステップ 4. プログラム内の変数を処理した後、Smarty の assign メソッドを使用して変数をテンプレートに配置します。

ステップ5. Smartyの表示メソッドを使用してWebページを表示します。

プログラム構造を調整する方法

Smarty に必要なフォルダー (class、configs、templates、templates_c) に加えて、includes と modules という 2 つのフォルダーがあることを上で見てきました。実際、これは作者が XOOPS のアーキテクチャを模倣して構築したものです。XOOPS は、作者がこれまで触れてきたプログラムの中で Smarty テンプレート エンジンを使用する数少ない Web サイト構築プログラムの 1 つであるためです。いわゆるスイカは大きな限界に近いものですが、作者のプログラム構造は XOOPS ほど強力ではありませんが、少なくとも他の人から見れば XOOPS の支持を受けています。

includes このフォルダーは主に、次のように main.php に導入できるように、いくつかの関数ファイルと SQL ファイルを配置するために使用されます:

main.php:


include "class/Smarty . class.php";
define(@#__SITE_ROOT@#, @#d:/appserv/web/demo@#); // 末尾にスラッシュはありません
// main.php の位置に基づきます
require_once "includes /functions.php";
require_once "includes/include.php";
$tpl = new Smarty();
$tpl->template_dir = __SITE_ROOT . . "/templates_c/";
$tpl->config_dir = __SITE_ROOT . "/configs/";
$tpl->cache_dir =
$tpl->left_delimiter = @# }>@#;
?>




modules このフォルダーはプログラムモジュールを配置するために使用されるため、プログラムがあちこちに散らばることがなく、全体の構造が一目瞭然です。

上で main.php についても触れましたが、これはプログラム全体の主要なコアであり、定数の定義、外部プログラムのロード、共有変数の作成など、すべてはここから始まります。したがって、後続のすべてのモジュールには、このファイルをインクルードするだけで済みます。したがって、プログラムを計画する際には、main.php に何を配置するかを慎重に検討する必要があります。もちろん、include または require 命令を使用して各リンクを明確に分離するのが最善です。



前のセクションで説明した Smarty プログラムの 5 つのステップのうち、main.php は最初の 3 ステップを完了するのに役立ち、後続のモジュール プログラムは最後の 2 ステップを実行するだけで済みます。

変数から始める

変数の使用方法

前の章の例から、変数をラップするために 2 つのマーク記号 <{ と }> を使用していることが明確にわかります。デフォルトのマーキング記号は { と } ですが、中国語のコーディングと JavaScript のために、作成者は依然として XOOPS を模倣してマーキング記号を置き換えています。変数の命名方法はPHPと全く同じで、先頭に$フォントも付いています(通常のテンプレートエンジンとは異なります)。マーキング記号は PHP の



に似ているため (実際にはこれに置き換えられます)、次のテンプレート変数の記述方法が可能です。 {$var}>

2. <{ $var }> -- 変数と変数の間にスペースがあります --> <{$var

}> ; < !-- 開始識別子と終了識別子が同じ行にありません --> Smarty では、変数はデフォルトでグローバルなので、指定する必要があるのは 1 回だけです。 2 回以上指定した場合、変数の内容は最後に指定した内容に基づきます。メイン テンプレートに外部サブテンプレートをロードした場合でも、サブテンプレート内の同じ変数も置き換えられるため、サブテンプレートに対して別の解析アクションを実行する必要はありません。

PHP プログラムでは、Smarty の assign を使用してテンプレートに変数を配置します。 assignの使い方は公式マニュアルにたくさん書かれており、使い方は前節の例の通りです。ただし、ブロックを繰り返す場合は、変数をテンプレートに割り当てる前に変数の操作を行う必要があります。これについては次の章で説明します。

変数を変更する

Smarty 変数の外観はテンプレートによって決定されると上で説明しました。そのため、Smarty には変数を変更するための関数が多数用意されています。使用する方法は次のとおりです:

<{変数|変更された関数}>

<{変数|変更された関数: "パラメータ(不要) )、関数に応じて)"}>
例は次のとおりです:

<{$var|nl2br}> の改行文字を置き換えます では、なぜ変数がどのように表示されるかをテンプレートに決定させるのでしょうか?まず、以下の HTML をご覧ください。これはショッピング カートのチェックアウト画面の一部です。



合計金額: 21,000 元
一般的なテンプレート エンジンのテンプレートは次のように記述できます:



合計金額: {format_total} 元
PHP プログラムは次のように記述する必要があります:


$total = 21000 ;
$ tpl->assign("total", $total);
$tpl->assign("format_total", number_format($total));




;このように書かれています: (Smarty の公式 Web サイトからnumber_format 変更関数をダウンロードしてください)

: < {$total|number_format:""}> Yuan
Smarty の PHP プログラムで次のように記述します。


$tpl->assign("total", $ total) ;
?>




したがって、Smarty では変数を 1 回指定するだけで、残りはテンプレートに決定させます。これわかりますか?これは、変数がどのように表示されるかをテンプレートに独自に決定させることの利点です。

テンプレートのコンテンツを制御する

ブロックを複製する

Smarty テンプレートでは、ブロックを繰り返す方法が 2 つあります: foreach とセクションです。プログラムでは、配列の配列を含めることができる配列を割り当てる必要があります。次の例のように:

まず、PHP プログラムがどのように記述されているかを見てみましょう:

test2.php:


require "main.php";
$array1 = array(1 =>) ; "アップル"、2 => "バナナ"、4 => "グアバ"); array(
array("index1" => "data1-1", "index2" => "data1-2", "index3" => "data1-3"),
array("index1" => ; "データ 2-1"、"インデックス 2" => "データ 2-2"、"インデックス 3" => "データ 2-3")、
array("データ 3-1"、"インデックス 2") => "データ 3-2", "インデックス 3" => "データ 3-3"),
array("インデックス 1" => "データ 4-1", "インデックス 2" => "データ 4-2", " Index3" => "data4-3"),
array("index1" => "data5-1", "index2" => "data5-2", "index3" => "data5-3" ));
$tpl->assign("array2", $array2);




;
$tpl->display("test2.htm");

templates/test2.htm:

テスト繰り返しブロック
 
<{foreach item=item1 from=$array1}> }>
<{/foreach}>
セクションを使用して array1 を表示します
<{$array1[sec1]}>セクション}>
foreach を使用して array2 を表示します
<{foreach item=index2 from=$index2}> >: <{$item2}>
<{/foreach}>
<{/foreach}>
index1: <{$array2[sec2].index1}>
index2:<{$array2[sec2].index2}> ;{/section}>










は foreach またはセクションです。それでは、この 2 つの違いは何でしょうか?

最初の違いは明らかです。つまり、foreach は入れ子になった処理メソッドを使用して、割り当てた 2 レベルの配列変数を提示しますが、セクションでは「メイン配列 [ループ名].サブ配列インデックス」を使用して配列全体を割り当てます。レンダリングされます。 Smarty のテンプレートの foreach は PHP の foreach と同じであり、セクションは上記の配列変数を処理するために Smarty によって開発された記述であることがわかります。もちろん、セクションの機能はそれ以上です。次のセクションで説明するネストされたデータの表示に加えて、公式マニュアルにはセクションのいくつかの応用例も記載されています。

ただし、セクションにスローされる配列インデックスは 0 から始まる正の整数、つまり 0、1、2、3、... である必要があることに注意してください。配列のインデックスが 0 から始まる正の整数でない場合は、代わりに foreach を使用してデータを表示する必要があります。公式フォーラムでこのディスカッションを参照できます。このディスカッションでは、セクションと foreach の使用法について説明しています。

ネストされたデータのプレゼンテーション

おそらく、テンプレート エンジンで最も厄介なことは、多くの有名なテンプレート エンジンがこの点を特に強調していることですが、Smarty にとってこれは簡単なことです。

最も一般的なネストされた情報は、ディスカッション プログラムのディスカッション トピック領域です。提示される結果は次のとおりであるとします。

アナウンスエリア

ステーションアナウンス

文学エリア

良い本の紹介

共有記事

コンピュータエリア

ハードウェア周辺機器

ソフトウェアディスカッション

プログラムまず例として静的な情報を使用します:

test3.php:


require "main.php";
$forum = array(
array("category_id" => 1, "category_name) " => "お知らせ地区",
"トピック" => array(
array("topic_id" => 1, "topic_name" => "サイトお知らせ")
)
),
array("category_id" " => 2, "category_name" => "文学セクション",
"topic" => array(
array("topic_id" => 2, "topic_name" => "良書の紹介") ,
array("topic_id" > > array(
array("topic_id" => 4, "topic_name" => "ハードウェア周辺機器"),
array("topic_id" => 5, "topic_name" = > "ソフトウェア ディスカッション")
)
)
$tpl->assign("forum", $forum);
?


テンプレートは次のように記述されます:

& lt; html & gt;
& lt; ネスト循環テスト/table & lt;/head & lt &
& ; gt; テーブル幅 ="200" border="0" align="center" cellpadding="0"> <{セクション名=sec1 ループ=$forum}>
<
<{セクション名=sec2 ループ=$forum[sec1].topic}>
="164"<{$forum[sec1].topic[sec2].topic_name}>
<{/section}> }>






実行結果は作者が示した例と同じです。

したがって、プログラムでは、繰り返しの値を層ごとに配列に詰め込む方法を見つけて、<{第 1 レベルの配列 [ループ 1]、第 2 レベルの配列 [ループ 2] を使用するだけです。 .第 3 レベルの配列 [ループ 3]. ....配列インデックス}> このようにして、ネストされた各ループの値を表示します。どのような方法を使用すればよいでしょうか?次のセクションでデータベースを使用するときにもう一度説明します。

データベース内のデータを変換します

上記ではネストされたループを表示する方法を説明しましたが、実際には、適用するときにデータがデータベースから取得される可能性があるため、データベース内のデータを次のように変更する方法を見つける必要があります。上記の複数の配列形式。ここでは、DB カテゴリを使用してデータベース内のデータをキャプチャします。好みの方法を使用できます。

PHP プログラムを変更するだけで、テンプレートは上記のままです (これはテンプレート エンジンの利点です ~) $db オブジェクトは main.php に作成されているものと想定されており、キャプチャされたデータは上の例。

test3.php:


require "main.php";
// まず最初のレベルの配列を作成します
$category = array(); #CATEGORY@#);
if (!$db->query(@#CATEGORY@#)) die($db->e​​rror());
// ループの最初の層のデータをキャプチャします
while ($item_category = $db->fetchAssoc(@#CATEGORY@#))
{
// 第 2 レベルの配列を作成します
$topic = array();
$db->setSQL(sprintf($SQL2, $item_category[@#category_id@#]), @#TOPIC@#);
if (!$db->query(@#TOPIC@#)) die($db->e​​rror()); / 第 2 層のループのデータを取得します
while ($item_topic = $db->fetchAssoc(@#TOPIC@#))
{
// 取得したデータを第 2 層の配列にプッシュします
array_push( $topic, $ item_topic);
}
// 第 1 レベルの配列によってキャプチャされたデータのメンバーとして第 2 レベルの配列を指定します
$item_category[@#topic@#] = $topic
/ / 第 1 レベルのデータをプッシュします最初のレベルの配列
array_push($category, $item_category)
}
$tpl->assign("forum", $category);
$tpl->display( "test3.htm"); ;




データベースからデータを取得すると、そのデータを含む配列が得られます。 while ステートメントと array_push 関数を通じて、データベース内のデータを 1 つずつ配列にプッシュします。ループの 1 つのレイヤーのみを使用する場合は、ループの 2 番目のレイヤー (赤い部分) を削除するだけです。

コンテンツを表示するかどうかを決定する

コンテンツを表示するかどうかを決定するには、if 構文を使用して選択できます。たとえば、ユーザーがログインしている場合、テンプレートは次のように記述できます:

<{if $is_login == true}>
ユーザー操作メニューを表示します
<{else}>アカウントとパスワードのフォーム
<{/if}>

「==」記号の両側に少なくとも 1 つのスペース文字が必要であることに注意してください。そうしないと、Smarty はそれを解析できません。

if 構文の一般的な適用については公式の手順を参照できるため、ここでは詳しく紹介しません。しかし、著者は興味深いアプリケーションを見つけました。プログラムで次のようなテーブルが生成されるのをよく見かけます: (数字はデータセットの順序を表します)

1 2

3 4

5 6

7 8

著者はこれを「水平繰り返しテーブル」と呼んでいます。その特性は、前のセクションで見た従来の垂直方向の繰り返しとは異なり、すべて上から下にあり、1 つの列に 1 つのデータのみが含まれています。水平方向に繰り返すテーブルでは、1 つの列に n 個のデータを水平方向に生成し、サイクル全体が終了するまで次の列に変更できます。この機能を実現する最も簡単な方法は、section と if を一致させるだけです。

次の例を見てみましょう:

test4.php:


require "main.php";
$my_array = array(
array("value" => "0" ) 、
array("値" => "1")、
array("値" => "2")、
array("値" => "3")、
array("値" = > "4")、
配列("値" => "5")、
配列("値" => "6")、
配列("値" => "7")、
array("value" => "8"),
array("value" => "9"));
$tpl->assign("my_array", $my_array); ; display(@#test4.htm@#);

templates/test4.htm:

テスト
{セクション名=sec1 ループ=$my_array}>

<{if $smarty.section.sec1. 2}>

<{$my_array[sec1].value}>
body>




重要なポイントは、Smarty 変数 $smarty.section.sec1.rownum です。そのため、rownum は 1 から始まります。 2 すべての分割が完了したら、 を出力してテーブルの列を変更します (注意! は前にあり、 は後ろにあります。したがって、数値 2 は、列に表示するデータ項目の数です。これを使用して、他のさまざまな表示方法を変更できます。

外部コンテンツをロードする

2 つの Smarty テンプレート構文 include_php と include をそれぞれ使用して、PHP プログラム コードまたは別のサブテンプレートをテンプレートにロードできます。 include_php は作成者によってほとんど使用されず、使用方法は次のとおりです。公式マニュアルはこちら ナレーションは不要です。

include を使用すると、サブテンプレートを事前にロードしたり、サブテンプレートを動的にロードしたりできます。プリロードは通常、共通のファイル ヘッダーと著作権宣言がある場合に使用されます。動的ロードは、Winamp のような置換可能なスキンをさらに実現するために統合フレーム ページで使用できます。もちろん、状況に応じてこれら 2 つを混合することもできます。

次の例を見てみましょう:

test5.php:


require "main.php";
$tpl->assign("title", "Include Test");
$tpl->assign("content", "これはテンプレート 2 の変数です");
$tpl->assign("dyn_page", "test5_3.htm"); @ #test5_1.htm@#);
?> equiv= "Content-Type" content="text/html; charset=big5">
<{$title}>

{include file=$dyn_page}> ="test5_4.htm"custom_var="カスタム変数の内容"& gt; & & lt;/body & gt;




テンプレート 2 は次のとおりです。 test5_2.htm:

& lt; {$ Content} & gt; 以下の通り:

templates/test5_3.htm:

これはテンプレート 3 の内容です
テンプレート 4 は次のように記述されます:

templates/test5_4。 htm:

<{$custom_var}>
ここでいくつかの重要な点に注意してください: 1. テンプレートの場所は、以前に定義された template_dir に基づきます。 2. 含まれるすべてのサブテンプレートでは、その変数も解釈されます。 。 ; 3. include では、上記のテンプレート 4 と同様に、「変数名 = 変数の内容」を使用して、インポートされたテンプレートに含まれる変数を指定できます。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/317633.html技術記事テンプレート エンジンを初めて使用する PHP デザイナーは、Smarty について聞くと難しく感じるでしょう。実際、著者も例外ではなく、あえて触れません。しかし、後で XOOPS のプログラム アーキテクチャを分析すると、...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。