文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2022-06-12 01:54

关注

首先,路由是负责将用户请求映射到特定的 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.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

</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'])));

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯