亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

Smarty模板變量與調節器實例詳解

2024-05-05 00:10:26
字體:
來源:轉載
供稿:網友

本文實例講述了Smarty模板變量與調節器。分享給大家供大家參考,具體如下:

Smarty中assign說明

可能有人在學習smarty的時候已經學習了一些php框架,如tp、laravel、Yii等,這里拿tp框架的assign和smarty做一些比較。

$name=thinkphp;$this->assign('name',$name);$this->display();
$smarty=new Smarty();$smarty->assign('name','smarty');$smarty->display(index.tpl);

上面兩段代碼片分別是tp和smarty(千萬別混淆tp和smarty,一個是開源的框架,一個是模板設計引擎)。

tp在視圖模塊調用是 {$name}{$name},等同于php里的, <?php echo($name);?>,smarty中是在index.tpl用{$name}調用。注意模板標簽的{和$之間不能有任何的空格,否則標簽無效。

數組變量

$smarty = new Smarty;$smarty->assign('smarty',   array('name'=>'smarty'   'user' => 'sm')));$smarty->display('index.tpl');

index.tpl

{$smarty.name}<br>{$smarty.user}<br>
<?php$smarty->assign('data',  array(  'smarty',  'sm',));$smarty->display('index.tpl');?>

index.tpl source:

{$Contacts[0]}<br />{$Contacts[1]}<br />

在tp中的調用有兩種方法,如下:

$data[name]='thinkphp';$data[user]='tp';$this->a``ssign('data',$data);

這里視圖調用有兩種方法:

Name:{$data.name}user:{$data.user}
name:{$data['name']}name:{$data['user']}

同理對象如下所示:

首先是smarty:

name: {$data->name}<br>user: {$data->user}<br>

tp:

$data->name='thinkphp';$data->user='tp';$this->assign('data',$data);$this->display();

也有兩種調用方式:

name:{$data->name}user:{$data->user}
name:{$data:name}user:{$data:user}

smaty和thinkphp是不是有異曲同工之妙呢,所以我們學習框架之前學習smarty是很有幫助的。

變量調節器

為什么先講調節器呢,因為我覺得這部分其一比較通俗簡單,其二后面一些內容也會涉及到調節器的內容。按我的理解smarty的內置調節器就如同php里面內置函數一樣起簡化編程的作用。

調節器一般用法

變量調節器作用于變量、自定義函數或字符串。變量調節器的用法是:‘|'符號右接調節器名稱。變量調節器可接收附加參數影響其行為。參數位于調節器右邊,并用‘:'符號分開。

capitalize

變量所有單詞首字母大寫作用,和php的ucword()作用相同。

<?php$smarty->assign('articleTitle', 'next x-men film, x3, delayed.');?>
//Where the template is:{$articleTitle}{$articleTitle|capitalize}{$articleTitle|capitalize:true}

//Will output:
next x-men film, x3, delayed.
Next X-Men Film, x3, Delayed.
Next X-Men Film, X3, Delayed.

cat

將cat里的值后接到給定的變量后面。

<?php$smarty->assign('articleTitle', "Psychics predict world didn't end");?>
//index.tpl:{$articleTitle|cat:" yesterday."}

//OUTPUT:
Psychics predict world didn't end yesterday.

count_characters

<?php$smarty->assign('articleTitle', 'Cold Wave Linked to Temperatures.');?>
//Where template is:{$articleTitle}{$articleTitle|count_characters}//默認是false不計算空格{$articleTitle|count_characters:true}//true確定計算空格字符。

//Will output:
Cold Wave Linked to Temperatures.
29
33

count_paragraphs,count_sentences,count_words

分別是計算變量里的段落數量,計算變量里句子的數量,計算變量里的詞數作用,這里不一一舉例。

default

為變量設置一個默認值。當變量未設置或為空字符串時,將由給定的默認值替代其輸出。Default需要一個參數。

<?php$smarty->assign('articleTitle', 'Dealers Will Hear Car Talk at Noon.');$smarty->assign('email', '');?>
//Where template is:{$articleTitle|default:'no title'}{$myTitle|default:'no title'}{$email|default:'No email address available'}

//Will output:
Dealers Will Hear Car Talk at Noon.
no title
Noemail address available

lower和upper

這里不想講多少,一個是將字符串小寫,一個大寫。

replace和regex_replace

使用正則表達式在變量中搜索和替換,語法來自Php的preg_repalce函數。一種在變量中進行簡單的搜索和替換字符串的處理。等同于php的str_replace()函數。 不懂得去看php手冊。雖然Smarty支持regex正則調節器,但最好還是直接使用php的正則表達式,要么使用自定義函數或調節器。因為正則法則屬于程序代碼,其并不認為是內容外在表現的一部份。

date_format和string_format

主要說明一下這兩個調節器。

date_format

本調節器將格式化的日期和時間經php函數strftime()處理。Unix時間戳、mysql時間戳及由年月日組成的字符串格式的日期可以傳遞到smarty經php函數strtotime()解析。設計者可以使用date_format完全控制日期格式,如果傳給date_format的日期為空值,但提供了第二個參數,那么將使用第二參數格式化時間。
從Smarty-2.6.10開始,傳遞給date_format的數字值(除了mysql時間戳,見下文)總是當作unix時間戳。
在2.6.10版本之前,符合時間戳格式的數字型字符串(如YYYYMMDD)同樣可以經由php函數strtotime()處理,因為有時(取決于strtotime()的底層實現)strtotime()接收日期字符串參數,而不是時間戳。
唯一的例外是mysql時間戳:它們本身只有數字,并且是14個字符的長度(YYYYMMDDHHMMSS),mysql時間戳優先于unix時間戳。

<?php$config['date'] = '%I:%M %p';$config['time'] = '%H:%M:%S';$smarty->assign('config', $config);$smarty->assign('yesterday', strtotime('-1 day'));?>
//This template uses $smarty.now to get the current time:{$smarty.now|date_format}{$smarty.now|date_format:"%D"}{$smarty.now|date_format:$config.date}{$yesterday|date_format}{$yesterday|date_format:"%A, %B %e, %Y"}{$yesterday|date_format:$config.time}

//This above will output:
Jan 1, 2022
01/01/22
02:33 pm
Dec 31, 2021
Monday, December 1, 2021
14:33:00

date_format轉換標記:

%a - 當前區域星期幾的簡寫
%A - 當前區域星期幾的全稱
%b - 當前區域月份的簡寫
%B - 當前區域月份的全稱
%c - 當前區域首選的日期時間表達
%C - 世紀值(年份除以 100 后取整,范圍從 00 到 99)
%d - 月份中的第幾天,十進制數字(范圍從 01 到 31)
%D - 和 %m/%d/%y 一樣
%e - 月份中的第幾天,十進制數字,一位的數字前會加上一個空格(范圍從 ' 1' 到 ‘31')
%g - 和 %G 一樣,但是沒有世紀
%G - 4 位數的年份,符合 ISO 星期數(參見 %V)。和 %V 的格式和值一樣,只除了如果 ISO 星期數屬于前一年或者后一年,則使用那一年。
%h - 和 %b 一樣
%H - 24 小時制的十進制小時數(范圍從 00 到 23)
%I - 12 小時制的十進制小時數(范圍從 00 到 12)
%j - 年份中的第幾天,十進制數(范圍從 001 到 366)
%m - 十進制月份(范圍從 01 到 12)
%M - 十進制分鐘數
%n - 換行符
%p - 根據給定的時間值為 am' 或pm',或者當前區域設置中的相應字符串
%r - 用 a.m. 和 p.m. 符號的時間
%R - 24 小時符號的時間
%S - 十進制秒數
%t - 制表符
%T - 當前時間,和 %H:%M:%S 一樣
%u - 星期幾的十進制數表達 [1,7],1 表示星期一
%U - 本年的第幾周,從第一周的第一個星期天作為第一天開始
%V - 本年第幾周的 ISO 8601:1988 格式,范圍從 01 到 53,第 1 周是本年第一個至少還有 4 天的星期,星期一作為每周的第一天。(用 %G 或者 %g 作為指定時間戳相應周數的年份組成。)
%W - 本年的第幾周數,從第一周的第一個星期一作為第一天開始
%w - 星期中的第幾天,星期天為 0
%x - 當前區域首選的時間表示法,不包括時間
%X - 當前區域首選的時間表示法,不包括日期
%y - 沒有世紀數的十進制年份(范圍從 00 到 99)
%Y - 包括世紀數的十進制年份
%Z 或 %z - 時區名或縮寫
%% - 文字上的 `%' 字符

string_format

一種格式化字符串的方法,例如格式化為十進制數等等。實際運用的是php的sprintf()函數。

<?php$smarty->assign('number', 23.5787446);?>
//Where template is:{$number}{$number|string_format:"%.2f"}{$number|string_format:"%d"}

//Will output:
23.5787446
23.58
24

獲取配置文件變量

加載配置文件后,配置文件中的變量需要用兩個井號”#”包圍或者是smarty的保留變量$smarty.config.來調用(下節將講到),第二種語法在變量作為屬性值嵌入至引號的時候非常有用,詳細可參考雙引號里值的嵌入。

假如配置文件如下:

//config file - foo.conf:pageTitle = "This is mine"bodyBgColor = '#eeeeee'tableBorderSize = 3tableBgColor = "#bbbbbb"rowBgColor = "#cccccc"

調用方法如下:

{config_load file='foo.conf'}//{config_load}是一個smarty內置函數。用來從配置文件中加載config變量(#variables#)到模版<html><title>{#pageTitle#}</title><body bgcolor="{#bodyBgColor#}"><table border="{#tableBorderSize#}" bgcolor="{#tableBgColor#}"><tr bgcolor="{#rowBgColor#}"><td>First</td><td>Last</td><td>Address</td></tr></table></body></html>

保留變量

我們一般訪問環境變量的時候就使用保留變量{$smarty}。

請求變量諸如GET,GET,_POST,COOKIE,COOKIE,_SERVER, ENVandENVand_SESSION (參考requestvarsorder和requestvarsorder和request_use_auto_globals) 下面舉例說明他們的用法:

//http://www.example.com/index.php?page=fo{$smarty.get.page}//從URL獲取page的值,等價于$_GET['page']{$smarty.post.page}//獲取page的變量,等價于$_POST['page']{$smarty.cookies.username}//獲取cookie信息,等價于$_COOKIE['username']{$smarty.env.PATH}//獲取PATG環境變量{$smarty.session.id}//獲取會話變量,等價于$_SESSION['id']{$smarty.request.username}

盡管Smarty提供了直接訪問php超級變量的便利,但仍需謹慎使用。一般來說,GET、POST和REQUEST通常用來直接取值,但更常用的方法是通過訪問SERVER、ENV、COOKIE、SESSION變量以防止(不安全值)混進模版底層代碼。一個好的習慣是給模板變量賦具體的初始值。

1.{$smarty.now}

返回自從Unix 紀元(格林威治時間 1970 年1月1日00:00:00)到當前時間的秒數,可以直接通過變量調節器date_format輸出顯示。應注意的是time()在每次觸發時被調用;例如,腳本執行完需要3秒鐘,在始末分別調用$smarty.now的話將顯示3秒的差異。

{$smarty.now|date_format:'%Y-%m-%d %H:%M:%S'}

2.{#smarty.const}

訪問php常量

<?php// the constant defined in phpdefine('MY_CONST_VAL','CHERRIES');?>//Output the constant in a template with{$smarty.const.MY_CONST_VAL}<?php // php定義常量 define('MY_CONST_VAL','CHERRIES');?>

3.{$smarty.capture}

可以通過{$smarty.capture}變量捕獲內置的{capture}…{/capture}模版輸出。

4.{$smarty.config}

獲取配置變量

5.{$smarty.section}

{$smarty.section}用來指向{section}循環的屬性,里面包含一些有用的值,比如.first/.index等。

6.{$smarty.template}

返回經過處理的當前模板名(不包括目錄)。

7.{$smarty.current_dir}

返回經過處理的當前模板目錄名。

8{$smarty.version}、$smarty.block.child}、{$smarty.block.parent}{$smarty.ldelim}、{$smarty.rdelim}

用的少,不作說明,可以查看手冊了解更多內容。

希望本文所述對大家基于smarty模板的PHP程序設計有所幫助。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产香蕉精品视频一区二区三区| 在线观看视频亚洲| 亚洲欧美日韩精品| 日韩av免费一区| 国产成人免费av| 国产热re99久久6国产精品| 亚洲精品国精品久久99热| 国产精品亚洲第一区| 久久夜色撩人精品| 欧美自拍视频在线| 亚洲xxxxx电影| 午夜精品久久久久久久久久久久| 久久久久久午夜| 亚洲精品国产精品国自产观看浪潮| 日韩精品中文字幕在线播放| 日韩精品欧美激情| 亚洲天堂成人在线| 97精品国产91久久久久久| 97超级碰在线看视频免费在线看| 国产免费观看久久黄| 欧美日韩性生活视频| 国产欧美精品一区二区三区-老狼| 久久九九免费视频| 日韩av成人在线| 国产精品96久久久久久| 亚洲成年人在线| 国产欧美日韩免费看aⅴ视频| 久久av在线播放| 国产精品久久久久aaaa九色| 亚洲一区美女视频在线观看免费| 久久躁狠狠躁夜夜爽| 亚洲欧美在线看| 91精品国产网站| 中文字幕亚洲欧美日韩高清| 日韩电影中文字幕av| 欧美激情在线有限公司| 国内精品中文字幕| 国产精品一区二区久久久久| 91精品视频播放| 91av在线免费观看| 久久久久日韩精品久久久男男| 欧美裸身视频免费观看| 欧美小视频在线| 97在线视频精品| 成人a在线视频| 欧美成年人视频| 欧美激情亚洲激情| 久久伊人色综合| 欧美交受高潮1| 在线播放亚洲激情| 国产精品欧美激情在线播放| 91av福利视频| 福利二区91精品bt7086| 亚洲激情第一页| 亚洲国产天堂久久综合网| 亚洲成人网在线| 国产精品九九九| 日av在线播放中文不卡| 日韩av网站在线| 久久精品亚洲热| 欧美在线激情视频| 九九久久综合网站| 午夜精品一区二区三区在线视频| 日韩免费在线播放| 欧美激情综合色| 美日韩精品视频免费看| 亚洲欧美制服中文字幕| 国产成人免费av电影| 91成人在线观看国产| 国产欧洲精品视频| 人人做人人澡人人爽欧美| 日韩精品在线观看一区二区| 96国产粉嫩美女| 国产精品欧美在线| 亚洲人成电影网| 国产日韩精品入口| 黄色精品在线看| 国产成人av网| 亚洲欧美激情视频| 日韩电影大片中文字幕| 欧美综合在线第二页| 精品国产乱码久久久久酒店| 久久99精品久久久久久青青91| 国产欧美 在线欧美| 色偷偷91综合久久噜噜| 久久偷看各类女兵18女厕嘘嘘| 亚洲综合色av| 欧美麻豆久久久久久中文| 国产亚洲人成网站在线观看| 欧美激情国产精品| 亚洲一区中文字幕| 日韩精品在线观看网站| 欧美精品免费在线| 日韩成人在线播放| 亚洲国产欧美一区| 中文字幕在线观看日韩| 91免费精品国偷自产在线| 欧美激情免费在线| 精品欧美aⅴ在线网站| 日韩精品免费电影| 国产乱人伦真实精品视频| 欧美日韩国产精品一区| 7777精品久久久久久| 国产视频福利一区| 国产精品亚洲第一区| 欧美大片在线看免费观看| 国产日韩欧美在线播放| 亚洲第一天堂av| 久久精品中文字幕免费mv| 亚洲成人激情小说| 中文字幕国产亚洲| 亚洲精品视频免费| 精品国产户外野外| 亚洲天堂av在线免费观看| 精品一区二区三区四区| 国产精品精品国产| 亚洲人成自拍网站| 国产精品video| 精品亚洲国产成av人片传媒| 4k岛国日韩精品**专区| 亚洲香蕉成视频在线观看| 欧美高跟鞋交xxxxhd| 国产精品你懂得| 精品亚洲一区二区三区在线播放| 91精品久久久久久久久久| 成人激情电影一区二区| 亚洲影视九九影院在线观看| 亚洲男人天堂网站| 97精品伊人久久久大香线蕉| 欧美韩国理论所午夜片917电影| 国产v综合ⅴ日韩v欧美大片| 日韩欧美在线看| 精品女厕一区二区三区| 国产狼人综合免费视频| 日韩欧美亚洲范冰冰与中字| 精品久久久av| 亚洲aaaaaa| www.久久久久久.com| 91精品一区二区| 最新国产精品拍自在线播放| 亚洲精品一区在线观看香蕉| 欧美另类高清videos| 日韩最新在线视频| 日韩av在线电影网| 亚洲经典中文字幕| 成人午夜一级二级三级| 成人女保姆的销魂服务| 日韩av高清不卡| 日韩高清有码在线| 成人国产亚洲精品a区天堂华泰| 久久人91精品久久久久久不卡| 欧美午夜美女看片| 成人妇女淫片aaaa视频| 欧美激情一区二区久久久| 亚洲香蕉成视频在线观看| 欧美怡春院一区二区三区| 美女久久久久久久久久久| 日韩欧美一区视频| 日本精品一区二区三区在线| 九九精品视频在线观看| 成人97在线观看视频| 亚洲丁香久久久| 久久精视频免费在线久久完整在线看| 国产午夜精品视频免费不卡69堂|