0. 如何在smarty里使用函数、类方法?
smarty3可以直接调用php的函数和类方法,如:
{date("Y-m-d H:i:s")}
这将直接输出date()函数的值。
类的静态方法也一样,比如调用hu60类的getmyurl()静态方法:
{hu60::getmyurl()}
1. xhtml/wml自适应的变量调节器
smarty中用来在输出之前格式化字符串的“函数”被称为变量调节器,它的介绍见此处
smarty2模板手册(除了这条,你也可以看看其他条目。虽然有些内容过期了,但还是很详细的。英汉对照。)
hu60t中定义了一个名为code的变量调节器,它可以帮你进行html实体编码、换行转换、wml的$转成$$。
参数1:把换行符(\r\n、\r或\n)转换为什么。取值有:
true或1(转成 ),在html属性值里需要用这种转换。
2(转换为<br/>)。
其他值(转换为指定的字符串)。
默认值是false。
参数2 是否不把空格转换为
false 会把空格转成
true 不把空格转成
使用例子:
<a href="{hu60::getmyurl()|code}">刷新本页</a>
例2:php:
$tpl->assign('lrc',"当天际传来第一道曙光\n振翅飞翔 充满力量\n阴霾终究会沐浴阳光\n我们在 海风中 歌唱");
tpl:
无换行:{$lrc|code}<br/>
正常:{$lrc|code:2}<br/>
只有一个空格:{$lrclcode:2:true}
(注:html/wml把没有转换为 的多个空格当一个空格处理,所以只有一个空格)
2. 变量调节器cut
hu60t还定义了一个用于分割utf-8字符串的调节器cut,在下文介绍str::cut()时会详解。
3. class hu60
以下是hu60类的静态方法(采用php手册的参数类型、返回值说明方式):
string getmyurl(array $page=array())
取得当前页面的相对路径。
例:当前页面是m.php/a.b.wml?d=e&f=g,hu60::getmyurl()将返回a.b.wml?d=e&f=g
可选的参数$page是一个关联数组,包含了想要替代的$PAGE中的键值。
例:上例改成hu60::getmyurl(array('bid'=>'xhtml')),将返回a.b.xhtml?d=e&f=g
string load_page(string $cid, string $pid, string $bid)
返回指定cid、pid、bid的php的路径。
它会使用hu60t的php定位规则,依次查找page/$cid/$pid.$bid.php、page/$cid/$pid.php、page/error/no_page.$bid.php、page/error/no_page.php。
它不会返回失败,因为如果被加载的文件不存在,它返回page/error/no_page.php,即使这个文件不存在也一样。
用法举例:include hu60::load_page('a','b',$PAGE['bid']);
void gz_start(integer $gzip=PAGE_GZIP)
该方法尝试开启页面的gzip压缩,可选的参数是gzip压缩级别(1~9启用gzip。0或false不启用gzip,但启用输出缓冲区,具体可以看一下class/hu60.php)。
如果浏览器或服务器不支持,或者服务器禁用gzencode(),gzip压缩不会被开启,但仍然会开启输出缓冲(ob_start)
该方法没有返回值。调用后可以通过$PAGE['gzip']判断gzip压缩是否开启。
如果参数留空(例 hu60::gz_start()),gzip压缩级由配置文件config/system.php中的PAGE_GZIP决定
void gz_stop(void)
关闭gzip压缩,清空并关闭输出缓冲。在此之前的输出都不会被显示。
object tpl(boolean $new=false)
此方法返回一个smarty类的实例,并且已经被hu60t配置好。
如果$new=false,多次调用得到的是同一个实例。如果$new=true,每次调用都会产生一个新的实例。
hu60::tpl()在模板内预设了两个引用变量,$page和$user,分别是全局变量$PAGE和$USER的引用。在下一节“开发规范”中将提到$USER。因为是引用,所以在模板中对$page和$user的修改也会使$PAGE和$USER的值改变。
hu60::tpl()在模板内预设了三个常用变量:$cid、$pid、$bid,方便在模板中输出本页或目标页的URL。(采用值传递,修改它们不会影响到$PAGE数组中相同的值)
void start(boolean $nogzip=false, boolean $notpl=false)
这个函数初始化hu60t的环境,应该在每个页面php开始时被调用。
它可以自动调用hu60::gz_start()和hu60::tpl(),你不需要再去调用。被建立的模板引擎实例是全局变量$tpl。
通过两个参数可以不让hu60::start开启gzip或初始化模板引擎。
例:page/test/a.php
<?php
hu60::start();
$tpl->display('tpl:a');
boolean reg_page_bid(string $bid, string $func=null)
注册新的页面类型(bid)。
$bid是必须是一个只含a-z0-9下划线(_)或减号(-)的字符串。
$func是一个用来判断浏览器是否支持该bid的函数,具体怎样写见另一节“添加新的页面类型”。
如果$func=null或未指定$func,则认为$func="hu60_page_$bid",并尝试自动加载FUNC_DIR."/hu60.page.$bid.php"来载入该函数。
返回值:
bid已注册或成功注册均返回true
失败返回false
例:hu60::reg_page_bid('html'); //将自动加载func/hu60.page.html.php并检查是否存在函数hu60_page_html(),如存在,则注册成功,返回true;否则返回false。
一般在sub/regbid.php集中注册bid。
boolean get_page_mime(void)
依次调用已注册的bid的回调函数,直到找到一个适合当前浏览器的bid。自动调整$PAGE['bid'],并设置$PAGE['mime']。
如果通过回调函数找到了合适的mime,返回true。否则,将使用默认的bid和mime(在config/system.php设置),并返回false
你在页面php中不需要调用该函数,m.php已调用它设置好了$PAGE['bid']和$PAGE['mime']。
{hu60::getmyurl()|code}
{form::select("abd", [1,2,3,4,5], ["a","b","c","d","e"])}
php处理并得到原始数据。
模板加工原始数据并输出。
像“把多于20字的标题截断”等这种和显示相关的处理不要让php进行,而应该交给模板。
因为这样的话以后我们想把标题改成30字就不需要修改php了。
同样,读取参数、查询数据库等操作也一定不要写进模板,除非那是公共head或foot(模板不支持include_php了,动态调用也只能写成模板,比如hu60wap6取新内信的操作就得在tpl:comm.head里进行)。
再低调的路过Smarty-百度百科
这个框架我是在边写文档边修改啊,我得等文档写完再举例子。