phpcms關于url路由在二次開發(fā)中的使用方法介紹-實現泛解析

首先,路由是負責將用戶請求映射到特定的 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 ,他的動態(tài)訪問地址是 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 >http://xiangmu.jb51.net/</a>
地區(qū)<a >http://dq.jb51.net/</a>
醫(yī)院<a >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'://城市地區(qū)
$newarr = array('m'=>'content','c'=>'city','a'=>'init','data'=>array('GET'=>array('areaid'=>$array['keyid'])));
$GLOBALS['cityid'] = $array['keyid'];
break;</p> <p>
case '3835'://整形醫(yī)院
$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> }
結合了聯動菜單的地區(qū),權當是拋磚引玉了.
尤其注意
$newarr = array('m'=>'content','c'=>'city','a'=>'init','data'=>array('GET'=>array('areaid'=>$array['keyid'])));
這里的定義方式,數據的格式一定要正確.
相關文章
完美解決phpcms圖片太大撐破表格圖片自適應圖片按比例縮小
下面小編就為大家?guī)硪黄昝澜鉀Qphpcms圖片太大撐破表格圖片自適應圖片按比例縮小。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-10-18- 這篇文章主要介紹了PHPCMS v9 安全設置、防范教程,需要的朋友可以參考下2016-09-05
PHPCMS V9 全站 Sitemaps生成實現代碼[服務器端版]
這篇文章主要介紹了PHPCMS V9 全站 Sitemaps生成實現代碼[服務器端版],需要的朋友可以參考下2016-06-08- 這篇文章主要介紹了phpcms內容詳情頁只顯示日期不顯示時間的方法,即格式化時間輸出的方法,需要的朋友可以參考下2015-06-19
- 這篇文章主要介紹了PHPCMS制作網站地圖的簡單方法,本文給出了操作步驟及標簽源碼,需要的朋友可以參考下2015-06-19
- 這篇文章主要介紹了PHPCMSV9父欄目調用子欄目的方法,本文講解了在二級欄目列表頁調用、在一級欄目列表頁調用兩種方法方式,需要的朋友可以參考下2015-06-19
- 這篇文章主要介紹了PHPCMS使用date函數實現自動更新頁腳年月的方法,本文主要還是可以學習到date函數的用法了,需要的朋友可以參考下2015-06-19
- 這篇文章主要介紹了phpsso忘記密碼的解決辦法,本文用PHPCMS的密碼及encrypt值替換數據表解決了這個問題,方法還是挺靠譜的,只是操作要求有點,需要的朋友可以參考下2015-06-19
- 這篇文章主要介紹了phpcms 退出無法同步通知discuz問題的解決方法,需要的朋友可以參考下2014-12-15
phpcms v9列表頁如何調用子欄目如首頁>產品中心>產品類型a
phpcms v9列表頁如何調用子欄目如:首頁>產品中心>產品類型a>產品類型a11,在列表頁產品類型a中,包括產品類型a1、產品類型a2、產品類型a32014-09-24