phpcmsv9關於url路由在二次開發中的使用方法介紹-實現泛解析


v9有一個很強大的url路由功能,那麼具體他是用來作什麼的,怎麼用呢?下面來給個說明:php


首先,路由是負責將用戶請求映射到特定的 MVC 控制器操做.v9默認的路由文件是 caches\configs\route.php ,默認路由以下:數組

'default'=>array('m'=>'content', 'c'=>'index', 'a'=>'init')dom

複製代碼函數

default是默認路由,在沒有任何匹配的狀況下,將映射到content模塊index文件的init方法.網站


咱們再來看下路由是在哪裏被處理的.打開\phpcms\libs\classes\param.class.php ,找到下面一句代碼:this

$this->route_config = pc_base::load_config('route', SITE_URL) ? pc_base::load_config('route', SITE_URL) : pc_base::load_config('route', 'default');url

複製代碼htm

這裏讀取路由配置,根據常量 SITE_URL 查找是否存在路由配置,若是存在就加載,不然就加載默認的default配置.事件


SITE_URL這個常量是作什麼的呢?看看他的定義:ci

//當前訪問的主機名

define('SITE_URL', (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : ''));

複製代碼

也就是咱們訪問的域名,好比 pic.51aimei.com 或者 baike.51aimei.com 又或者 bbs.51aimei.com ,不帶http.


那麼,好比咱們有一個域名 bbs.51aimei.com ,他的動態訪問地址是 m=bbs&c=index&a=init .那麼咱們在作過域名綁定到v9後,訪問 bbs.51aimei.com 就能定位到 m=bbs&c=index&a=init ,這時候就要依靠url路由.所以定義以下路由:

'bbs.51aimei.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。

*/

/*二級域名泛解析的配置,包括如下幾種

                項目http://xiongbu.soyiyuan.com/

                地區http://korea.soyiyuan.com/

                醫院http://krmeilai.soyiyuan.com/

                */


switch($GLOBALS['domain']){

    case 'www':

    $array = array('default'=>array('m'=>'content','c'=>'index','a'=>'init'));

                break;


                default:

    $array = array(SITE_URL=>domain( $GLOBALS['domain'] ) );

                        break;


}


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

  }

}



function parse_domain($array){


   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;


                 case '3834'://城市地區

         $newarr = array('m'=>'content','c'=>'city','a'=>'init','data'=>array('GET'=>array('areaid'=>$array['keyid'])));

                 $GLOBALS['cityid'] = $array['keyid'];

                         break;



           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;


}

複製代碼

結合了聯動菜單的地區,權當是拋磚引玉了.

尤爲注意

$newarr = array('m'=>'content','c'=>'city','a'=>'init','data'=>array('GET'=>array('areaid'=>$array['keyid'])));

複製代碼

這裏的定義方式,數據的格式必定要正確.

開發

相關文章
相關標籤/搜索