已掉线,重新登录

首页 > 绿虎论坛 > 历史版块 > 虎绿林 > 开发

标题: [hu60t手册]三、路由规则

作者: @Ta

时间: 2012-05-11

点击: 7554

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。

[隐藏样式|查看源码]


『回复列表(12|隐藏机器人聊天)』

1. 不懂   帮顶
(/@Ta/2012-05-11 06:50//)

2. 这样的规则感觉很别扭
(/@Ta/2012-05-11 07:24//)

3. ●▄█★█▄▃▃▃▃▄   -__◢▅▅借过▅▅◣ ___ __▄█开坦克来顶贴█▄__ ___◥⊙▲⊙▼⊙▲⊙◤__
(/@Ta/2012-05-11 07:57//)

4. http://0gan.comule.com/hu60t/m.php/test.index.jump.xhtml
中间的index到底是啥啊?表示test/index.php看不明白啥。
(/@Ta/2012-05-11 10:31//)

5. 午睡
(/@Ta/2012-05-11 12:52//)

6. 老虎    起床了,,,,
(/@Ta/2012-05-11 14:38//)

7. @老虎会游泳 还能午睡呀!哈哈
(/@Ta/2012-05-11 18:21//)

8. 看不懂!自学就是…
(/@Ta/2012-05-12 10:15//)

9. my god.终于找到手册了,支持
(/@Ta/2014-02-08 10:39//)

10. 终于在这找到了
(/@Ta/2014-02-08 10:52//)

11. 看看老虎的框架路由,挖坟了!
(/@Ta/2015-10-02 14:35//)

12.  @寻梦xunm  我还以为是新内容。
(/@Ta/2015-10-02 21:17//)

回复需要登录

9月20日 19:07 星期六

本站由hu60wap6驱动

备案号: 京ICP备18041936号-1