您好,欢迎来到菜鸟吧源码网-本站资源仅供学习与参考,禁止用于商业或违法行为!
  • 首 页
  • 下载APP
  • 公告:菜鸟吧APP于2024.9.15正式上线,请首页右上角进入下载,本站资源均来源于互联网及会员投稿发布,所有资源仅供学习参考研究使用,请勿商用或其它非法用途,商用请购买正版,否则产生一切后果由用户自行承担!谢谢!

     

    当前位置:主页 > 站长学堂 > phpcms >
    phpcms关于url路由在二次开发中的使用方法介绍-实现泛解析
    时间:2019-10-17 13:58 作者:菜鸟哥 浏览:收藏 挑错 打印

    首先,路由是负责将用户请求映射到特定的 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.suibianlu.com 或者 baike.suibianlu.com 又或者 bbs.suibianlu.com,不带http.


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







    代码如下:


    'bbs.suibianlu.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.suibianlu.com/">http://xiangmu.suibianlu.com/</a>

    地区<a href="http://dq.suibianlu.com/">http://dq.suibianlu.com/</a>

    医院<a href="http://yiyuan.suibianlu.com/">http://yiyuan.suibianlu.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'])));


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

    郑重声明:
    本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。 若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
    我们不承担任何技术及版权问题,且不对任何资源负法律责任。
    如无法下载,联系站长索要。
    如有侵犯您的版权,请给我们来信:cainiaovip8@qq.com,我们尽快处理。

    phpcms制作图片频道模板的方法phpcms制作图片频道模板的方法
    PHPCMS V9版本怎么做才能单页面做频道时也可编辑内容PHPCMS V9版本怎么做才能单页面做频道
    phpcms v9和discuz X3.1实现同步登陆退出论坛免激活的教程phpcms v9和discuz X3.1实现同步登陆退