ホームページ  >  記事  >  バックエンド開発  >  PHP テンプレート エンジンの詳細な紹介、smarty_PHP チュートリアル

PHP テンプレート エンジンの詳細な紹介、smarty_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 09:52:57742ブラウズ

PHPテンプレートエンジンsmartyの詳細紹介

この記事では、PHPテンプレートエンジンsmartyの詳細な紹介を中心に、smartyとは何か、smartyの利点、smartyの使用に適さない場所、smartyのディレクトリ構造とバージョン、などについて説明します。困っている友達は参考にしてください

/*

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のデバッグ

独自のファイルを作成し、demoフォルダーにindex.phpを作成します。

templatesディレクトリにテンプレートindex.tplを作成します

(ほぼすべてのテキスト ファイルの拡張子にすることができます。一般的に使用されるのは、tpl、php、html です。後者の 2 つは、ブラウザから直接アクセスでき安全ではないため、使用することはお勧めできません。 Apache の httpd.conf を使用して無効にします。.tpl ファイルに直接アクセスするか、Web サイトのドキュメント ツリーの外にテンプレート ディレクトリを配置します)

*/

//index.phpコード

require('../libs/Smarty.class.php');

$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 ファイルを変更しても再コンパイルはトリガーされません。コンパイルされたファイルが再生成されたら、キャッシュ ファイルも再生成する必要があります。

*/

//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}

//{*キャッシュが有効な場合、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();

//プラグインのディレクトリパスを設定します。デフォルトの「plugins」はありません

$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"}を通じて直接変更できます(存在しない場合は、テンプレート内にテンプレート変数を作成して設定します)、スコープ属性はテンプレート変数の使用範囲をマークするために何も書く必要はありません

//テンプレート内の他の配列を変更または作成します {$testArr = [1,2,3]} または {$testArr = [1,'a'=>2,2=>3]} または {$testArr [] = 4} または PHP で配列を作成する他の同様の方法

//php ソース ファイルは $smarty->getTemplateVars("testArr") を通じて指定されたテンプレート変数を取得できます。テンプレート内で変更または作成されたテンプレート変数を取得したい場合は、作成時または作成時にscope属性を追加する必要があります。テンプレート内の値を変更し、値をscope="global"またはscope="parent"に設定します

クラスA{

関数 aa($nam){

エコー $nam;

}

}

$smarty->assign("obj", new A);

//設定したテンプレート変数がオブジェクトの場合、テンプレートページ上で以下のように呼び出すことができ、テンプレートにクラスオブジェクトを渡す際にアドレスも渡されます

//{$obj->aa('私の名前はy')}

//Smarty は、変数に数字、文字、アンダースコアのみが含まれている限り、二重引用符で囲まれたテンプレート変数を認識できます。ただし、文字列に直接変換できるテンプレート変数のみがサポートされているようです

$smarty->assign("testStr", "これは testStr");

//テンプレートには {"$testStr OK !"} を通じてアクセスできます

/*

tpl テンプレートにはテンプレートが含まれています

テンプレートファイル:

{include file="header.tpl"}

header.tplの内容:

これがトップコンテンツです!! ようこそ、{$name}

テンプレートを含むテンプレートもこの形式にすることができます

{include file="header.tpl" testVar="これがトップコンテンツです!!!"}

Header.tpl は、{$testVar} を使用して、ページインクルードを呼び出すときに渡されるテンプレート変数を使用できます

header.tplの内容:

{$testVar}、ようこそ、{$name}


*/

/*

一連の変数と値の対応を事前に定義し、設定ファイルに入れて、使用時にロードすることができます。

設定ファイルはデフォルトではconfigsフォルダーに配置されており、フォルダー名はカスタマイズできます。

*/

/*

#テンプレートtest.confファイル:

#keyに対応する値は引用符で囲むことができます

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 == "張"}

張さん、ようこそ

{else}

どんな方でも歓迎です

{/if}

{*演算子は ==、>= など、または eq、ne などにすることができます*}

{$x=0 の場合

{$x}

{/}

{*PHP コードに似た for ループ*}

{$x=0}

{$x しながら

{$x++}

{/ながら}

{*while ループ。これも PHP コードに似ています。 *}

{foreach name="testForeach" from=$testArr key=arId item=arVal}

{$arId}の対応する値は: {$arVal}です

{$smarty.foreach.testForeach.index}

{$smarty.foreach.testForeach.iteration}

{$smarty.foreach.testForeach.first}

{$smarty.foreach.testForeach.last}

{$smarty.foreach.testForeach.total}

{foreachelse}

$testArr が null です

{/foreach}

{*次の 2 つの PHP に似た形式も使用できます*}

{foreach $testArr as $n}

{$n}

{/foreach}

{foreach $testArr as $key=>$n}

{$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}

{$smarty.section.testSection.index} -

{$sectionArr[testSection]}-

{$smarty.section.testSection.iteration}-

{sectionelse}

$sectionArr が null です

{/セクション}

*/

/*

tplテンプレートファイル:

{文字通り}

{/リテラル​​}

{*

このとき、リテラルタグ領域のデータはWebページのHTMLテキストとして扱われ、その中の文字情報はすべて無視され解析されません。

この機能は中括弧などの文字情報を含む可能性のあるjsやcssを表示するために使用されます。これらの情報が {literal}{/literal} タグ内にある場合、テンプレート エンジンはそれらを分析せずに直接表示します。

*}

*/

//PHPファイル:

//$smarty->setDebugging(true);//後続の呼び出しのテンプレートをデバッグします。

//$smarty->getDebugging();//現在デバッグが実行されているかどうかを取得します。デフォルトは false です

//または、デバッグが必要なテンプレートに {debug}

を記述します

/*

テンプレートファイル:

Smarty3.0は

などのテンプレート継承システムをサポートしています。

f1.tpl:

{ブロック名='top'} f1.header
{/ブロック}

{ブロック名='middle'} f1.middle
{/ブロック}

{ブロック名='buttom'} f1.buttom
{/ブロック}

f2.tpl:

{extends file="f1.tpl"}

{block name='top'} f2.header
{/ブロック}

{block name='other'} 表示できません
{/ブロック}

{*

f2.tpl にブロック タグがない場合、または f1.tpl と同じ名前のブロック タグが f2.tpl にない場合、f2.tpl が完全にインポートされて、f1.tpl のすべてのコンテンツが表示されます。 block タグの内容と f2.tpl 内のすべての内容は無視されます

f1.tplと同じ名前のブロックタグがf2.tplにある場合、f2時にf2.tplのブロックタグの内容がf1.tplの同名のブロックタグの内容を上書きします。 f2.tpl ページが表示されると、コンテンツは f1.tpl で設定された形式の位置に従って表示され、同じ名前のないブロック タグを含む f2.tpl 内の他のすべてのテキストは無視されます。そして表示されない。

ブロックタグの内容は、親テンプレート内の同じ名前のブロックタグの内容を上書きするか、このページで親テンプレートが呼び出されない場合、または を持つブロックタグがない場合にのみ表示されます。親テンプレートに同じ名前を上書きすると、ブロックタグの内容がこのページに表示されます

この種の継承は複数のファイルと多重継承をサポートしており、無期限に継承できることを意味します

*}

{fetch file="http://www.126.com" assign="testAssign"}

{$testAssign}

{fetch file="http://www.126.com"}

{*fetch は外部の http、ftp ページを参照できます。assign の値が指定されている場合、参照された内容は指定された名前の変数に格納されます。それ以外の場合は、fetch はどこにでも表示されます*}

*/

//php page:

//このメソッドを使用してテンプレートを呼び出し、出力前に何らかの処理を行うこともできます

//$output = $smarty->fetch("index.tpl");

//ここで $output を使って出力する内容を処理します

//echo $output;//そしてテンプレートを出力します

/*

テンプレート内のフォームを送信します

action属性には、送信するPHPファイルの名前を直接記述することもできますが、空のaction=""を書かない場合は、テンプレートを呼び出すPHPファイルに送信されます

*/

//データベースに接続します

mysql_connect("localhost","root","root");

mysql_select_db("テスト");

$smarty->assign('webDir',$_SERVER['DOCUMENT_ROOT']);//$_SERVER['DOCUMENT_ROOT']は現在のプロジェクトフォルダーの絶対パスです

//コンパイル済みファイルにコンパイルする必要があり、コンパイル済みファイルが異なるため、JQueryのsrcパスは実行するファイル内でJQueryを見つけられる絶対パスまたは相対パスを書いて設定するのがベストです元のパス環境から

?>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1006579.html技術記事 PHPテンプレートエンジンsmartyの詳細紹介 この記事では、smartyとは何か、smartyのメリット、smar...
について詳しく紹介します。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。