|
|
/* 扩展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);
|