ホームページ php教程 php手册 PHP を学習する初心者のための Smarty の入門

PHP を学習する初心者のための Smarty の入門

Jun 21, 2016 am 09:11 AM
array gt lt php smarty

テンプレート エンジンを初めて使用する 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><br> </head><br> <body><br> <{$content}><br> </body><br> タイトル ($title) とコンテンツ ($content) を変更するには、次のファイル内容 test.php をメインフォルダーに配置します: <br> <br> test.php:<br> <?php<br/> Require "main.php" ;<br/> $tpl->assign("title", "Web ページのタイトルのテスト");<br> $tpl->assign("content", "Testing web page content");<br> // 上記の 2 行は、代わりにこの行を使用することもできます<br> // $tpl->assign(array( "title" => "Web ページのタイトルをテスト中", "content" => "Web ページのコンテンツをテスト中"));<br> ?><br> <br> お願いしますブラウザを開いて http://localhost/demo/test.php と入力して試してみます (URL は環境によって異なります)。次の画面が表示されます。 <br> <br> <br><br> templates_c の一番下に移動し、奇妙なフォルダー (%%179) が表示され、もう一度クリックすると奇妙なフォルダー (%%1798044067) が表示され、その中に <center> </center> templates_c/%%179/%%1798044067/test というファイルがあります。 htm.php:<br><?php /* Smarty バージョン 2.6.0、2003-12-15 22:19:45 に作成、test.htm からコンパイル */ ?><br> <html><br> <head><br> <meta http- equiv="Content-Type" content="text/html; charset=big5"><br> <title><?php echo $this->_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:



ネストループテスト

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><br> </head><br> <body><br> <table width="500" border="1" cellpacing="0" cellpadding="3"><br> <tr><br> <{セクション名 =sec1 ループ=$my_array}><br> <td><{$my_array[sec1].value}></td><br> <{if $smarty.section.sec1.rownum が div by 2} ><br> </tr><br> <tr><br> <{/if}><br></html><br> <br> 重要な点は、Smarty 変数 $smarty.section.sec1.rownum です。セクション ループでは、この変数は 1 から始まるインデックス値を取得するため、rownum を 2 で割ることができます。出力 < /tr><tr> はテーブルの列を変更します (注意! </tr> は前にあり、<tr> は後ろにあります)。したがって、数値 2 は、列に表示するレコードの数です。これを使用して、他のさまざまな表示方法を変更できます。 <br> <br> <b>外部コンテンツをロードする</b><br> <br> Smarty テンプレートの 2 つの構文 include_php と include を使用して、テンプレートに PHP プログラム コードまたは別のサブテンプレートをロードできます。公式マニュアルでは、ここでは説明しません。 <br> <br> include を使用すると、サブテンプレートを事前にロードしたり、サブテンプレートを動的にロードしたりできます。プリロードは通常、共通のファイル ヘッダーと著作権宣言がある場合に使用されます。動的ロードは、Winamp のようなスキンの変更可能性をさらに実現するために統合フレーム ページで使用できます。もちろん、状況に応じてこれら 2 つを混合することもできます。 <br> <br> 次の例を見てみましょう: <br> <br> test5.php:<br> <br> <?php<br/> require "main.php";<br/> $tpl->assign("title", "Include test");<br> $ tpl->assign("content", "これはテンプレート 2 の変数です");<br> $tpl->assign("dyn_page", "test5_3.htm");<br> $tpl->display(' test5_1 .htm');<br> ?><br> <br> テンプレート1は次のように書きます: <br> <br> templates/test5_1.htm:<br> <br> ="text/html; charset=big5"><br> <title><{$ 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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

PHPとPython:2つの一般的なプログラミング言語を比較します PHPとPython:2つの一般的なプログラミング言語を比較します Apr 14, 2025 am 12:13 AM

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

アクション中のPHP:実際の例とアプリケーション アクション中のPHP:実際の例とアプリケーション Apr 14, 2025 am 12:19 AM

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHP:Web開発の重要な言語 PHP:Web開発の重要な言語 Apr 13, 2025 am 12:08 AM

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHPの永続的な関連性:それはまだ生きていますか? PHPの永続的な関連性:それはまだ生きていますか? Apr 14, 2025 am 12:12 AM

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

一致式(PHP 8)とそれがスイッチとどのように異なるかを説明します。 一致式(PHP 8)とそれがスイッチとどのように異なるかを説明します。 Apr 06, 2025 am 12:03 AM

PHP8では、一致式は、式の値に基づいて異なる結果を返す新しい制御構造です。 1)Switchステートメントに似ていますが、実行ステートメントブロックの代わりに値を返します。 2)一致式の式は厳密に比較され、セキュリティが向上します。 3)スイッチステートメントの脱落の可能性を回避し、コードのシンプルさと読みやすさを向上させます。

See all articles