服务器之家:专注于服务器技术及软件下载分享
分类导航

DEDECMS|帝国CMS|Discuz|PHPCMS|Wordpress|ZBLOG|ECSHOP|苹果CMS|极致CMS|CMS系统|

服务器之家 - 建站程序 - PHPCMS - phpcms关于url路由在二次开发中的使用方法介绍-实现泛解析

phpcms关于url路由在二次开发中的使用方法介绍-实现泛解析

2019-10-18 13:52phpcms教程网 PHPCMS

phpcms v9有一个很强大的url路由功能,那么具体他是用来做什么的,怎么用呢?下面来给个说明:

首先,路由是负责将用户请求映射到特定的 MVC 控制器操作.v9默认的路由文件是 caches\configs\route.php ,默认路由如下:

 

复制代码

代码如下:


'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.zzvips.com 或者 baike.zzvips.com 又或者 bbs.zzvips.com,不带http.

那么,比如我们有一个域名 bbs.zzvips.com ,他的动态访问地址是 m=bbs&c=index&a=init .那么我们在做过域名绑定到v9后,访问 bbs.zzvips.com 就能定位到 m=bbs&c=index&a=init ,这时候就要依靠url路由.因此定义如下路由:

 

复制代码

代码如下:


'bbs.zzvips.com'=>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.zzvips.com/">http://xiangmu.zzvips.com/</a>
地区<a href="http://dq.zzvips.com/">http://dq.zzvips.com/</a>
医院<a href="http://yiyuan.zzvips.com/">http://yiyuan.zzvips.com/</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'])));

 

这里的定义方式,数据的格式一定要正确.

延伸 · 阅读

精彩推荐
  • PHPCMSphpcms v9去除盛大连接 关闭盛大通行证的修改方法

    phpcms v9去除盛大连接 关闭盛大通行证的修改方法

    phpcms v9默认开启了盛大连接,直接使用盛大通告证登录网站,但是盛大通告证的覆盖面有限,比不上QQ或者支付宝,甚至不如人人网、豆瓣之类,于是有朋...

    phpcms教程网5562019-10-13
  • PHPCMSphpcms转移到虚拟空间的详细步骤

    phpcms转移到虚拟空间的详细步骤

    本文向大家介绍phpcms从本地转移到虚拟空间的步骤,转移过程需要改动一部分文件,这里提供如何改动这些文件,以保证你可以顺利转移PHPCMS ...

    phpcms教程网4232019-10-13
  • PHPCMSphpcms的栏目缓存无限级罗列展示处理代码(亲测)

    phpcms的栏目缓存无限级罗列展示处理代码(亲测)

    本文为大家详细介绍下phpcms的栏目缓存无限级罗列展示是怎么实现的,粗测试了一下,效果还不错,有需求的朋友可以参考下哈,希望对大家有所帮助 ...

    phpcms教程网8642019-10-11
  • PHPCMSphpcms V9实现QQ登陆OAuth2.0提供下载

    phpcms V9实现QQ登陆OAuth2.0提供下载

    phpcmsV9使用的QQ登陆依然是OAuth1.0,但现在腾讯已经不审核使用OAuth1.0的网站了。这对于使用pc的站长来讲是一个无比巨大的坑。经过对phpcms论坛的一位同学做...

    phpcms教程网3402019-10-11
  • PHPCMS数据库导入成功,phpcms打不开

    数据库导入成功,phpcms打不开

    问:,数据库导入成功,phpcms打不开 答:您好,查看此域名是解析到 云主机 上的,报错来看应该是您导入的数据库不完整,还差session的表,请您核实 若需...

    未知1822023-05-07
  • PHPCMS如何设置PhpCms广告模块管理 PhpCms广告模块管理图文教程

    如何设置PhpCms广告模块管理 PhpCms广告模块管理图文教程

    PhpCms广告模块管理图文教程,下面给大家总结一下 ...

    PHPCMS教程网3782019-10-14
  • PHPCMSphpcms怎么上传歌曲文件

    phpcms怎么上传歌曲文件

    phpcms上传歌曲文件的方法:首先依次打开“设置-站点管理-修改”;然后在附件配置的“允许上传附件类型”中添加自己需要的类型;接着打开“添加模型...

    未知1522023-05-07
  • PHPCMSphpcms常见问题解答

    phpcms常见问题解答

    1.为什么phpcms首页幻灯片怎么显示不出来? 答:需要设置文章的 标题图片 如果设置标题图片,则可以在首页以及栏目页以图片方式链接到文章。 2.自定义...

    phpcms教程网2712019-10-07