thinkphp U方法 跨入口生成连接

来源:互联网 发布:淘宝代装修接活儿 编辑:程序博客网 时间:2024/05/17 00:16

案例:项目中有index.php和admin.php两个入口,一个前台一个后台,考虑到项目安全性问题后台用户可以自定义文件夹入口名。比如新闻管理里有一个查看预览按钮需要跳转到前台这时问题就来了。
了解:thinkphp中U方法无法跨入口生成路径
如http://www.xxx.com

U('User/add') // 生成User模块的add操作地址如下所示//http://www.xxx.com/index.php/User/add

后台中

U('User/add')//http://www.xxx.com/admin.php/User/add

现在问题来了,如何生成和前台一样的地址呢?

commom/function.php/** * 转换网址 * @param string $weburl 网址或者U方法的参数 * @param boolean $rnd 是否添加随机数 * @param boolean $flag 是否转换index.php * @return string */function go_link($weburl = 'http://www.ruoshuiyx.com/', $rnd = 0, $flag = 1) {    if (strpos($weburl, 'http://') === 0 || strpos($weburl, 'https://') === 0 || strpos($weburl, 'ftp://') === 0 ) {        $weburl = U(C('DEFAULT_MODULE'). '/Go/link',array('url' => base64_encode($weburl)));    } else {        $weburl = U($weburl);    }    if ($flag) {        $search = $_SERVER['SCRIPT_NAME'];//$_SERVER['PHP_SELF'];        $replace = rtrim(dirname($search),"\\/"). '/index.php';        $weburl = str_replace($search, $replace, $weburl);    }    //随机数    if ($rnd) {        $weburl .= '#'.rand(1000,time());    }    return $weburl;}
//admin/common/function.php/** * 返回文档url,主要针对模型下的文章[或者必须有flag,jumpurl字段的文档] * @param array $arc 文档内容 * @param integer $typeid 类型 * @param string $tvalue 表单类型和可选值  * @param string|integer $vaule 值 * @return mixed */function view_url($arc , $act = 'Show/index') {    if (($arc['flag'] & B_JUMP) && !empty($arc['jumpurl'])) {        $url = go_link($arc['jumpurl']);    } else {        $url = go_link(C('DEFAULT_MODULE'). '/'. $act. '?cid='. $arc['cid']. '&id='. $arc['id'], 1);    }    return $url;}//使用[<a target='_blank' href='{$v|view_url}'>查看</a>]$v是循环的文章明细

原理就是在admin中通过view_url方法传递CID(栏目ID),ID(文章ID),控制器/方法到go_link中进行处理。

0 0
原创粉丝点击