ホームページ  >  記事  >  php教程  >  ダイナミックなWebページ制作スキル PHP:Smartyを詳しく詳しく学ぶ

ダイナミックなWebページ制作スキル PHP:Smartyを詳しく詳しく学ぶ

WBOY
WBOYオリジナル
2016-06-21 09:01:101113ブラウズ

Smarty是一个php模板引擎,它分开了逻辑程序和外在的内容,提供了一种易于管理的方法.

Smarty要求web服务器运行php4.0.6和以上版本.

smarty安装需要smarty库文件。可以去官方网站http://smarty.php.net下载。

网上讲了很多安装的教程,但是我都没有成功,所以直接把整个目录名改为smarty直接复制到了网站所在的目录下,然后打开
http://网站路径/smarty/demo/index.php,显示正常,应该算是安装成功了。


基本语法

所有的smarty标签都被加上了定界符.在smarty里,所有定界符以外的内容都是静态的,当smarty遇到了模板标签,将尝试解释他们,然后再以恰当的方式输出.

默认情况下是 {和},但它们是可定制的.定制方法是:
$smarty->left_delimiter = '';

1.注释

模板注释被*号包围,例如 {* this is a comment *}
smarty注释将不被输出.它是模板内在的注释.

2.变量
模板变量以$开头,可以包含数字,字母和下划线。
config_file变量是例外要用#变量名#的方法引用

3.函数
smarty标签输出一个变量或者调用某种函数.
在定界符内函数和其属性将被处理和输出.例如:
{funcname attr1="val" attr2="val"}.
funcname为函数的名称比如:include等,attr1,attr2为属性名,val为属性相应的值。

在模板里无论是内建函数还是自定义函数都有相同的语法.
内建函数将在smarty内部工作,例如 {if}, {section} 和{strip}.他们不能被修改.
自定义函数通过插件机制起作用,它们是附加函数,可以随意修改,自行添加.
例如 {html_options} and {html_select_date}

4.属性
静态数值不需要加引号,布尔值(真或假)也不需要引号,可以是true,on,yes或者false,off,no. 但是字符串例外.变量同样被用到了,它们也不能加引号.

5.在字符串中插入变量
只能识别数字,字母,下划线和[]的组合,如果为复杂的形式需要用``将变量隔起来。比如{func var="test $foo.bar test"} 中只能识别变量$foo,要识别$foo.bar,需要写成{func var="test `$foo.bar` test"}的格式。

6.一些保留字的显示方法
在模板中如果要将smarty的一些保留字作为语言的内容显示出来,比如显示分隔符,默认为{}的方法是: {ldelim},{rdelim} 或者{$smarty.ldelim},{$smarty.rdelim} 或者可以把{}放在{literal} .. {/literal} 中间输出。

smarty的保留变量

{$smarty}保留变量可以被用于访问一些特殊的模板变量.
以下是全部.

页面请求变量
以下是访问页面请求变量诸如get,post,cookies,server,enviroment和session变量的例子. 例如{$smarty.server.SERVER_NAME}取得服务器变量,{$smarty.env.PATH}取得系统环境变量path, {$smarty.request.username}取得get/post/cookies/server/env的复合变量。

{$smarty.now}变量用于访问当前时间戳.
可以用 date_format调节器格式化输出. 例如{$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"}

{$smarty.const}
你可以直接访问PHP常量. 例如{$smarty.const._MY_CONST_VAL}

{$smarty.capture}
可以通过 {capture}..{/capture}结构 截取的输出可以使用{$smarty} 变量访问.

{$smarty.config}
{$smarty}变量 可以访问已经加载的config变量.
例如 {$smarty.config.foo}就可以表示 {#foo#}.

{$smarty.section}, {$smarty.foreach}
{$smarty} 变量可以访问'section'和'foreach'循环的属性.

{$smarty.template}
显示当前被处理的模板的名字.

{$smarty.version}
显示smarty模板的版本

{$smarty.ldelim}
显示左分隔符

{$smarty.rdelim}
显示右分隔符

変数アジャスタ
変数アジャスタは、変数、カスタム関数、文字列に使用されます。
アジャスタは、'|' 記号とアジャスタ名を使用して適用できます。コントローラの動作は、それに割り当てられたパラメータ値によって決まります。
パラメータは「:」記号で区切られます。
変数調整器を使用して配列変数を調整すると、結果は次のようになります。配列全体を調整するには、調整者名の前に @ 記号を追加する必要があります。例: {$articleTitle|@count} (これにより、$articleTitle に数値が出力されます)。 array)


capitalize
変数内のすべての単語の最初の文字を大文字にします。パラメーター値 boolean は、数字を含む単語の最初の文字を大文字にするかどうかを決定します。デフォルトは大文字ではありません。

count_characters
変数値の文字数をカウントします。パラメータ値 boolean によって、スペースの数をカウントするかどうかが決まります。デフォルトでは、スペースはカウントされません。

cat
cat のパラメータ値を指定された変数に接続します。デフォルトは空です。

count_paragraphs
変数内の段落数をカウントします

count_sentences
変数内の文数をカウントします

count_words
変数内の単語の数をカウントします

date_format
日付形式
最初のパラメータは制御します
date_format に渡されたデータが空の場合、2 番目のパラメータがデフォルトの時刻として使用されます

%a - 曜日の省略形

% A - 曜日の完全な文字

%b - 月の省略形

%B - 月の完全な省略形

%c - 日付と時刻 06/ 12/05 11:15:10

% C - 世紀時間

%d - 月の日 (01 から 31)

%D - % と同じm/%d/%y

% e - 月の番号。数値が奇数の場合は、その前にスペースを追加します (1 ~ 31)

%g -世紀

%G - 世紀 [0000,9999]

%h - %b と同じ

%H - 24 時間形式の時間 (00 から 23)

%I - 12 時間形式の時間 (01 から 12)

%j - 年間の日 (001 から 366)

%k - 時間24 時間形式、スペースが前に付く 1 桁 (0 ~ 23)

%l - 単数の数字の前にスペースがある 12 時間形式の時間 (範囲は 1 ~ 12)。 )

%m - 月 (範囲 01 から 12)

%M - 分

%n - 改行

%p - 朝またはを表示午後 `am' または `pm'

%r - 午前または午後の形式の時刻

%R - 24 時間形式の時刻

%S - 秒

%t - タブ記号

%T - %H:%M:% S と同じ

%u - [1,7] を使用して日を表しますthe Week

%U - 年の最初の日曜日から開始して、その年の週数を計算します

%V - 年の週番号を 01 から 53 まで計算します。最初の週は 1 年に少なくとも 4 日ある必要があります。日曜日が週の最初の日です

%w - 曜日を数値形式で表します。日曜日は 0

% W - 年の最初の月曜日から始まる曜日を数値形式で表します。 カウントを開始します。

%x - 日付の表示: 月/日/年

%X - 時刻の表示: 時: 分: 秒

%y - 世紀を除く年

%Y - 世紀を含む年

%Z - タイムゾーン

%% - Output %

一部正しく出力されない場合があります。


default
Default 空の変数のデフォルト値を設定します。
変数が空であるか未割り当ての場合、代わりに指定されたデフォルト値が出力されます。 🎜>

escape

トランスコーディングパラメータ値は、html、htmlall、url、引用符、hex、hexentity、javascript です。デフォルトは HTML トランスコーディングです。

indent

indent は、各行の文字数を指定します。デフォルトは 4 文字です。 2 番目のパラメータは、インデントの置き換えに使用する文字を指定します。

小文字

小文字これは、変数文字列を 小文字にするために使用されます


nl2br

改行を
に置き換えます。
regex_replace

正規表現の検索と置換 パラメータは 2 つ必要です。パラメータ 1 は置換正規表現です。パラメータ 2 置換に使用するテキスト文字列
replace

replace
単純な検索および置換文字列には 2 つのパラメータが必要です。パラメータ 1 は置換される文字列です。パラメータ 2 は、
spacify を置換するために使用されるテキストです。

spacify は、文字列の各文字の間にスペースまたは他の文字列を挿入します。 パラメータ 2 つの文字の間に挿入される文字列を表します (デフォルト)。スペースに。
string_format
文字列の書式設定
は、sprintf 構文を使用して浮動小数点数を書式設定する方法です。このパラメータは必須であり、使用するフォーマット方法を指定します。 %d は整数を表示することを意味し、%.2f は 2 つの浮動小数点数をインターセプトすることを意味します。
strip
(余分なスペース) を削除します。
繰り返されるスペース、改行、タブをすべて単一の文字列または指定された文字列に置き換えます。パラメータがある場合は、それが指定された文字列になります。
strip_tags
すべての HTML タグを削除します

truncate Intercept
パラメータ 1 は、インターセプトする文字数を指定します。デフォルトは 80 です。
2 番目のパラメータは、インターセプトされた文字列の後に追加する文字を指定します。デフォルトは... 第三个参数决定是否精确截取,默认情况下为false,则smarty不会分割单词。

upper 将变量改为大写

wordwrap 行宽约束
第一个参数指定段落的宽度(也就是多少个字符一行,超过这个字符数换行).默认80.
第二个参数指定在约束点使用什么字符(默认是换行符\n).
第三个参数决定是否精确截取字符,默认情况下是不精确截取,就是截取时不能分开单词。
内建函数
内建函数不能擅自修改。
capture
capture函数的作用是收集模板输出的数据到一个变量里,而不是把它们输出到页面.例如任何在 {capture name="foo"}和{/capture}之间的数据都被收到了由函数的名称属性指定的变量{$foo}里,或者{$smarty.capture.foo}里。如果函数没有名字属性,将使用"default".每个{capture}都必须对应{/capture},也不能嵌套使用capture函数。

config_load
引用配置文件
file是必须的,说明要包含进来的配置文件名称,section说明要加载的部分的名称,scope被处理的变量的作用域.必须是local,parent或者global.
local的意思是变量将在本模板里被加载.
parent 的意思是变量将在本模板和上级模板被加载.
global的意思是变量将应用到所有的模板.默认为local。变量是否在上级模板可视,默认为no。如果scope属性已经有了,这个值将被忽略.

foreach,foreachelse
foreach循环是选择性的section循环.用于遍历关联数组.foreach的语法比section简单的多,但是作为一个折中它只能用于简单数组.
foreach必须的参数是from和item. from变量表示需要循环的数组的名称,item表示当前元素的变量名,key表示当前关键字的变量名,name表示访问foreach属性的foreach循环名。循环可以互相嵌套,被嵌套的循环之间的名字必须是独立的.foreachelse 在from变量没有值的时候被执行

include
用来引用其他的模板。
file属性是必须的用来表示所引用模板的名字,assign表示include文件将要分配的输出的变量。你可以自行用属性名="属性值"的方式定义任意个局部变量。

include_php
用来在模板中引入php脚本。file是必须的用来表示php脚本的路径,once确定如果在模板中引用了php脚本多次,是否只装载一次。默认为true。

insert
用来包含php脚本中的函数,name是必须的,表示所插入的脚本的名称,注意如果名称是name,则包含的函数则是insert_name(),所以所有要插入的函数要有前缀insert_ 。如果用了assign属性,则insert的输出将会分配给模板变量而不会显示。 script表示要引用的脚本路径。这个程序产生的内容将不会被缓存,在每次调用该页时重新执行,适用于广告,投票,查询结果等互动的地方。

if,elseif,else
if语句和和条件同php差不多,但每个词之间必须用空格分割开。也有一些新的条件语句,列举如下:eq相等,ne、neq不相等,gt大于,lt小于,gte、ge大于等于,lte、le 小于等于,not非,mod求模。is [not] div by是否能被某数整除,is [not] even是否为偶数,$a is [not] even by $b即($a / $b) % 2 == 0,is [not] odd是否为奇,$a is not odd by $b即($a / $b) % 2 != 0

php
php标记可以让模板中能直接使用php语言。

section,sectionelse
section用来循环显示数组的数据,name和loop是必须的参数。name表示嵌套名. section 可以嵌套使用,但是名字必须各不相同。loop表示循环的次数. sectionelse在loop参数为空的输出。start用来规定循环开始的指针,如果值为负则从数组尾部计算开始的指针,默认为0.step表示循环的步数,为负则反向循环,默认为1.max设定循环的最大步数.show决定是否显示section.
section也有自己的变量处理section属性,用{$smarty.section.sectionname.varname} 来显示.

index
index用来显示当前循环的指针,从0开始.

index_prev
用来显示前一次循环的指针,从-1开始

index_next
用来显示后一次循环的指针.

iteration
显示当前循环的次数,从1开始.

first
如果当前循环为第一个循环,则值为true.

last
如果当前循环为最后一个循环,则值为true.

rownum
同iteration.

loop
显示最后一次循环的指针,可以用在section中间的任何地方,也可以用在section之后.

show
show 决定是否显示section.

total
显示总共循环的次数,可以用在section中间的任何地方,也可以用在section之后.

strip
去掉多余的空格
通常の関数
assign
assign は、テンプレートを実行するときに変数値を割り当てるために使用されます。var は必須のパラメーターです。

counter
counter はカウントを出力するために使用されますが、名前は次のように指定する必要があります。 name はカウンタ名を表し、デフォルトは Default.start がカウントの初期値を表し、デフォルトは 1 です。カウント間隔をスキップします。デフォルトは 1.direction はカウントの方向 (上または下) を表し、デフォルトは up.print です。値を出力するかどうかを表します。デフォルトは true です。assign はテンプレートを定義します。変数とカウンターの出力は、assign で定義された変数に割り当てられます。

cycle
Cycle name はループ内で値のセットを表示するために使用されます。name はサイクル名を表し、values("value 1","value 2",...) はループ内で表示される値のセットを表します。 print は、次の値を表示するかどうかを示します。delimiter は、値の区切り文字を決定します。デフォルトは、assign で定義された変数に代入されます。 🎜>

debug debug は、値が割り当てられたすべての変数を表示できますが、出力属性によって表示される形式 html または javascript が決まります。デフォルトは html です。

eval
eval は、変数を変数に挿入するために使用されます。 var は挿入された変数名で、assign は出力を変数に割り当てます。

fetch
は、ファイルの内容を取得し、ローカル ファイル、http ファイル、および ftp ファイルを取得するために使用されます。 assign は出力を変数に代入します。

html_checkboxes
html_checkbox は、指定されたデータでチェックボックスを作成するために使用されます。 name はチェックボックスの名前を表します、values はチェックボックスの値を表します、output はチェックボックスの表示を表します、selected は選択されたオプションの値を表します、options はチェックボックスのセットの値と表示を表します、separator は各チェックボックスを区切る記号、およびラベルは出力ラベルへの追加を表します。デフォルトは true です。

html_image
html_image は、画像の HTML タグを作成するために使用されます。高さと幅に値が割り当てられていない場合、それらは自動的に生成されます。 file は画像のパス、height、width、alt は html タグと同じ、basedir は画像の相対パスから始まるディレクトリのパス、デフォルトはサーバーのルート ディレクトリです。 href は画像へのリンクを定義します。

html_options
出力ドロップダウン リスト。パラメータは名前、値、出力、選択済み、オプションです。

html_radios
出力ラジオ ボタン。パラメータはチェック ボックスと同じです。

html_select_date
prefix は、各ドロップダウン リスト名の接頭辞を定義します。デフォルトは Date_ です。 time は使用する時間を決定し、デフォルトは現在時刻です。 start_year は、ドロップダウン リストが開始する年を決定します。これは、年または現在の年からの相対年数で表すことができます。デフォルトは現在の年です。 end_year は、ドロップダウン リストが終了する年を決定します。これは、年または現在の年からの相対年数で表すことができます。デフォルトは現在の年です。 display_days は日付を表示するかどうかを決定します。 display_months は月を表示するかどうかを決定します。 display_year は年を表示するかどうかを決定します。 month_format は月を表示する形式を決定し、デフォルトは %B です。 day_format は日付の表示形式を決定し、デフォルトは %02d です。 day_value_format は日付値の形式を決定します。デフォルトは %d です。 month_value_format は月の値の形式を決定します。デフォルトは %m です。 year_as_text は、年をテキスト形式で出力するかどうかを決定します。 reverse_years は、各年を逆順に出力するかどうかを決定します。 field_array は、変数のセットを取得するために使用されます。name[日]、名前[月]、および名前[年]の形式でフォームから値を取得できます。 day_size、month_size、year_size はサイズ タグを追加します。 all_extra、day_extra、month_extra、year_extra は、タグを選択または入力するための追加の属性を追加します。 field_order は年、月、日のドロップダウン リストの順序を決定します。デフォルトは MDY です。 field_separator 異なるドロップダウン リスト間の区切り文字。デフォルトは n です。 year_empty、month_empty、day_empty は、各ドロップダウン リストの最初の列に表示される内容です。

html_select_time
prefix は、各ドロップダウン リスト名の接頭辞を定義します。デフォルトは Time_ です。 time は使用する時間を決定し、デフォルトは現在時刻です。 display_hours は時間を表示するかどうかを決定します。 display_ minutes は、分を表示するかどうかを決定します。 display_seconds は秒を表示するかどうかを決定します。 display_meridian は、午前と午後のどちらを表示するか、つまり午前/午後を表示するかを決定します。 use_24_hours は、24 時間形式を使用するかどうかを決定します。 minutes_interval は、分の間隔を決定します。 Second_interval は間隔を秒単位で決定します。 field_array は変数のセットを取得するために使用されます。name[Hour]、name[Minute]、name[Second] を使用してフォームから値を取得できます。 all_extra、hour_extra、minut_extra、second_extra、meridian_extra は、select タグまたは input タグに追加の属性を追加します。

html_table
loop定义用于循环的一组数据。cols决定列的数目,rows决定行的数目,如果其中一个为空,另一个有值,则根据元素个数和有值的属性来计算另一个的值,两者的默认值为3。inner决定元素的列举方向cols则列跟着列排列,rows则行跟着行排列,默认为cols。table_attr,tr_attr,td_attr分别为table,tr,td增加标签,如果tr_attr,td_attr是数组,将会循环增加标签。trailpad用来填充最后一行没有值的单元格,默认是 。hdir决定每行元素的排列方向,从左到右right或从右到左left,默认为right。vdir决定每列的排列方向,从上到下down或从下到上up,默认为down。

math
进行数字运算操作。equation和var是必须的。equation定义运算式,可以使用的运算符有+, -, /, *, abs, ceil, cos, exp, floor, log, log10, max, min, pi, pow, rand, round, sin, sqrt, srans and tan。var给运算变量赋值。format确定结果的格式。assign将输出赋给一个参数。

mailto
使用mailto函数能使网络蜘蛛很难获取你的email地址,但是能在网页上正常显示,因为他把email地址进行了加密处理。address是必须的,定义email地址。text是显示在页面上的文本内容,默认是email地址。encode是加密email地址的方式,可以是none,hex或javascript,默认是none。如果要把邮件发给其他的邮箱,可以用cc抄送,email地址之间用,分割。bcc则为密件抄送。subject是邮件主题。newsgroups是发表内容的新闻组,新闻组之间用,隔开。extra添加附加标签。followupto意思不知。

textformat
textformat用来格式化文本,他会去掉空格和特殊字符,和规定行宽和缩进。style规定当前的格式,indent规定缩进的位数。indent_first规定第一行的缩进。indent_char用来缩进的字符,默认是一个空格。wrap规定行宽,即一行的字符数,默认是80。wrap_char规定每行的分隔符,默认是\n。wrap_cut决定是否分割单词。assign将输出分配给变量。
常量
SMARTY_DIR
是到smarty类目录的完全路径,必须以/结束。如果没有定义,将会自动决定路径.

SMARTY_CORE_DIR
是到smarty类core文件目录的完全路径,必须以/结束。如果没有定义,将会自动定义为smarty_dir路径下面的子目录.


变量

$template_dir
默认的模板目录名,默认为"./templates".
$compile_dir
默认的编译模板目录名,默认为"./templates_c"
$config_dir
默认的config文件目录名,默认为"./configs".
$plugins_dir
默认的插件目录名,默认为"plugins".
$debugging
debugging控制台。即一个显示变量的窗口.
$debug_tpl
debug窗口的模板
$debugging_ctrl
另一种控制debugging的方法。
$autoload_filters
对所有的模板使用过滤程序,这个变量是一个数组,其中关键字是过滤的类型,值是过滤的名字。
$compile_check
每次php执行将是否查看模板的内容是否改变。

$caching
决定是否缓存文件执行生成的文件。
$cache_dir
默认的模板缓存目录名,默认为"./cache".
$cache_lifetime
缓存的模板的过期时间,以秒计算. $caching值为-1则缓存的模板永不过期.

最後に、参考までに私が使用している例を示します。

error_reporting(7);
$TurnDot = substr(PHP_OS, 0, 3) == 'WIN' ? ";" : ":" ;
$doc_root=$_SERVER['DOCUMENT_ROOT'] // デフォルトでルートパスを取得します
/ /$doc_root="E:/Myweb/an-cool.com/Web" ; //指定されたパスは次のとおりです
$lib_root=".".$TurnDot.$doc_root."/shopadmin"。 $TurnDot.$ doc_root."/shopadmin/inc".$TurnDot.$doc_root."/".$TurnDot.$doc_root."/jpgraph/src/".$TurnDot.$doc_root."/Smarty/libs/" .$TurnDot. $doc_root."/Smarty";
ini_set("include_path",$lib_root);
include("conf.global.php"); // ここではグローバル設定ファイルを読み込みます。 🎜>$Templates_root = $doc_root."/templates"; // テンプレートのルート ディレクトリを定義します
define("Templates",$Templates_root);
$templates = isset($INFO['templates']) $ INFO[' テンプレート'] : 'デフォルト' ;
include_once('Smarty.class.php');
$tpl = new Smarty(); インスタンス オブジェクト $tpl
$tpl->debugging = false;
tpl-> templates "/"。パブリッシュ時に true
$tpl- を使用します >left_delimiter = '<{';
$tpl->right_delimiter= '}>>';
$tpl->assign("template_dir", $INFO['site_url']."/ templates/".$templates ); //テンプレートパス
$tpl->assign("Site_Url", $INFO['site_url']);
$tpl->assign ("LanguageIs", $INFO['IS']); //言語パックの種類
$tpl->assign("HtmlTitle", $INFO['site_title']) ; //TITLE コンテンツ
$ tpl->assign("HtmlMeta", $INFO['meta_keyword']) //META コンテンツ
?>





声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。