U函数,多入口跳转方法

原创
2016-06-07 11:39:13 2538浏览

例如 index.php 利用 U 方法跳转到 user.php 中,默认是不可以的
但是,使用了本方法就完全解决了此问题
大家可以加QQ群 161607701 ,大家共同学习PHP技术!


用法
关键在 U函数的第一个参数,可以使用数组形式也可以是字符串形式共两种方法处理。
例如
我想在 index.php?m=Home&c=Index&a=index 页面
跳转到 admin.php?m=Site&c=Public&a=login 页面

第一个方法 字符串形式:
U('admin.php?Site/Public/login '); => admin.php?m=Site&c=Public&a=login ;
只要第一个参数前面增加 一个 ? 做间隔即可。但是切记 这个入口必须 .php结尾 ? 后面与 TP 一样设置即可
第二个方法 字符串形式:
U(array('admin.php','Site/Public/login ') ); => admin.php?m=Site&c=Public&a=login ;

** URL_MODEL = 0, 1 均有效 。 2,3 比作改变 以 PATHINFO 样式 ***



\ThinkPHP\Common\functions.php 打开系统函数库文件
搜索 function U( 函数所在位置
把U函数 替换成下面我已经编辑好的函数function U($url='',$vars='',$suffix=true,$domain=false) {
$__APP__ = '';
if(is_array($url)){
$__APP__ = C('URL_PATHINFO_DEPR').$url[0];
$url = $url[1];
}elseif(strpos($url,'?') && strpos($url,'.php')){
$url_var = explode('?',$url, 2);
$__APP__ = C('URL_PATHINFO_DEPR').$url_var['0'];
$url = $url_var['1'];
}
// 解析URL
$info = parse_url($url);
$url = !empty($info['path'])?$info['path']:ACTION_NAME;
if(isset($info['fragment'])) { // 解析锚点
$anchor = $info['fragment'];
if(false !== strpos($anchor,'?')) { // 解析参数
list($anchor,$info['query']) = explode('?',$anchor,2);
}
if(false !== strpos($anchor,'@')) { // 解析域名
list($anchor,$host) = explode('@',$anchor, 2);
}
}elseif(false !== strpos($url,'@')) { // 解析域名
list($url,$host) = explode('@',$info['path'], 2);
}
// 解析子域名
if(isset($host)) {
$domain = $host.(strpos($host,'.')?'':strstr($_SERVER['HTTP_HOST'],'.'));
}elseif($domain===true){
$domain = $_SERVER['HTTP_HOST'];
if(C('APP_SUB_DOMAIN_DEPLOY') ) { // 开启子域名部署
$domain = $domain=='localhost'?'localhost':'www'.strstr($_SERVER['HTTP_HOST'],'.');
// '子域名'=>array('模块[/控制器]');
foreach (C('APP_SUB_DOMAIN_RULES') as $key => $rule) {
$rule = is_array($rule)?$rule[0]:$rule;
if(false === strpos($key,'*') && 0=== strpos($url,$rule)) {
$domain = $key.strstr($domain,'.'); // 生成对应子域名
$url = substr_replace($url,'',0,strlen($rule));
break;
}
}
}
}

// 解析参数
if(is_string($vars)) { // aaa=1&bbb=2 转换成数组
parse_str($vars,$vars);
}elseif(!is_array($vars)){
$vars = array();
}
if(isset($info['query'])) { // 解析地址里面参数 合并到vars
parse_str($info['query'],$params);
$vars = array_merge($params,$vars);
}

// URL组装
$depr = C('URL_PATHINFO_DEPR');
$urlCase = C('URL_CASE_INSENSITIVE');
if($url) {
if(0=== strpos($url,'//m.sbmmt.com/m/')) {// 定义路由
$route = true;
$url = substr($url,1);
if('//m.sbmmt.com/m/' != $depr) {
$url = str_replace('//m.sbmmt.com/m/',$depr,$url);
}
}else{
if('//m.sbmmt.com/m/' != $depr) { // 安全替换
$url = str_replace('//m.sbmmt.com/m/',$depr,$url);
}
// 解析模块、控制器和操作
$url = trim($url,$depr);
$path = explode($depr,$url);
$var = array();
$varModule = C('VAR_MODULE');
$varController = C('VAR_CONTROLLER');
$varAction = C('VAR_ACTION');
$var[$varAction] = !empty($path)?array_pop($path):ACTION_NAME;
$var[$varController] = !empty($path)?array_pop($path):CONTROLLER_NAME;
if($maps = C('URL_ACTION_MAP')) {
if(isset($maps[strtolower($var[$varController])])) {
$maps = $maps[strtolower($var[$varController])];
if($action = array_search(strtolower($var[$varAction]),$maps)){
$var[$varAction] = $action;
}
}
}
if($maps = C('URL_CONTROLLER_MAP')) {
if($controller = array_search(strtolower($var[$varController]),$maps)){
$var[$varController] = $controller;
}
}
if($urlCase) {
$var[$varController] = parse_name($var[$varController]);
}
$module = '';
if(!empty($path)) {
$var[$varModule] = implode($depr,$path);
}else{
if(C('MULTI_MODULE')) {
if(MODULE_NAME != C('DEFAULT_MODULE') || !C('MODULE_ALLOW_LIST')){
$var[$varModule]= MODULE_NAME;
}
}
}
if($maps = C('URL_MODULE_MAP')) {
if($_module = array_search(strtolower($var[$varModule]),$maps)){
$var[$varModule] = $_module;
}
}
if(isset($var[$varModule])){
$module = $var[$varModule];
unset($var[$varModule]);
}
}
}
if(C('URL_MODEL') == 0) { // 普通模式URL转换
$url = ( $__APP__ ? $__APP__ : __APP__ ) .'?'.C('VAR_MODULE')."={$module}&".http_build_query(array_reverse($var));
if($urlCase){
$url = strtolower($url);
}
if(!empty($vars)) {
$vars = http_build_query($vars);
$url .= '&'.$vars;
}
}else{ // PATHINFO模式或者兼容URL模式
if(isset($route)) {
$url = ( $__APP__ ? $__APP__ : __APP__ ) .'//m.sbmmt.com/m/'.rtrim($url,$depr);
}else{
$module = (defined('BIND_MODULE') && BIND_MODULE==$module )? '' : $module;
$url = ( $__APP__ ? $__APP__ : __APP__ ) .'//m.sbmmt.com/m/'.($module?$module.MODULE_PATHINFO_DEPR:'').implode($depr,array_reverse($var));
}
if($urlCase){
$url = strtolower($url);
}
if(!empty($vars)) { // 添加参数
foreach ($vars as $var => $val){
if('' !== trim($val)) $url .= $depr . $var . $depr . urlencode($val);
}
}
if($suffix) {
$suffix = $suffix===true?C('URL_HTML_SUFFIX'):$suffix;
if($pos = strpos($suffix, '|')){
$suffix = substr($suffix, 0, $pos);
}
if($suffix && '//m.sbmmt.com/m/' != substr($url,-1)){
$url .= '.'.ltrim($suffix,'.');
}
}
}
if(isset($anchor)){
$url .= '//m.sbmmt.com/m/faq/#'.$anchor;
}
if($domain) {
$url = (is_ssl()?'https://':'http://').$domain.$url;
}
return $url;
}

AD:真正免费,域名+虚机+企业邮箱=0元

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。