ホームページ >バックエンド開発 >PHPチュートリアル >PHP テンプレート エンジン Smarty の詳細な紹介、テンプレート Smarty_PHP の詳細な紹介チュートリアル
/*
1. スマートとは何ですか?
smarty は、PHP で書かれたテンプレート PHP テンプレート エンジンです。簡単に言えば、
その目的は、PHP プログラマーをアーティストから分離することです。プログラマーがプログラムのロジックの内容を変更しても、アーティストがページを変更しても、プログラムのプログラム ロジックには影響しません。これは、複数人で行うプロジェクトでは特に重要であるようです。
2. Smarty の利点:
1. 速度: Smarty を使用して作成されたプログラムは、他のテンプレート エンジン テクノロジーと比較して最大速度の向上を達成できます。
2. コンパイル済みタイプ: Smarty で書かれたプログラムは、実行時に非テンプレート テクノロジの PHP ファイルにコンパイルする必要があります。このファイルは、次回のテンプレート作成時に、PHP と HTML を組み合わせてこのファイルに直接変換されます。テンプレートを再コンパイルする代わりに、 にアクセスします (ソースプログラムが変更されていない場合)
3. キャッシュ技術:smarty が選択したキャッシュ技術。smarty のキャッシュ属性が true に設定されている場合、smarty が設定したキャッシュタイム期間内に、ユーザーが最終的に閲覧する HTML ファイルを静的 HTML ページにキャッシュできます。 WEB リクエストはこの静的 HTML ファイルに直接変換されます。これは静的 HTML ファイルを呼び出すのと同じです。
4. プラグインテクノロジー: Smarty はプラグインをカスタマイズできます。プラグインは実際にはいくつかのカスタム関数です。
5. If/elseif/else/endif をテンプレートで使用できます。テンプレート ファイルで判断ステートメントを使用すると、テンプレートを非常に便利に再フォーマットできます。
3. Smarty が適さない場所:
1. リアルタイムで更新する必要があるコンテンツ。たとえば、頻繁にデータを更新する必要がある株式表示のように、このタイプのプログラムに Smarty を使用すると、テンプレートの処理が遅くなります。
2. 小さなプロジェクト。プロジェクトが単純であるため、アーティストとプログラマーの両方が単純な小規模プロジェクトの場合、smarty を使用すると、迅速な PHP 開発という利点が失われます。
4. Smarty のディレクトリ構造とバージョン
Smarty の公式 Web サイト、www.smarty.net/download.php を開きます。 Smarty 3.1.12 をダウンロードします。 Linux 版と Windows 版にはそれぞれ tar.gz と zip があります。
Smarty-stable-3.1.12 をダウンロードして解凍すると、Smarty-3.1.12 フォルダーが作成されます。このフォルダーには、demo と libs の 2 つのメイン フォルダーが含まれています
デモ フォルダーはサンプル フォルダーであり、デフォルトのフォルダー構造が含まれており、プログラム コードを記述するメイン フォルダーです。デモ内のフォルダーの名前はすべて、smarty のデフォルトのディレクトリ構造名です。smarty の対応する属性値を変更することで、フォルダー名を希望の名前に変更できます。
libs は Smarty コードのソース フォルダーであり、通常は移動されません。
/libs/Smarty.class.php #メインファイル
/libs/sysplugins/ #内部プラグイン
/libs /plugins/ #外部プラグイン、自由に拡張可能
/demo/cahce/ #キャッシュ ファイルを配置します
/demo/configs / #ロードできる設定ファイルを配置します
/demo/templates/ #テンプレートファイルを配置します
/demo/templates_c/ #コンパイルしたテンプレートファイルを配置します
解凍した Smarty-3.1.12 フォルダーの名前を必要なプロジェクト名に変更できます。また、デモをエンコーディングを保存したい特定のフォルダーの名前に変更することもできます
2.Smarty-3.1.12 のデバッグ
独自のファイルを作成し、デモフォルダーにindex.phpを作成します。
テンプレートディレクトリにテンプレートindex.tplを作成します
(ほぼすべてのテキスト ファイルの拡張子にすることができます。一般的に使用されるのは、tpl、php、html です。後者の 2 つはブラウザから直接アクセスでき、安全ではないため、使用することはお勧めできません。httpd を設定できます。 Apache の .conf を使用して、.tpl ファイルにアクセスするか、Web サイトのドキュメント ツリーの外にテンプレート ディレクトリを配置します)
*/
//index.php コード
require('../libs/Smarty.class.php');
$smarty = 新しい Smarty;
// 呼び出されたテンプレートでは、{$name} を使用して name の値を出力できます。ここでの {} は賢い区切り文字です
$smarty->assign('name','zhang');
//PHP ステートメント ブロックは呼び出し元のテンプレート tpl ファイルでは実行できません
$smarty->display('templates/index.tpl');
/*
Index.tpl ページのコンテンツ
こんにちは、{$name}
ボディ>
*/
/*
Smartyをコンパイルする際の処理プロセスは、ソースphpファイル→テンプレートファイル(複数回呼び出される場合もあります)→ソースphpファイルとなります。 。 。
つまり、元のphpファイルの他の処理や出力には影響しません。そのため、Smarty テンプレート ファイルは、完全な HTML またはその一部にすることができます。
スマートな処理
Smarty は、まず PHP ソース ファイルを中間ファイル (PHP) にコンパイルします。キャッシュが有効な場合は、コンパイルされたファイルに基づいてキャッシュ ファイル (PHP も) を生成します。キャッシュする必要がある部分はすべてハードコーディングされます。
後続の各アクセスはコンパイル済みファイルにアクセスし (コンパイル済みファイルがすでに存在する場合)、キャッシュが有効であり、キャッシュ ファイルが存在せず、有効期限が切れると、キャッシュ ファイルに直接アクセスされ、コンパイルされたファイルはスキップされます。
コンパイル済みファイルが生成されると、テンプレート ファイルまたは設定ファイルが変更されない限り、自動的に更新されません。ソース PHP ファイルを変更しても再コンパイルはトリガーされません。コンパイルされたファイルが再生成されたら、キャッシュ ファイルも再生成する必要があります。
*/
//Smarty では 2 つの特別なコンパイル設定が可能です:
//1. いつでも自動再コンパイルは行われません (オンライン段階): このファイルにコンパイルされたファイルがない場合にのみ生成され、テンプレート ファイルまたは構成ファイルへの変更によって再コンパイルがトリガーされません。
$smarty->setCompile_check(false);//デフォルトは true で、false は、コンパイル済みファイルが存在しない場合を除き、ファイルが変更されたときにコンパイル済みファイルが生成されないことを意味します。
$smarty->getCompile_check();//現在のコンパイルチェック設定を取得します
//2. いつでも再コンパイル (デバッグ段階): いつでも再コンパイルします。
$smarty->setForce_compile(true);//デフォルトは false で、true は毎回再コンパイルすることを意味します (キャッシュが有効になっている場合は、毎回再キャッシュします)
$smarty->getForce_compile();//現在の強制コンパイル設定を取得します
//キャッシュを有効にする
$smarty->setCaching(true);
$smarty->getCaching();// 現在のキャッシュのステータスを取得します。デフォルトは false で閉じる
$smarty->setcache_lifetime(60);//キャッシュ時間を秒単位で設定します
//{*テンプレート ファイル*}
//{キャッシュなし}
//{$name}
//{/キャッシュなし}
//{*キャッシュが有効な場合、nocache タグに配置された変数はキャッシュされず、PHP ソース ファイルの値が毎回読み取られます*}
/*
スマートな区切り文字
テンプレート ファイルでは、通常の HTML コードと Smarty コードを区別するために区切り文字が使用されます。デフォルトは {} ですが、js および css と競合する可能性があります。変更も可能です。
3.0 では、テンプレート タグはスペースをサポートしません。たとえば、Smarty2 では { $abc } は認識されますが、これは JavaScript と CSS をより適切にサポートするためのものです。
*/
$smarty->left_delimiter = "{"; //左区切り文字、2.0 属性、3.0 でも使用されます
;
$smarty->right_delimiter = "}";
/*
デリミタはPHPのechoに相当します。代入などの操作を行わない限りデリミタ内の値が出力されます
Smarty tplファイルの区切り文字の**で囲まれた内容が
などのコメント内容になります。
tpl ファイル:
{*これはテンプレートのコメント内容です*}
*/
// キャッシュ ディレクトリ パスを設定します。デフォルトの「キャッシュ」は設定しないでください
$smarty->setCacheDir("キャッシュ");
//キャッシュディレクトリのパスを取得します
$smarty->getCacheDir();
//設定ディレクトリのパスを設定します。デフォルトの「configs」はありません
$smarty->setConfigDir("configs");
//設定ディレクトリのパスを追加します。ファイルを呼び出すと、すべてのパスが検索されます。
$smarty->addConfigDir("configs/test");
//設定ディレクトリのパスの配列を取得します
$smarty->getConfigDir();
$smarty->setPluginsDir("プラグイン");
//プラグインのディレクトリパスを追加します。ファイルを呼び出すと、すべてのパスが検索され、フォアグラウンドまたは呼び出すことができる関数のファイル名が含まれます。背景は異なるルールに従っており、関数名の命名には異なる呼び出しルールに従って異なる記述要件があります
$smarty->addPluginsDir("plugins/test");
//プラグインのディレクトリパスの配列を取得します
$smarty->getPluginsDir();
$smarty->setTemplateDir("テンプレート");
// テンプレートのディレクトリパスを追加します。ファイルを呼び出すと、すべてのパスが検索されます。
$smarty->addTemplateDir("テンプレート/テスト");
//テンプレートディレクトリパスの配列を取得します
$smarty->getTemplateDir();
//コンパイルディレクトリのパスを設定します。デフォルトの「templates_c」は設定しないでください
$smarty->setCompileDir("templates_c");
//コンパイルディレクトリのパスを取得します
$smarty->getCompileDir();
/*
さまざまな php ソース ファイル フォルダーを作成し、書き込まれた php ファイルを特定のカテゴリに従ってさまざまなフォルダーに配置できます。
次に、各フォルダーにカスタム構成ファイルを作成し、構成ファイル内に新しい $smarty = new Smarty オブジェクトを作成します
次に、異なるフォルダー内のすべての php ファイルのキャッシュ、構成ファイル、プラグイン、テンプレート、コンパイル ディレクトリを同じキャッシュ、構成ファイル、プラグイン、テンプレート、コンパイル ディレクトリに設定します
このフォルダー内のすべての PHP ソース ファイルがこの構成ファイルを参照して、同じ構成を取得します
*/
//テンプレート変数
$arr = array(array("zhang","li"),'a'=>array("liu","wang"),array("ming","yi"));
$smarty->assign("testArr", $arr);
// テンプレート変数を設定して、次に呼び出されるテンプレートの変数を指定します。{$testArr}、{$testArr['a'][0]}、または {$testArr.a. 0} : 特定の配列要素にアクセスします
// テンプレートでは、渡されたテンプレート変数の値を {$testArr = "testValue"scope="global"} を通じて直接変更できます (存在しない場合は、テンプレート内にテンプレート変数を作成して設定します)。 scope属性はアノテーションなのでテンプレート変数の使用範囲を記述する必要はありません
//テンプレート内の他の配列を変更または作成します {$testArr = [1,2,3]} または {$testArr = [1,'a'=>2,2=>3]} または { $testArr[ ] = 4} または PHP で配列を作成する他の同様の方法
//php ソース ファイルは、$smarty->getTemplateVars("testArr") を通じて指定されたテンプレート変数を取得できます。テンプレート内で変更または作成されたテンプレート変数を取得したい場合は、作成または変更時にscope属性を追加する必要があります。テンプレート内の値をscope="global"またはscope="parent"に設定します。
クラスA{
エコー $nam;
}
}
$smarty->assign("obj", new A);
//設定したテンプレート変数がオブジェクトの場合、テンプレートページ上で以下のように呼び出すことができます テンプレートにクラスオブジェクトを渡す際にアドレスも渡します
//{$obj->aa('私の名前は y')}
//Smarty は、変数に数字、文字、アンダースコアのみが含まれている限り、二重引用符で囲まれたテンプレート変数を認識できます。ただし、文字列に直接変換できるテンプレート変数のみがサポートされているようです
// テンプレートには {"$testStr OK!"} を通じてアクセスできます
/*
tpl テンプレートにはテンプレートが含まれています
テンプレートファイル:
{include file="header.tpl"}
header.tpl の内容:
これがトップコンテンツです、ようこそ、{$name}
テンプレートにはテンプレートが含まれており、この形式にすることもできます
header.tpl は、{$testVar} を使用して、呼び出しページがインクルードされるときに渡されるテンプレート変数を使用できます
header.tpl の内容:
{$testVar}、ようこそ、{$name}
/*
変数と値の一連の対応関係を事前に指定して設定ファイルに置き、使用時に読み込むことができます。
構成ファイルはデフォルトで configs フォルダーに配置され、フォルダー名はカスタマイズできます。
*/
/*
#キーに対応する値は引用符で囲むことができます
title = Smarty へようこそ!!
カットオフサイズ = 40
[中国]
[イギリス]
#[china]、[england] はタグです。unset タグのキー値はグローバルであり、設定ファイルが呼び出される限りテンプレートで使用できます。設定ファイルの呼び出し時に対応するタグを指定して使用可能です
#PHP ソース ファイルで構成ファイル ステートメント $smarty->configLoad('test.conf', $sections = 'england') を呼び出します。このステートメントで呼び出されたテンプレートのみが構成ファイルを使用し、どのテンプレートを使用するかを指定します。 $sections 属性のタグの下のキーと値を介して使用します
#$sections パラメータは省略できます。デフォルト値は null です。$smarty->configLoad('test.conf') はグローバル キー値のみを使用し、ラベルの下のキー値は使用できません
#テンプレートの下の {config_load file="test.conf" section="china"scope="global"} ステートメントを通じて構成ファイルを呼び出します
#section 属性は記述する必要はありません。デフォルトは null です。scope 属性は {config_load file="test.conf"scope="global"} と記述する必要があります
#section 属性には 3 つの値を割り当てることができます
#local 現在のテンプレートのみがこの設定ファイルを使用できます
#parent 現在のテンプレートが設定ファイルステートメントを導入した後に含まれるテンプレート、または php ソースファイル内の Smarty オブジェクトが設定ファイルを呼び出した後に呼び出されるテンプレートのみが、設定ファイル内のキー値を使用できます
#global テスト効果は親と同じです
#{# language#} を通じてテンプレート内のキー値を使用します。また、{$smarty.config. language} を通じて構成ファイルのキー値にアクセスすることもできます
#PHP ソース ファイルでは、$smarty->getConfigVars(' language') または $smarty->getConfigVariable(' language') を使用してキー値を取得することもできます。配列です
*/
/*
tplファイルでよく使用される関数
tpl ファイル:
{キャプチャ名="testCapture"}
{include file="f1.tpl"}
{/キャプチャ}
{本当の場合}
{$smarty.capture.testCapture}
{/if}
{if $name == "王"}
王さん、ようこそ
{elseif $name == "張"}
張さん、ようこそ
{その他}
どんな方でもようこそ
{/if}
{*演算子は ==、>= など、または eq、ne などにすることができます。*}
{$x=0; $x
{*for ループ、PHP コードに似ています*}
{$x=0}
{while $x
{/ながら}
{*while ループ。これも PHP コードに似ています。 *}
{foreach name="testForeach" from=$testArr key=arId item=arVal}
{$arId} の対応する値は次のとおりです: {$arVal}
{$smarty.foreach.testForeach.index} を返します
{$smarty.foreach.testForeach.first}
{$smarty.foreach.testForeach.last}
{$smarty.foreach.testForeach.total}
{foreachelse}
$testArr が null です
{/foreach}
{foreach $testArr as $n}
{$n}
{/foreach}
{$key}
{/foreach}
{$sectionArr = [0=>"a",4=>"b","c","d","e",6,7,8,9,10,11,12,13, 14,15,16]}
{セクション名="testSection" ループ=$sectionArr start=0 step=4 max=6 show=true}
{$sectionArr[testSection]}-
{$smarty.section.testSection.iteration}-
$sectionArr が null です
{/セクション}
の実行に直接ジャンプします
/*
tpl テンプレート ファイル:
{リテラル}