php thinkphp u,thinkphp中U方法如何传一个动态值为参数?

参照 oneThink 中对一些数据的处理

1.在页面先初始化各全局 js 变量

(function(){

var ThinkPHP = window.Think = {

"ROOT"   : "__ROOT__", //当前网站地址

"APP"    : "__APP__", //当前项目地址

"PUBLIC" : "__PUBLIC__", //项目公共目录地址

"DEEP"   : "{:C('URL_PATHINFO_DEPR')}", //PATHINFO分割符

"MODEL"  : ["{:C('URL_MODEL')}", "{:C('URL_CASE_INSENSITIVE')}", "{:C('URL_HTML_SUFFIX')}"],

"VAR"    : ["{:C('VAR_MODULE')}", "{:C('VAR_CONTROLLER')}", "{:C('VAR_ACTION')}"]

}

})();

2.封装各种处理方法 Think.js

/* 扩展ThinkPHP对象 */

(function($){

/**

* 获取ThinkPHP基础配置

* @type {object}

*/

var ThinkPHP = window.Think;

/* 基础对象检测 */

ThinkPHP || $.error("ThinkPHP基础配置没有正确加载!");

/**

* 解析URL

* @param  {string} url 被解析的URL

* @return {object}     解析后的数据

*/

ThinkPHP.parse_url = function(url){

var parse = url.match(/^(?:([a-z]+):\/\/)?([\w-]+(?:\.[\w-]+)+)?(?::(\d+))?([\w-\/]+)?(?:\?((?:\w+=[^#&=\/]*)?(?:&\w+=[^#&=\/]*)*))?(?:#([\w-]+))?$/i);

parse || $.error("url格式不正确!");

return {

"scheme"   : parse[1],

"host"     : parse[2],

"port"     : parse[3],

"path"     : parse[4],

"query"    : parse[5],

"fragment" : parse[6]

};

}

ThinkPHP.parse_str = function(str){

var value = str.split("&"), vars = {}, param;

for(val in value){

param = value[val].split("=");

vars[param[0]] = param[1];

}

return vars;

}

ThinkPHP.parse_name = function(name, type){

if(type){

/* 下划线转驼峰 */

name.replace(/_([a-z])/g, function($0, $1){

return $1.toUpperCase();

});

/* 首字母大写 */

name.replace(/[a-z]/, function($0){

return $0.toUpperCase();

});

} else {

/* 大写字母转小写 */

name = name.replace(/[A-Z]/g, function($0){

return "_" + $0.toLowerCase();

});

/* 去掉首字符的下划线 */

if(0 === name.indexOf("_")){

name = name.substr(1);

}

}

return name;

}

//scheme://host:port/path?query#fragment

ThinkPHP.U = function(url, vars, suffix){

var info = this.parse_url(url), path = [], param = {}, reg;

/* 验证info */

info.path || $.error("url格式错误!");

url = info.path;

/* 组装URL */

if(0 === url.indexOf("/")){ //路由模式

this.MODEL[0] == 0 && $.error("该URL模式不支持使用路由!(" + url + ")");

/* 去掉右侧分割符 */

if("/" == url.substr(-1)){

url = url.substr(0, url.length -1)

}

url = ("/" == this.DEEP) ? url.substr(1) : url.substr(1).replace(/\//g, this.DEEP);

url = "/" + url;

} else { //非路由模式

/* 解析URL */

path = url.split("/");

path = [path.pop(), path.pop(), path.pop()].reverse();

path[1] || $.error("ThinkPHP.U(" + url + ")没有指定控制器");

if(path[0]){

param[this.VAR[0]] = this.MODEL[1] ? path[0].toLowerCase() : path[0];

}

param[this.VAR[1]] = this.MODEL[1] ? this.parse_name(path[1]) : path[1];

param[this.VAR[2]] = path[2].toLowerCase();

url = "?" + $.param(param);

}

/* 解析参数 */

if(typeof vars === "string"){

vars = this.parse_str(vars);

} else if(!$.isPlainObject(vars)){

vars = {};

}

/* 解析URL自带的参数 */

info.query && $.extend(vars, this.parse_str(info.query));

if(vars){

url += "&" + $.param(vars);

}

if(0 != this.MODEL[0]){

url = url.replace("?" + (path[0] ? this.VAR[0] : this.VAR[1]) + "=", "/")

.replace("&" + this.VAR[1] + "=", this.DEEP)

.replace("&" + this.VAR[2] + "=", this.DEEP)

.replace(/(\w+=&)|(&?\w+=$)/g, "")

.replace(/[&=]/g, this.DEEP);

/* 添加伪静态后缀 */

if(false !== suffix){

suffix = suffix || this.MODEL[2].split("|")[0];

if(suffix){

url += "." + suffix;

}

}

}

url = this.APP + url;

return url;

}

/* 设置表单的值 */

ThinkPHP.setValue = function(name, value){

var first = name.substr(0,1), input, i = 0, val;

if(value === "") return;

if("#" === first || "." === first){

input = $(name);

} else {

input = $("[name='" + name + "']");

}

if(input.eq(0).is(":radio")) { //单选按钮

input.filter("[value='" + value + "']").each(function(){this.checked = true});

} else if(input.eq(0).is(":checkbox")) { //复选框

if(!$.isArray(value)){

val = new Array();

val[0] = value;

} else {

val = value;

}

for(i = 0, len = val.length; i < len; i++){

input.filter("[value='" + val[i] + "']").each(function(){this.checked = true});

}

} else {  //其他表单选项直接设置值

input.val(value);

}

}

})(jQuery);

3.使用

// 生成连接

function editRule(id,status){

window.location.href = Think.U('Admin/AuthManager/editRule','id='+id+'&status='+status);

}

// 设置表单值,可以为ID、Class、Name

Think.setValue('username','张三');

4.具体可以下载oneThink后。打开 /Public/static/Think.js

希望可以帮到你,以上代码为oneThink封装。我只是一个搬运工,最后,在页面中ThinkPHP本身的U方法是无法动态的去传递一些JS变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值