PHP ビューエンジン Smarty の簡単な使い方
テンプレートエンジンとは
いつからかわかりませんが、HTML にサーバースクリプトを埋め込むことに不満を感じる人が現れ始めました。ただし、Microsoft の ASP であれ、オープンソースの PHP であれ、それらはすべてサーバー スクリプトが組み込まれた Web サーバーサイド言語です。そこで、プログラムのアプリケーションロジック(または業務アプリケーションのロジック)とWebページのプレゼンテーション(レイアウト)のロジックを分離できれば良いのではないかと考える人もいるのでは?
実際、この問題は長い間存在していました。インタラクティブな Web ページが普及したとき、ASP と PHP のユーザーは両方ともプログラム開発者であり、ビジュアル デザイナーでもありました。しかし、通常、これらのユーザーはプログラミングが得意か芸術が得意であり、その両方を同時に処理しようとすると、多くの脳細胞を失うことになります...
そこで登場したのがテンプレートエンジンです。テンプレート エンジンの目的は、上記の論理的分離の機能を実現することです。これにより、プログラム開発者はデータ制御や機能の実現に集中できる一方、ビジュアルデザイナーは Web ページのレイアウトに集中して、Web ページをよりプロフェッショナルに見せることができます。したがって、テンプレート エンジンは企業の Web サイト開発チームによる使用に適しており、誰もが専門知識を活用できます。
Smarty は PHP で書かれたテンプレート エンジンで、現在業界で最も有名な PHP テンプレート エンジンの 1 つです。論理コードと外部コンテンツを分離し、元々 HTML コードと混在していた PHP コードを論理的に分離する、管理と使用が簡単な方法を提供します。簡単に言うと、その目的は、PHP プログラマーをフロントエンド担当者から分離し、プログラマーがフロントエンド担当者のページ設計に影響を与えることなくプログラムの論理コンテンツを変更し、フロントエンド担当者が影響を与えずにページを再変更できるようにすることです。プログラムのプログラム ロジック これは、複数人の共同作業を伴うプロジェクトでは特に重要です。
以下は Smarty の基本的な使い方の記録です:
1.Smarty をインストールします
Smarty 公式 Web サイトから最初にダウンロードします: http://www.smarty.net/
次に、それを解凍し、ファイルのディレクトリ構造を次のように変更します: (実用目的のみ)
その他の未使用のファイルは削除できます。
2. Smarty を設定して簡単に使用します
次に、次のようなディレクトリ構造を作成します (これには、cache Smarty のキャッシュ ディレクトリ、template_c Smarty のコンパイル結果ディレクトリ、tpl Smarty のビュー テンプレート ディレクトリが含まれます。これらのディレクトリは、Smarty の構成中に参照されます)
test.php ファイルで Smarty を構成します: (最初に Smarty のメイン ファイル Smarty.class.php をインポートすることを忘れないでください)
<?php require('../smarty-3.1.29/libs/Smarty.class.php'); $smarty = new Smarty(); //Smarty的口诀“五配置方法” //五配置的介绍 $smarty->left_delimiter = "{"; //左定界符 $smarty->right_delimiter = "}"; //右定界符 $smarty->template_dir = "tpl"; //html模板的地址 //要把对应的目录创建好 $smarty->compile_dir = "template_c"; //模板编译生成的文件 $smarty->cache_dir = "cache"; //缓存 //以下是开启缓存的另两个配置。因为通常不用smarty的缓存机制,所以此项为了解。 $smarty->caching = true; //开启缓存 $smarty->cache_lifetime = 120; //缓存时间 //在smarty模板变量的赋值 $smarty->assign('articletitle', '文章标题'); //注册到smarty模板里面去(变量名,变量值) //展示编写好的模板,该函数能对模板进行编译和展示 $smarty->display('test.tpl'); ?>
$smarty->assign('articletitle', 'article title'); を通じて、変数articletitleをSmartyテンプレートに登録します。そして、ビュー test.tpl を使用します (もちろん、接尾辞は .html にすることができます。実際、Web 開発でも .html が使用されます)。
test.tpl (tpl ディレクトリに作成)
{$articletitle} <br/>
これで、Smarty テンプレートに登録したばかりの変数articletitle を使用できるようになります。
アクセス プロセスは次のとおりです: test.php ファイルを実行し、Smarty オブジェクトを作成し、Smarty を設定し、変数articletitle を Smarty に登録し、表示するビューを選択します (Smarty はビューをコンパイルし、次のようにビューを {} でラップします)区切り文字 変数は解析されて変数の値になり、ページに表示されます。これにより、インターフェース層とロジック層の分離が実現されます。ロジック層はデータを Smarty に登録し、対応するインターフェイスの表示を制御します。インターフェイスはロジック層から返されたデータを表示に使用できます。
3. Smarty 変数へのアクセス
3.1. 1 次元配列へのアクセス
$arr = array('title'=>'smarty的学习', 'author' => '小明'); $smarty->assign('arr', $arr);
ビュー内 (通常は次の 2 つのメソッドにアクセスできます):
{$arr.title} {$arr.author} <br/> {$arr['title']} {$arr['author']} <br/>
3.2. 2 次元配列へのアクセス
$arr2 = array('articlecontent'=>array('title'=>'smarty的学习', 'author' => '小明')); $smarty->assign('arr2', $arr2);
ビュー内:
{$arr2['articlecontent']['title']} {$arr2['articlecontent']['author']} <br />
3.3. オブジェクトにアクセスする
class My_Object { function meth1($params) { return $params[0].'已经'.$params[1]; } } $myobj = new My_Object(); $smarty->assign("myobj",$myobj);
ビュー内:
输出对象 {$myobj->meth1(array('苹果','熟了'))} <br /><br />
3.4. php で他のデータ型にアクセスする
PHP での他のデータ型へのアクセスは、PHP でのアクセスの使用と似ているため、ここではケースを示しません。
(注: 変数にアクセスする場合、HTML コード内の変数にアクセスするステートメントをネストできます)
4. 条件判断
4.1. 基本的な文構造 (ビュー (または HTML インターフェース) で使用)
{if $name eq "a1"} Welcome Sir. {elseif $name eq "a2"} Welcome Ma'am. {else} Welcome, whatever you are. {/if}
4.2. 条件修飾子は数多くありますが、簡単なものは次のとおりです: eq(==) neq(!=) gt(>) lt(<)
4.3. 修飾子と変数または定数はスペースで区切る必要があります
5. スマーティのサイクル
5.1、セクション
section と sectionelse には多くの関数とパラメータがあります。これは、Smarty がループ操作を実行するために使用する関数の 1 つです。
基本属性には名前とループが含まれます
name 属性とloop 属性に加えて、次の属性もあります
start 循环执行的初始位置。如果该值为负数,开始位置从数组的尾部算起。例如:如果数组中有7个元素,指定start为-2,那么指向当前数组的索引为5.非法值(超过了循环数组的下限)将被自动调整为最接近的合法值。
step 该值决定循环的步长。例如指定step = 2将只遍历下标为0、2、4等元素。如果step为负值,那么遍历数组的时候从后向前遍历。
max 设定循环最大执行次数。
show 决定是否显示该循环。
案例:
test.php中
//在smarty模板变量的赋值 $articlelist = array( array( "title" => "第一篇文章", "author" => "小王", "content" => "第一篇文章该写点啥呢" ), array( "title" => "第二篇文章", "author" => "小李", "content" => "又写了一篇不知所云的文章" ) ); $smarty->assign("articlelist", $articlelist); </p> <p>视图中:</p> <pre class="brush:php;toolbar:false"><!-- section 在smarty中函数的一种,函数以</函数名>结尾 --> section循环<br /> {section name = article loop = $articlelist max=1} {$articlelist[article].title} {$articlelist[article].author} {$articlelist[article].content} <br /> {/section} <br />
5.2、foreach循环(与PHP中的foreach类似)
视图中:
foreach循环<br /> {foreach item = article from = $articlelist} {$article.title} {$article.author} {$article.content} <br /> {foreachelse} <!-- 当数组为空是 显示下面的这句话--> 当前没有文章 {/foreach} <br /> foreach循环——PHP形式<br /> {foreach $articlelist as $article} {$article.title} {$article.author} {$article.content} <br /> {foreachelse} 当前没有文章 {/foreach} <br />
建议使用类似PHP形式的foreach循环,便于记忆使用。
6、Smarty模板的引用
将其他模板引入到当前模板:使用include
在当前模板中使用,例如:
创建入口文件 test03.php
<?php require('../smarty-3.1.29/libs/Smarty.class.php'); $smarty = new Smarty(); //Smarty的自编口诀“五配置方法” //五配置的介绍 $smarty->left_delimiter = "{"; //左定界符 $smarty->right_delimiter = "}"; //右定界符 $smarty->template_dir = "tpl"; //html模板的地址 //要把对应的目录创建好 $smarty->compile_dir = "template_c"; //模板编译生成的文件 $smarty->cache_dir = "cache"; //缓存 //以下是开启缓存的另两个配置。因为通常不用smarty的缓存机制,所以此项为了解。 $smarty->caching = true; //开启缓存 $smarty->cache_lifetime = 120; //缓存时间 //展示编写好的模板,该函数能对模板进行编译和展示 $smarty->display('test03.tpl'); ?>
创建当前模板 test03.tpl
{include file="header.tpl" sitename="哈哈"} <!-- include还有其他属性(包括 sitename),其他属性的名称可以自定义,它的值可以传给引入的模板--> <!-- 这些自定义的属性仅仅只能在引入的文件中使用,如sitename属性只能在header.tpl中使用-->
其中被引入的模板为 header.tpl,属性sitename是自定义的,可以按照PHP的命名方式进行命名。表示传递到被引入的模板的变量,可以在被引入的模板中使用该变量。
header.tpl
头文件——{$sitename}
7、变量调节器
7.1、首字母大写 capitalize
如:{$articleTitle|capitalize}
7.2、字符串连接 cat
如:{$articleTitle|cat:" aaaa"}
7.3、日期格式化 date_format
如:{$yesterday|date_format}
{$yesterday|date_format:" :"%A, %B %e, %Y %H:%M:%S"}
7.4、为未赋值或为空的变量指定默认值default
如:{$articleTitle|default:"no title"}
7.5、转码escape
用于html转码,url转码,在没有转码的变量上转换单引号,十六进制转码,十六进制美化,或者javascript转码。默认是html转码。
7.6、小写lower 大写upper
将变量字符串小(大)写
如:{$articleTitle|lower} {$articleTitle|upper}
7.7、所有的换行符将被替换成
nl2br功能同PHP中nl2br()函数一样
如:{$articleTitle|nl2br}
7.8、其他函数
可以参见手册,原则上应该通过php直接处理完再赋值到smarty变量里,少用smarty函数。
8、使用php内置函数
基本格式为: {参数1|php内置函数名:参数2:参数3:...}
案例如下:
$smarty->assign('time',time()); $smarty->assign('str', 'abcdefg');
视图中:
Smarty函数的使用(使用PHP的内置函数)date -1<br /> 在Smarty中函数的调用 | 函数名 ,其中“|”前为函数的第一个参数,函数名后为函数的第二个参数<br /> 而在php中的date函数,第一个参数为时间戳,第二个参数为时间的格式。所以在使用下面的写法<br /> {"Y-m-d"|date:$time} <br /> Smarty函数的使用(使用PHP的内置函数)str_replace -2<br /> <!-- 在php中的使用 str_replace('d','h',$str) --> {'d'|str_replace:'h':$str} <br />
9、自定义Smarty函数
案例:
//自定义函数 function test($params) { /*print_r($params); exit;*/ $p1 = $params['p1']; $p2 = $params['p2']; return '传入的参数1值为'.$p1.',传入的参数2值为'.$p2; } $smarty->registerPlugin('function', 'f_test', 'test');
这样就可以在视图中使用test函数了,如下:
Smarty函数的使用——自定义函数 -3 {f_test p1='abc' p2='edf'} <!-- p1 p2 参数(或者称为属性)会打包成数组发送给f_test函数-->
10、Smarty插件的学习
10.1、什么是Smarty插件:
Smarty的插件本质上是function函数
10.2、Smarty插件常用类型:
functions 函数插件
modifiers 修饰插件
block functions 区块函数插件
10.3、如何来制作、使用插件:
(1)使用registerPlugin方法注册写好的自定义的函数
(2)将写好的插件放入Smarty解压目录中lib目录下的plugins目录里
(3)php的内置函数,可以自动以修饰插件(变量调节器插件)的形式在模板里使用