テンプレート エンジンを初めて使用する 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など)は、テンプレートオブジェクトを作成する際に、解析対象のテンプレートを取得し、 parse() メソッドを使用してテンプレートを解析し、最終的に Web ページを出力します。
Smarty ユーザーの場合、プログラム内で解析アクションを実行する必要はなく、Smarty が自動的に実行します。さらに、コンパイルされた Web ページのテンプレートが変更されていない場合、Smarty はコンパイル アクションを自動的にスキップし、コンパイルされた Web ページを直接実行してコンパイル時間を節約します。
Smartyのいくつかの概念を使用すると 一般的なテンプレートエンジンでは、いわゆるブロックの概念はおそらく次のようになります:
。領域内容
これらのブロックのほとんどは、PHP プログラムでの表示ステータスを制御するために if または for を使用しますが、テンプレートははるかに単純に見えます。別の表示方法に変更した場合は、PHP プログラムを再度変更する必要があります。
Smartyでは、すべてが変数に基づいており、すべてのプレゼンテーションロジックはテンプレートによって制御されます。 Smarty には独自のテンプレート言語があるため、ブロックを表示する必要があるか繰り返す必要があるかに関係なく、ブロックは Smarty のテンプレート構文 (if、foreach、section) と変数コンテンツを使用して表示されます。このようにテンプレートが少し複雑になったように感じますが、しっかり計画を立てればPHPプログラムは一行も変更する必要がないという利点があります。
上記の説明から、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という名前を付けて、メインフォルダに置いてください:
main.php:
< ;?php
include "class/Smarty.class.php";
define('__SITE_ROOT', 'd:/appserv/web/demo'); // 末尾にスラッシュはありません
$tpl = new Smarty();
$tpl-> ;template_dir = __SITE_ROOT . "/templates/";
$tpl->compile_dir = __SITE_c/";
$tpl->config_dir = "/configs/";
$tpl ->cache_dir = __SITE_ROOT . "/cache/";
$tpl->left_delimiter = '<{';
$tpl->right_delimiter = '}>';
?>
上記の方法に従いますこの設定では、プログラムを他の場所に移植する必要がある場合は、__SITE_ROOT を変更するだけです。 (これはXOOPSへの参照用です)
Smartyのテンプレートパスが設定されると、プログラムはこのパスに従ってすべてのテンプレートの相対位置を取得します(例では、'd:/appserv/web/demo/templates/) ')。次に、display() Smarty メソッドを使用してテンプレートを表示します。
次に、templatesフォルダーの下にtest.htmを置きます: (拡張子は何でも構いませんが、ビジュアルデザイナーが開発するのに便利なので、私は主に.htmを使用します。)
templates/test.htm :
<{$title}> < /title> <{$content}>
タイトル ($title) とコンテンツ ($content) を変更するには、次のファイル内容 test.php をメインフォルダーに配置します:
test.php:
Require "main.php" ;
$tpl->assign("title", "Web ページのタイトルのテスト");
$tpl->assign("content", "Testing web page content");
// 上記の 2 行は、代わりにこの行を使用することもできます
// $tpl->assign(array( "title" => "Web ページのタイトルをテスト中", "content" => "Web ページのコンテンツをテスト中"));
?>
お願いしますブラウザを開いて http://localhost/demo/test.php と入力して試してみます (URL は環境によって異なります)。次の画面が表示されます。
templates_c の一番下に移動し、奇妙なフォルダー (%%179) が表示され、もう一度クリックすると奇妙なフォルダー (%%1798044067) が表示され、その中に
templates_c/%%179/%%1798044067/test というファイルがあります。 htm.php:
_tpl_vars['title'] ?> _tpl_vars['content']; ?>
Smartyでコンパイルしたファイルです。次回同じコンテンツが読み取られると、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 の 1% にも劣りますが、少なくとも他の人から見た場合には 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/";
$tpl->compile_dir = __SITE_ROOT . "/ templates_c/ ";
$tpl->config_dir = __SITE_ROOT . "/configs/";
$tpl->cache_dir = __SITE_ROOT . "/cache/";
$tpl->left_delimiter = '<{';
$ tpl->right_delimiter = '}>';
?>
modules このフォルダーはプログラムモジュールを配置するために使用され、プログラムがあちこちに散在せず、全体の構造が一目瞭然になります。 。
上で main.php についても触れましたが、定数の定義、外部プログラムの読み込み、シェア変数の作成など、すべてはここから始まります。したがって、後続のすべてのモジュールには、このファイルをインクルードするだけで済みます。したがって、プログラムを計画する際には、main.php に何を配置するかを慎重に検討する必要があります。もちろん、各リンクを明確に分離するには、include または require 命令を使用するのが最善です。
前のセクションで説明した Smarty プログラムの 5 つのステップのうち、main.php は最初の 3 ステップを完了するのに役立ち、後続のモジュール プログラムは最後の 2 ステップを実行するだけで済みます。
変数から始めましょう
変数の使い方 前の章の例から、変数をラップするために 2 つのマーキング記号 <{ と }> を使用していることがわかります。デフォルトのマーキング記号は { と } ですが、中国語のコーディングと Javascript のために、作成者は依然として XOOPS を模倣してマーキング記号を置き換えています。変数の命名方法はPHPと全く同じで、先頭に$フォントも付いています(通常のテンプレートエンジンとは異なります)。識別子は PHP の に似ているため (実際にはこれに置き換えられます)、次のようなテンプレート変数の記述方法が可能です。
2. <{ $var }>
3. <{$var
}
Smarty では、変数はデフォルトでグローバルです。つまり、変数を指定する必要があるのは 1 回だけです。 2 回以上指定した場合、変数の内容は最後に指定した内容に基づきます。メイン テンプレートに外部サブテンプレートをロードした場合でも、サブテンプレート内の同じ変数も置き換えられるため、サブテンプレートに対して別の解析アクションを実行する必要はありません。
PHP プログラムでは、Smarty の assign を使用して変数をテンプレートに配置します。 assignの使い方は公式マニュアルにたくさん書かれており、使い方は前節の例の通りです。ただし、ブロックを繰り返す場合は、変数をテンプレートに割り当てる前に変数の操作を行う必要があります。これについては次の章で説明します。
変数を変更する Smarty変数の外観はテンプレートによって決定されると上で述べましたが、そのためSmartyは変数を変更するための関数を多数提供しています。使用する方法は次のとおりです:
<{変数|変更された関数}>
<{変数|変更された関数: "パラメータ(不要) )、関数に応じて)"}>
例は次のとおりです:
<{$var|nl2br}>
わかりました。では、なぜ変数がどのように表示されるかをテンプレートに決定させるのでしょうか?まず、以下の HTML をご覧ください。これはショッピング カートのチェックアウト画面の一部です。
総額: 21,000 元
一般的なテンプレートエンジンのテンプレートは次のように書くことができます:
->assign("total", $total);
$tpl->assign("format_total",number_format($total));
?>
そして、Smartyのテンプレートは次のように書くことができます: (number_formatの変更 Smarty公式サイトから機能をダウンロードしてください)
合計金額: <{$total|number_format:""}> 元
これを Smarty の PHP プログラムに書くだけです:
$total = 21000;
$tpl ->assign("total", $total);
?>
つまり、Smarty では変数を 1 回指定するだけで、残りはテンプレートに決定させます。これわかりますか?これは、変数がどのように表示されるかをテンプレートに独自に決定させることの利点です。
テンプレートのコンテンツを制御する
繰り返しブロック
Smartyテンプレートでは、ブロックを繰り返す方法がforeachとsectionの2つあります。プログラムでは、配列の配列を含めることができる配列を割り当てる必要があります。次の例のように:
まず PHP プログラムがどのように書かれているかを見てみましょう: test2.php: require "main.php";
$array1 = array(1 => " Apple", 2 => "パイナップル", 3 => "バナナ", 4 => "グアバ");
$tpl->assign("array1", $array1);
$array2 = array (
array("index1" => "data1-1", "index2" => "data1-2", "index3" => "data1-3"),
array("index1" => " data2-1", "index2" => "data2-2", "index3" => "data2-3"),
array("index1" => "data3-1", "index2" = >) ; "data3-2", "index3" => "data3-3"),
array("index1" => "data4-1", "index2" => "data4-2", "index3 " => "データ4-3"),
array("インデックス1" => "データ5-1", "インデックス2" => "データ5-2", "インデックス3" => "データ5-3") ) ;
.htm:
;/title>
< ;/head>
<br> foreach を使用して array1 を提示します<br> <{foreach item=item1 from=$array1}><br> <{$item1}> <br> <{/foreach }><br> セクションを使用して array1 を表示します<br> <{セクション名=sec1 ループ=$array1}><br> <{$array1[sec1]}>gt;<br/> ;<br/> foreach を使用して配列 2 を表示します<br/> <{foreach item =index2 from=$array2}><br> <{foreach key=key2 item=item2 from=$index2}><br> <{$key2}>: <{$item2}><br> <{/ foreach}><br> <{/foreach}><br> セクションを使用して array1 を表示します<br>インデックス 1: <{$array2[sec2].index1}><br> インデックス 2: <{$array2[sec2].index2}><br> インデックス 3: <{$array2[sec2].index3}><br> < {/section}><br> 上記の例を実行すると、foreach であってもセクションであっても 2 つの実行結果は同じであることがわかりました。 。それでは、この 2 つの違いは何でしょうか?
最初の違いは明らかです。つまり、foreach は入れ子になった処理メソッドを使用して、割り当てた 2 レベルの配列変数を提示しますが、section は「メイン配列 [ループ名].サブ配列インデックス」を使用して配列全体を変換します。レンダリングされます。 Smarty のテンプレートの foreach は PHP の foreach と同じであり、セクションは上記の配列変数を処理するために Smarty によって開発された記述であることがわかります。もちろん、セクションの機能はそれだけではありません。次のセクションで説明するネストされたデータの表示に加えて、公式マニュアルにはセクションの応用例もいくつか紹介されています。
ただし、sectionにスローされる配列インデックスは0から始まる正の整数、つまり0、1、2、3、...である必要があることに注意してください。配列インデックスが 0 から始まる正の整数でない場合は、代わりに foreach を使用してデータをレンダリングする必要があります。このディスカッションは、section と foreach の使用について説明している公式フォーラムで参照できます。
ネストされたデータのプレゼンテーション テンプレート エンジンで最も厄介なことは、おそらく多くの有名なテンプレート エンジンがこの点を特に強調しますが、これは Smarty にとっては簡単なことです。
最も一般的に見られる入れ子になった情報は、ディスカッション プログラムのディスカッション トピック領域です。提示する結果は次のとおりであるとします。
アナウンスエリア
サイトアナウンス
文学セクション
良書紹介
素晴らしい記事への感謝の共有
コンピュータセクション
ハードウェア周辺機器al
ソフトウェアの議論
でプログラムでは、まず静的な情報を例として使用します:
test3.php:
require "main.php";
$forum = array(
array("category_id" => 1, " category_name" => "お知らせエリア ",
"topic" => array(
array("topic_id" => 1, "topic_name" => "サイトお知らせ")
)
),
array(" category_id" =>2, " category_name" =>「文学セクション」,
"topic" =>array(
array("topic_id" =>2, "topic_name" =>「良書紹介」 ),
array("topic_id" => 3, "topic_name" => "素晴らしい記事への感謝の共有")
)
),
array("category_id" => 3, "category_name" => "コンピューター ゾーン",
"トピック" => )
)
);
/test3.htm:
ネストループテスト head>
border="0" align="center" cellpadding="3" cellpacing="0">
<{section name=sec1loop=$forum}>
<{$forum[sec1].category_name}> <{セクション名=sec2 ループ=$forum[sec1].topic}>
tr>
<{$forum[sec1].topic[sec2].topic_name}>< / td> <{/section}> <{/section}> 先ほどの例の通りです。 したがって、プログラムでは、繰り返しの値を層ごとに配列に詰め込む方法を見つけて、<{第 1 レベルの配列 [ループ 1]、第 2 レベルの配列 [ループ 2] を使用するだけです。 .第 3 レベルの配列 [ループ 3]. ....配列インデックス}> このようにして、ネストされた各ループの値を表示します。どのような方法を使用すればよいでしょうか?次のセクションでデータベースを使用するときにもう一度説明します。 データベース内のデータを変換する 上記ではネストされたループを表示する方法について説明しましたが、実際のアプリケーションではデータがデータベースから取得される可能性があるため、データベースのデータを上記の複数の配列形式に変換する方法を見つける必要があります。ここでは、DB カテゴリを使用してデータベース内のデータをキャプチャします。好みの方法を使用できます。 PHPプログラムを修正するだけで、テンプレートは上記のままです(これはテンプレートエンジンの恩恵ですね~)$dbオブジェクトはmain.phpに作成されているものとし、取得したデータは上の例。 test3.php: require "main.php"; // 最初に第1レベルの配列を作成します $category = array(); $db->setSQL($SQL1, ' CATEGORY '); if (!$db->query('CATEGORY')) die($db->error()); // ループ1層目のデータを取得します while ($item_category = $ db->fetchAssoc('CATEGORY')) { // 第2レベルの配列を作成します $topic = array(); $db->setSQL(sprintf($SQL2, $item_category['category_id'] ), 'TOPIC'); if (!$db->query('TOPIC')) die($db->error()); // 第二層ループのデータを取得します while ($ item_topic = $db->fetchAssoc('TOPIC')) { // フェッチしたデータを第 2 レベルの配列にプッシュします array_push($topic, $item_topic); } // 第 2 レベルの配列を入れますレイヤー配列は、第 1 レイヤー配列でキャプチャされたデータのメンバーとして指定されます $item_category['topic'] = $topic; // 第 1 レイヤーデータを第 1 レイヤー配列にプッシュします array_push( $category, $item_category ); } $tpl->assign("forum", $category); $tpl->display("test3.htm"); ?> データを取得した後、データベースから取得します、取得するのはデータを含む配列です。 while ステートメントと array_push 関数を通じて、データベース内のデータを 1 つずつ配列にプッシュします。単一のループ層のみを使用する場合は、2 番目のループ層 (赤い部分) を削除するだけです。 コンテンツを表示するかどうかを決定する コンテンツを表示するかどうかを決定するには、if構文を使用して選択できます。たとえば、ユーザーがログインしている場合、テンプレートは次のように記述できます: <{if $is_login == true}> ユーザー操作メニューを表示します <{else}> 入力を表示しますアカウントとパスワードの形式 <{/if}> 「==」記号の両側に少なくとも 1 つのスペース文字がなければならないことに注意してください。そうしないと、Smarty はそれを解析できません。 if構文の一般的な応用については、公式の使用説明書を参照していただければと思いますので、ここでは詳しく紹介しません。しかし、作者は興味深いアプリケーションを発見しました。プログラムで次のようなテーブルが生成されるのをよく見かけます: (数字はデータ セットの順序を表します) 作者はこれを「水平繰り返しテーブル」と呼んでいます。その特性は、前のセクションで見た従来の垂直方向の繰り返しとは異なり、すべて上から下にあり、1 つの列に 1 つのデータのみが含まれています。水平方向に繰り返すテーブルでは、1 つの列に n 個のデータを水平方向に生成し、サイクル全体が終了するまで次の列に変更できます。この機能を実現するには、section と if を組み合わせるのが最も簡単な方法です。 次の例を見てみましょう: test4.php: require "main.php"; $my_array = array( array("value" => "0") , array("value" => "1"), array("value" =>"2"), array("value" =>"3"), array("value" = > ; "4"), array("value" => "5"), array("value" => "6"), array("value" => "7"), array ("value" => "8"), array("value" => "9")); $tpl->assign("my_array", $my_array); $tpl-> display('test4.htm'); ?> テンプレートは次のように書きます: templates/test4.htm: 水平繰り返し表テスト< ;/ title> <{セクション名 =sec1 ループ=$my_array}> <{$my_array[sec1].value}> <{if $smarty.section.sec1.rownum が div by 2} > <{/if}> 重要な点は、Smarty 変数 $smarty.section.sec1.rownum です。セクション ループでは、この変数は 1 から始まるインデックス値を取得するため、rownum を 2 で割ることができます。出力 < /tr> はテーブルの列を変更します (注意! は前にあり、 は後ろにあります)。したがって、数値 2 は、列に表示するレコードの数です。これを使用して、他のさまざまな表示方法を変更できます。 外部コンテンツをロードする Smarty テンプレートの 2 つの構文 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"); $tpl->display(' test5_1 .htm'); ?> テンプレート1は次のように書きます: templates/test5_1.htm: ="text/html; charset=big5"> <{$ title}> .htm"}> <{include file=$dyn_page}> <{include file="test5_4.htm" Custom_var="カスタム変数の内容"}> < ;/body> Templates/test5_2.htm: 5_3.htm : の内容です。テンプレート 3 テンプレート 4 は次のように記述されます: templates/test5_4.htm: <{$custom_var}> ここでいくつかの重要な点に注意してください: 1. テンプレートの位置は前と同じです。 template_dir が基礎となります。 2. 含まれるすべてのサブテンプレートでは、その変数も解釈されます。 ; 3. include では、上記のテンプレート 4 と同様に、「変数名 = 変数の内容」を使用して、インポートされたテンプレートに含まれる変数を指定できます。
声明: この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。