hu60t
2013-12-09 02:08:33 -0500
hu60t手册
一、概述
不知道你是否有过这样的经历:要做一个WAP网站,可能不仅需要做WAP1.1(wml、简版),还要做WAP2.0(xhtml、彩版)。
由于xhtml与wml有很大的不同,特别是表单完全不兼容,所以你可能需要在写完wml模板后还要写另一份模板来实现xhtml。如果你没有进行模板分离,情况会更糟糕:你不得不因此写两个不同的php!
是否有一种方法,可以让我们只写一次代码就同时实现wml和xhtml的显示呢?我曾经尝试过自定义一些标记(它们就像论坛使用的UBB),使用两组不同的正则表达式进行替换使它们分别成为xhtml和wml,于是就出现了hu60wap程序,直到hu60wap5。在hu60wap5中我写了一个form类,实现了xhtml/wml表单的完美兼容。
但是我逐渐发现,这种把php和UBB代码混合在一起的方式是很不方便的----想要修改排版太麻烦了,特别是像我一样使用手机开发的人。我急需一种视图与逻辑分离的开发方式,但同时也要具有hu60wap5那样只写一次就同时实现wml和xhtml的显示的优点。于是,hu60t诞生了。
------
hu60t的主体是Smarty3模板引擎,我利用它的插件机制添加了很多方便WAP开发的标记,比如xhtml/wml兼容的表单、div、span等等,只要写一个模板就可以同时输出xhtml和wml。但与此同时,它也允许你为特定的xhtml和wml定制页面。
hu60t还拥有方便的路由功能,你可以使用形如m.php/bbs.tz.10086.xhtml这样的地址来传递参数,不再需要使用传统的tz.php?tzid=10086,方便搜索引擎优化,也减少打字。
hu60t实现了xhtml/wml自适应,如果浏览器不支持其中一种,它会自动使用另一种进行输出,而且可以在xhtml/wml间无缝切换。同时,使用插件机制还可以加入更多的页面类型,比如加入电脑版、触屏版等,虽然你可能因此要多写几个模板文件。
所以,还等什么呢,赶快用hu60t进行你的wap程序开发吧!
二、安装与配置
把下载到的压缩包解压到网站空间的任何一个目录,就完成安装了。赶快在浏览器中输入“http://你的域名/你安装的目录/”看看吧。
如果你看到了“欢迎使用hu60t网站开发环境”,并且能正常显示里面的例子模板,就可以使用本框架继续工作了。
如果不正常,你需要检查解压是否完整,或者你的PHP环境是否正常。
hu60t必须在PHP5中运行,我测试过Windows下的php5.2.17和php5.4.0都能正常运行它。
如果你确实发现了某些BUG使它在其他版本的PHP5中不正常,请发邮件到hu60
@139.com联系我,或者在hu60.cn论坛发贴反馈。
------
下面让我们来看看hu60t都有哪些目录和文件,下面的列表是hu60t的根目录,+代表那是一个目录,-代表那是一个文件。
+class
+config
+func
+page
+sub
+temp
-config.inc.php
-index.php
-license.txt
-m.php
现在来介绍下每个目录的用途:
class 用于存放类文件。hu60t使用了PHP5的自动加载(autoload)规则,存放在里面的类文件可以自动被加载,后面会讲到。
config 用于存放配置文件。通常把php的配置文件存放在这里。至于smarty的配置文件,存放在page目录更方便一些。
func 这里放函数和函数库。
page 应用的php(程序)、tpl(模板)和conf(Smarty配置)就存在在该目录。不过一般不直接放在该目录下,而是建一个子目录存放。
sub 这里存放一些会被调用的php代码段,比如用于批量加载配置文件的等。
temp 临时文件夹。它的子目录tplc是smarty编译文件夹,pagecache是smarty缓存文件夹(如果你启用缓存的话)。
config.inc.php 主配置文件。任何php包含它之后就可使用hu60t的常量、模板引擎和自动加载等特性。
index.php 首页,跳转到m.php/index.index.$bid
license.txt hu60t的许可证,它规定了你在使用、传播、修改和重新发布hu60t时需要注意什么。hu60t是一个自由软件,但允许并入专有软件中,只要该专有软件不是一个网站开发框架。
m.txt 所有应用的入口,为应用提供统一的“伪静态”式路由。路由规则是下节的内容。
三、路由规则
1. $PAGE变量
$PAGE是一个关联数组,保存了hu60t中所有和页面有关的参数,它的成员如下:
cid pid bid sid
ext extid
path_info path_info_arr
mime gzip
query_string
现在来看看这些成员到底是什么:
cid是class id的简写,是页面的分类。它对应着page目录下页面文件所在的子目录。比如你要写一个论坛的首页,你可以规定它的cid是bbs。然后你打开page目录,建立一个名为bbs的子目录,然后把所有论坛相关php和模板都放在里面即可。
pid可以理解为page id或php id,它是页面(php文件)的文件名。
bid可以理解为browser id(其实这是我刚想出来的。在确定它叫bid之时我自己也不知道它的英文全称是什么),它表示页面的类型。目前它的值只能是xhtml或wml,可以通过插件机制扩展。
sid是可选的。它用来方便WAP应用实现用户登陆信息的传递。一般通过Cookie传递sid,但是当用户浏览器不支持Cookie时,hu60t也提供了一种方便的方式可以在URL中传递sid,后面会提到。
mime即页面的MIME类型,如果你不知道它是什么,你应该百度一下。
gzip是页面的gzip压缩开关,当它为true时,表示允许gzip压缩(但具体是否压缩取决于config配置和浏览器是否支持)。
query_string和$_SERVER[QUERY_STRING]是一样的,区别是,它会在$_SERVER[QUERY_STRING]不为空时在其前面加一个问号(?)。它存在的目的是为了方便输出当前页的相对路径。
剩下的四个参数在下一小节讲。
------
2. URL解析
hu60t的URL是怎样的呢?通过访问测试页你应该看到了两种:
(在这里省略了URL中m.php前面的内容,完整的是http://域名/安装目录/m.php/…)
m.php/index.index.xhtml(首页)
m.php/test.index.form.xhtml(表单测试页)
可以看出,hu60t使用PATH_INFO来传递参数,并且用.来分隔多个参数。那么每个参数分别代表什么呢?来看看地址解析的表达式:
m.php/[sid/]cid.pid[.ext1][.ext2]…[.ext n].bid[/path_info]
(方括号里面的部分是可选的)
可以看出,hu60t把m.php/后面的PATH_INFO分成了好几部分,用/分开。
在地址解析时,先考察第一部分,如果它里面不含点(.),就认为它是sid,保存在$PAGE['sid']里。如果它含点(.),则认为它是第二部分,并从$_GET、$_POST或$_COOKIE中查找hu60_sid或sid,如果找到,把它设为sid,否则sid为空。
然后处理第二部分,它是由点(.)分隔的多个参数。hu60t把第一个参数设为cid,第二个是pid,最后一个是bid。而中间如果还有更多的参数,则把它们放在$PAGE['ext']和$PAGE['extid']里。两者的区别是ext是一个数组,而extid是字符串(并且在非空时总是以点结尾。它存在的目的也是为了方便输出相对URL)
最后,如果还有第三、四、五或者更多部分,则把它们放在$PAGE['path_info']和$PAGE['path_info_arr']里,前者是字符串,后者是以/分割得到的数组。
不知道你看晕了没,反正我是写晕了,我们还是举一些例子吧。
m.php/foobarboo
(sid=foobarboo,cid和pid都为默认值index,bid取默认值xhtml)
m.php/foo.bar.boo
(cid=foo,pid=bar,bid=boo)
m.php/test.index.form.xhtml
(cid=test,pid=index,bid=xhtml,$PAGE['ext'][0]='form')
m.php/foo/bar.boo.wml/a/b.c/d
(sid=foo,cid=bar,pid=boo,bid=wml,path_info='/a/b.c/d',path_info_arr=array('a','b.c','d')
------
为了安全,cid和pid的取值都有限制,它们只能取A-Za-z0-9和下划线(_)与减号(-),并且大写会转换为小写。因此,你的目录名和文件名也要遵守该规则。
------
3.内容协商
地址解析完后,hu60t会自动判断$PAGE['bid']是否有效。如果无效,或者浏览器不支持这种类型,就会自动尝试换一种合适的类型(同时会自动修改$PAGE['bid'])。
同时,该过程会自动设置合适的$PAGE['mime']
------
4. php文件定位
hu60t现在终于要include你的php文件了。(hu60t只会加载你的php,不能直接加载模板。加载模板要在你的php中进行。)不过在此之前,它要先确定你的php文件在哪里。
举例:m.php/test.aa.wml
首先,它检查page/test/aa.wml.php是否存在,如果存在,则加载它。
如果不存在,它检查page/test/aa.php是否存在,如果存在,则加载它。
否则,它检查page/error/no_page.wml.php是否存在,如果存在,则加载它。
否则,它只能加载page/error/no_page.php。如果还是不存在,你将得到一个空白页。
这样曲折的加载过程有什么意义呢?很显然,它给了你更多自由,你可以自行决定对不同的bid使用一个还是两个php。比如,大多数页面可以使用page/cid/pid.php。但如果某个页面的xhtml和wml的逻辑不同,你也可以分别写page/cid/pid.xhtml.php和pid.wml.php。
四、使用模板引擎
现在,回到我们在上一节举的例子,你已经建立了page/test/aa.php,然后该怎么做呢?像平常一样echo标记?当然不是。
在hu60t中,php的作用是完成应用的逻辑过程,比如读取数据库等操作。而页面的显示,应该交给模板引擎解决。
第一步,初始化模板引擎:
<?php
hu60::start();
/*
现在Smarty模板引擎就被初始化了,它的变量名是 $tpl
接下来,设置一些变量给模板引擎,以便在模板中显示:
*/
$tpl->assign('aa','这是aa');
$tpl->assign('bb','这是bb');
$tpl->assign(array('cc'=>10086,'dd'=>10010,'ee'=>10000));
/*
最后一步:显示模板
*/
$tpl->display('tpl:aa_test');
?>
------
现在,访问m.php/test.aa.xhtml看看吧。
什么,提示“该页未找到”?当然啦,模板文件还没有建立嘛。
那好,我现在就去建立一个模板。可是它的文件名应该是什么?
所以,这就涉及了模板文件定位的问题,这又是一个相当复杂的规则。
------
2. 模板文件定位
先来看模板路径的表达式。和先前一样,[]里的部分可省
tpl:[cid.]name[.bid]
这里的cid与bid和php文件定位里的含义一样。
name是模板文件的名称,只要不含点(.)就行。但建议只用小写字母、数字、下划线和减号。
如果cid和bid省略,则用当前页面的cid和bid代替。例,tpl:aa_test,在m.php/test.a.xhtml下就相当于tpl:test.aa_test.xhtml,在m.php/test.aa.wml下就相当于tpl:test.aa_test.wml
可以同时省略cid和bid(写成tpl:aa_test),或者只省略bid(写成tpl:test.aa_test),但是不能只省略cid。如果你写tpl:aa_test.wml,hu60t会认为aa_test是cid,wml是name。
得到cid、name和bid之后,就可以定位tpl文件了。
hu60t会首先查找page/cid/name.bid.tpl
如果不存在,查找page/cid/name.tpl
如果不存在,查找page/error/no_tpl.bid.tpl
如果不存在,查找page/error/no_tpl.tpl
是不是和php文件定位很相似呢?
在本例中,你可以只建立一个模板文件(page/test/aa_test.tpl),使用hu60t的扩展标记实现wml/xhtml兼容。
你也可以写两个模板,一个page/test/aa_test.wml.tpl,一个aa_test.xhtml.tpl。当访问m.php/test.aa.wml和m.php/test.aa.xhtml时,hu60t会自动选择对应的模板调用(在你没有通过tpl:cid.name.bid指定bid的情况下)
所以一般情况下,我们都不指定bid。调用当前目录的tpl用 $tpl->display('tpl:name'); 调用其他cid下的模板用 $tpl->display('tpl:cid.name');
嗯,就是这样。下一节将谈怎样写一个wml/xhtml兼容的模板。
五、编写xhtml/wml兼容模板
在学习本节之前,建议先大概看看smarty3中文手册,对smarty3的模板语法有些了解。
但没了解也没关系,看完本节再学也行。
这是一个smarty3.1.4手册
------
1. hu60t的模板默认分隔符是,如果不方便,你可以在php中自行修改(同时修改hu60t自带的模板)
2.开始创作
目标文件是page/test/aa_test.tpl
------
{include file="tpl:comm.head" title="这是一个测试页面"}
这句载入了hu60t已经写好的xhtml或wml头文件,file属性指定了文件的位置,title属性指定了要显示的标题。
除了title之外,还有其他的属性可以被使用:
url 指定要自动跳转的url,如 url="
http://wap.baidu.com/" time 指定自动跳转的时间,单位秒,如 time=5
如果要使跳转生效,time属性必须存在(可以time=0,表示立即跳转),而url属性却是可选的。如果url不存在,就自动刷新本页。
自动跳转在xhtml和wml中都能正常工作。
不需要对url进行编码。比如a.php?c=d&e=f,不需要把&改成& 因为tpl:comm.head在输出时会自动编码它们。
css 指定一个用于输出css的模板。默认的css="tpl:comm.css.xhtml"。你可以修改该模板,或者通过该属性重新指定一个css模板。
注意:由于模板分隔符是 { } ,所以css不能这样写:
a{color:#fff}
它们会被认为是模板标记而导致出错。应该这样写:
a { color:#fff }
或
a {
color:#fff;
}
保证大括号中间有空白,就不会出问题了。
(很显然,该属性只在xhtml下生效。)
base 当base属性不存在或base=false时,输出的头部可能包含额外的标记(比如xhtml头部会埋一个id=top的锚链接)。当base=true时,则只输出基本的头部。
写给第一次用模板的童鞋:除了file属性外,其他属性都是tpl:comm.head自定义的(你可以打开该模板看看),如果换一个模板再用相同的属性,可能完全没用。不要误以为每个模板都有这些属性。
{div class="bk1"}
这是一个块。
{/div}
它和<div></div>标记是一模一样的,可以使用div标记的任何属性。而且它有一个特别的属性wml用来规定在wml版输出什么(默认是<p></p>)
例:{div class="bk2" wml="--a--"}b{/div wml="--c--"}
在xhtml版,看到一个块里面只有b。在wml版,看到--a--b--c--
结束标记也能有属性?是有点奇怪。但你会发现它的用处的,特别是不想在wml中产生多余换行时,用{/div wml=""}{div wml="<br/>"}(用一个换行代替原来的</p><p>)是一个好办法。
{span style="color:#ff0000;" wml="<b>"}在xhtml版是红色的,在wml版是加粗的。{/span wml="</b>"}
这是<span></span>标记的替代品,它默认在wml下不输出任何东西(“1.0.20120511第二次打包”以前的版本会输出<br/>)。可以使用wml属性指定wml下输出什么。
下面有一条线?{hr}谁说的?明明是上面有一条线。
{hr}就是<hr/>的替代标记,它可以使用<hr/>原有的各种属性。同时,可以用wml属性规定在wml下输出什么(默认是<br/>--------<br/>)。
{$aa}<br/>
{$bb}<br/>
{$cc}<br/>
{$dd}<br/>
本页网址是http://{$smarty.server.HTTP_HOST}{$smarty.server.REQUEST_URI|code}
输出变量
{hu60::getmyurl()|code}
调用函数
更多的模板语法就不介绍了,看smarty3文档去。
{include file="tpl:comm.foot"}
输出wml/xhtml尾。有一个属性base,如果base=true,则不会输出底部的“[WAP1.0版]”等额外的内容。
------
下一节的内容是“xhtml/wml兼容表单”
------
补充!我居然把它忘记了。
2. {isbid}标记
{isbid}{/isbid}标记内的内容只有在bid符合当前
$PAGE[bid]时才编译到模板中。具体使用时,bid用xhtml或wml代替。
{isxhtml}aa{/isxhtml}
{iswml}bb{/iswml}
如果你通过插件机制添加了更多的bid,比如加入了xml,你还可以使用{isxml}{/isxml}。
{isbid}标记不支持嵌套,否则会出问题,请特别注意!
{isbid}标记是通过smarty的预过滤器实现的,所以你可以把它用在任何地方,包括模板标记中:
{include file="tpl:comm.{isxhtml}aa{/isxhtml}{iswml}bb{/iswml}"}
当你更换了模板定位符时(比如改成了<{ }>),isbid的定位符也会同步更改(需要使用<{isbid}>…<{/isbid}>)。
六、xhtml/wml兼容表单
0. 加载配置文件
这是前面一节漏掉的内容:在模板中加载配置文件使用
{load_conf file="conf:test.aa_bb"}
conf:[cid.]name[.bid]的规则和tpl:…的一样。
配置文件的后缀是.conf
------
1. 概述
这个表单的设计是以xhtml的form表单为基础的,在wml下则使用<anchor>等功能相似的标记来模拟。
xhtml中不同form内的标记name可以相同,但wml不行。所以hu60t会自动修改wml下重名的name,但仍然以原来的name提交。所以可以放心使用。并且,name="aa[]"这样的name也会得到正确的处理,保证wml下能正常使用。
不需要对属性值进行html实体编码,在wml中也不需要把$替换成$$,hu60t会替你完成。
为了兼容性,hu60t放弃了在wml下不支持的单选框,而复选框在wml下则用<select>模拟。
------
2. {form}
{form method="get" action="
http://wap.baidu.com/s"}
……
{/form}
就像平常使用<form>标记一样用{form}就可以了。不过{form}的属性只有以下几个:
method 表单提交的类型,get或post
action 表单提交的地址。
file 表单是否用于上传文件。如果用于上传文件,必须设置为file=true,默认是false。
enctype 表单的数据类型。它事实上只是对file属性的模拟,为了更像<form>。所以只支持(原封不动地打上去)enctype="application/x-www-form-application"(使file=false)或enctype="multipart/form-data"(使file=true)。其他表达方式都会使file=true。
{form}的其他属性都会被忽略。没有name或id属性,所以要用CSS控制显示的话可以在它外面套一层{div}
------
3. {input}
{input type="text" name="s" value="输入关键字"}
{input type="submit" value="百度一下"}
就像平常使用<input>标记一样。不过还是有些不同。来看看{input}有哪些属性:
type 是input的类型,默认是text(“默认”表示当type属性不存在时,hu60t自动把它设置为type="text")。还可以是submit(提交按钮)、checkbox(复选框)、hidden(隐藏域)、file(文件上传控件)、password(密码输入框)、textarea(多行输入框。在hu60t中,textarea与input合并了)。
name 是input的名字(提交后在$_GET、$_POST或$_FILES里的键)
value 是input的值,在type=hidden、textarea、text、password、checkbox、submit时有效。
size 是input的宽度,如size=10
如果type=textarea,则size=array(50,30)这样可以同时设置宽度和高度。
其他情况下如果size是一个数组,则取$size[0]作为input的宽度。
对submit和hidden无效。
wml(在v1.0.20120512以前,这个属性的名字是wmlnotice) 只对type=file有效。wml不支持文件上传控件,这个属性用来设置在wml输出什么。默认是什么也不输出。
cols rows 它们分别是textarea的宽和高。rows只对type=textarea有效,但cols对text和password来说等效于size。
checked 规定复选框是否默认选中。只对type=checkbox有效,取值true或false。
------
4. {select}
{select}标记的用法和<select>不同。
例:{select name="aa" value=["b","c","d","e","f"]}
它的全部属性如下:
name 就是name
value 是一个数组或关联数组。如果是关联数组,那么key将作为显示,而value作为提交给服务器的值。
例:{select name="x" value=["一"=>1,"二"=>2,"三"=>3,"四"=>4]}(这是smarty3表示关联数组的方式)
将显示 一 二 三 四,而$_REQUEST['x']收到1 2 3 4
(20120512第二次打包 更新)
本次更新重写了{select}。
value 一个数组,是选择列表框发给服务器的值。
output 一个数组,是选择列表框显示的内容,与value一一对应。如果省略了它,那么会把value显示出来。
option 一个关联数组。如果不设置value、output,设置了它,那么它的键将成为output,值将成为value。因为很难理解,所以不建议使用该属性。
selected 一个字符串或一个数组,包含了被选中的值(value)。
multiple 是否多选,true或false。
------
终于纠结地结束了,不知道你看明白了没。
下一节的内容还没想好。
番外、函数类方法列表
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']。
Back to home
Subscribe |
Register |
Login
| N