phpcms关于url路由在二次开发中的使用方法介绍-实现泛解析
2014-06-05 17:44
796 查看
首先,路由是负责将用户请求映射到特定的 MVC 控制器操作.v9默认的路由文件是 caches\configs\route.php ,默认路由如下:
default是默认路由,在没有任何匹配的情况下,将映射到content模块index文件的init方法.
我们再来看下路由是在哪里被处理的.打开\phpcms\libs\classes\param.class.php ,找到下面一句代码:
这里读取路由配置,根据常量 SITE_URL 查找是否存在路由配置,如果存在就加载,否则就加载默认的default配置.
SITE_URL这个常量是做什么的呢?看看他的定义:
也就是我们访问的域名,比如 pic.jb51.net 或者 baike.jb51.net 又或者 bbs.jb51.net,不带http.
那么,比如我们有一个域名 bbs.jb51.net ,他的动态访问地址是 m=bbs&c=index&a=init .那么我们在做过域名绑定到v9后,访问 bbs.jb51.net 就能定位到 m=bbs&c=index&a=init ,这时候就要依靠url路由.因此定义如下路由:
一个完整的url路由功能就实现了.利用此功能,可以实现泛解析到不同模块,不同栏目等等.
比如给你的v9黄页模块做一个 yp.phpcms.cn 路由到 m=yp&c=index&a=init .
这样每一个模块都是一个拥有二级域名的子站了,而同时利用v9的数据表分离功能,可以实现一些较大的应用.
希望大家有好东西一起分享,诚招女性网站(prbr2百度收录2k以上)友链.谢谢.
结尾国际惯例,回复可见.
分享一个网站的泛解析处理方法:
路由如下:
其中函数 domain定义如下:
结合了联动菜单的地区,权当是抛砖引玉了.
尤其注意
这里的定义方式,数据的格式一定要正确.
'default'=>array('m'=>'content', 'c'=>'index', 'a'=>'init')
default是默认路由,在没有任何匹配的情况下,将映射到content模块index文件的init方法.
我们再来看下路由是在哪里被处理的.打开\phpcms\libs\classes\param.class.php ,找到下面一句代码:
$this->route_config = pc_base::load_config('route', SITE_URL) ? pc_base::load_config('route', SITE_URL) : pc_base::load_config('route', 'default');
这里读取路由配置,根据常量 SITE_URL 查找是否存在路由配置,如果存在就加载,否则就加载默认的default配置.
SITE_URL这个常量是做什么的呢?看看他的定义:
//当前访问的主机名 define('SITE_URL', (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : ''));
也就是我们访问的域名,比如 pic.jb51.net 或者 baike.jb51.net 又或者 bbs.jb51.net,不带http.
那么,比如我们有一个域名 bbs.jb51.net ,他的动态访问地址是 m=bbs&c=index&a=init .那么我们在做过域名绑定到v9后,访问 bbs.jb51.net 就能定位到 m=bbs&c=index&a=init ,这时候就要依靠url路由.因此定义如下路由:
'bbs.jb51.net'=>array('m'=>'bbs', 'c'=>'index', 'a'=>'init'),
一个完整的url路由功能就实现了.利用此功能,可以实现泛解析到不同模块,不同栏目等等.
比如给你的v9黄页模块做一个 yp.phpcms.cn 路由到 m=yp&c=index&a=init .
这样每一个模块都是一个拥有二级域名的子站了,而同时利用v9的数据表分离功能,可以实现一些较大的应用.
希望大家有好东西一起分享,诚招女性网站(prbr2百度收录2k以上)友链.谢谢.
结尾国际惯例,回复可见.
分享一个网站的泛解析处理方法:
路由如下:
<?php /** * 路由配置文件 * 默认配置为default如下: * 'default'=>array( * 'm'=>'phpcms', * 'c'=>'index', * 'a'=>'init', * 'data'=>array( * 'POST'=>array( * 'catid'=>1 * ), * 'GET'=>array( * 'contentid'=>1 * ) * ) * ) * 基中“m”为模型,“c”为控制器,“a”为事件,“data”为其他附加参数。 * data为一个二维数组,可设置POST和GET的默认参数。POST和GET分别对应PHP中的$_POST和$_GET两个超全局变量。在程序中您可以使用$_POST['catid']来得到data下面POST中的数组的值。 * data中的所设置的参数等级比较低。如果外部程序有提交相同的名字的变量,将会覆盖配置文件中所设置的值。如: * 外部程序POST了一个变量catid=2那么你在程序中使用$_POST取到的值是2,而不是配置文件中所设置的1。 */ /*二级域名泛解析的配置,包括以下几种 项目<a href="http://xiangmu.jb51.net/">http://xiangmu.jb51.net/</a> 地区<a href="http://dq.jb51.net/">http://dq.jb51.net/</a> 医院<a href="http://yiyuan.jb51.net/">http://yiyuan.jb51.net/</a> */</p> <p> switch($GLOBALS['domain']){ case 'www': $array = array('default'=>array('m'=>'content','c'=>'index','a'=>'init')); break;</p> <p> default: $array = array(SITE_URL=>domain( $GLOBALS['domain'] ) ); break;</p> <p> }</p> <p> return $array;
其中函数 domain定义如下:
//二级域名泛解析后的处理 function domain(){ $domain = getcache('domain','commons'); $domain_data = $domain[$GLOBALS['domain']]; if( !empty($domain_data) ){ return parse_domain($domain_data) ; } else{ header("HTTP/1.1 404 Not Found"); header("Status: 404 Not Found"); $db = pc_base::load_model('http404_model'); $db->add(); echo file_get_contents(PHPCMS_PATH.'404.htm'); } }</p> <p> function parse_domain($array){</p> <p> switch($array['type']){ case '3833'://手术项目,也即栏目 $catid = $array['keyid']; $id = $_GET['id']; $GET = $id ? array('id'=>$id,'catid'=>$catid) : array('catid'=>$catid); $newarr = array('m'=>'content','c'=>'index','a'=>$id ? 'show': 'lists','data'=>array('GET'=>$GET)); $GLOBALS['catid'] = $catid; break;</p> <p> case '3834'://城市地区 $newarr = array('m'=>'content','c'=>'city','a'=>'init','data'=>array('GET'=>array('areaid'=>$array['keyid']))); $GLOBALS['cityid'] = $array['keyid']; break;</p> <p> case '3835'://整形医院 $newarr = array('m'=>'yp','c'=>'com_index','a'=>'init','data'=>array('GET'=>array('userid'=>$array['keyid']))); $GLOBALS['hospitalid'] = $array['keyid']; break; } return $newarr;</p> <p> }
结合了联动菜单的地区,权当是抛砖引玉了.
尤其注意
$newarr = array('m'=>'content','c'=>'city','a'=>'init','data'=>array('GET'=>array('areaid'=>$array['keyid'])));
这里的定义方式,数据的格式一定要正确.
相关文章推荐
- phpcms关于url路由在二次开发中的使用方法介绍-实现泛解析
- 使用RewritePath方法实现【不同路径+任意URL后缀重写到指定页面且URL地址不变】(附源码)_AX
- 使用wxpython实现arcgis二次开发
- 微软企业库5.0 学习之路——第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——中篇
- SharePoint2010企业开发最佳实践(四)---- 关于使用可释放的 SharePoint 对象的介绍
- C# WinForm控件开发设置默认值是非常有必要的,实现起来也很容易,本文笔者为你介绍设置默认值的方法,希望能给你带来帮助。
- C#开发和使用中的几个实现方法
- 测试驱动开发方法介绍及CPPUnit使用指南
- 在ASP.NET中重写URL 方法四:在IIS5和IIS6中使用 ISAPIRewrite 来实现无扩展名的URL重写
- [EntLib]微软企业库5.0 学习之路——第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——下篇
- 微软企业库5.0 学习之路——第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——上篇
- 关于在Spring下 使用HQL 语句模糊查询的实现方法
- 使用文本语音开发包实现语音朗读功能(VB方法)
- [EntLib]微软企业库5.0 学习之路——第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——上篇
- 测试驱动开发方法介绍及CPPUnit使用指南
- 测试驱动开发方法介绍及CPPUnit使用指南
- OpenJWeb快速开发平台使用struts2实现多语切换的方法
- topCoder上一则关于正则表达式的文章-简要介绍了其语法和使用方法
- 关于Zipalign的介绍和使用方法
- 关于Apache mod_rewrite的中文配置、使用和语法介绍(实现URL重写和防盗链功能)