目前我用的 thinkphp 版本是 3.1.3
J-UI dwz 版本好像是 1.4
現在 j-ui有 thinkphp的例子了,請盡量以他們原創為主,我這里都是一些自己搜集和自己鑽研的土辦法,
1 更改 Action.class.php 中 ajaxReturn函數 為
protected function ajaxReturn($data,$type='') {
if(func_num_args()>2) {// 兼容3.0之前用法
$args = func_get_args();
array_shift($args);
$info = array();
$info['data'] = $data;
$info['info'] = array_shift($args);
$info['status'] = array_shift($args);
$data = $info;
$type = $args?array_shift($args):'';
}
//
//較原版增加部分--
$data['statusCode'] = 1; //
$data['navTabId'] = $_REQUEST['navTabId'];//
$data['rel'] = $_REQUEST['rel']; //
$data['callbackType'] = $_REQUEST['callbackType']; //
$data['forwardUrl'] = $_REQUEST['forwardUrl']; //
$data['confirmMsg'] = $_REQUEST['confirmMsg'];//
$data['message'] = $data['info']; //840206883@qq.com
//較原版增加部分--
//
if(empty($type)) $type = C('DEFAULT_AJAX_RETURN');
switch (strtoupper($type)){
case 'JSON' :
// 返回JSON數據格式到客戶端 包含狀態信息
header('Content-Type:application/json; charset=utf-8');
exit(json_encode($data));
case 'XML' :
// 返回xml格式數據
header('Content-Type:text/xml; charset=utf-8');
exit(xml_encode($data));
case 'JSONP':
// 返回JSON數據格式到客戶端 包含狀態信息
header('Content-Type:application/json; charset=utf-8');
$handler = isset($_GET[C('VAR_JSONP_HANDLER')]) ? $_GET[C('VAR_JSONP_HANDLER')] : C('DEFAULT_JSONP_HANDLER');
exit($handler.'('.json_encode($data).');');
case 'EVAL' :
// 返回可執行的js腳本
header('Content-Type:text/html; charset=utf-8');
exit($data);
default :
// 用於擴展其他返回格式數據
tag('ajax_return',$data);
}
}
2 更改 ContentReplaceBehavior 中 templateContentReplace 函數為
protected function templateContentReplace($content) { // 系統默認的特殊變量替換 $replace = array( '__TMPL__' => APP_TMPL_PATH, // 項目模板目錄 '__ROOT__' => __ROOT__, // 當前網站地址 '__APP__' => __APP__, // 當前項目地址 '__GROUP__' => defined('GROUP_NAME')?__GROUP__:__APP__, '__ACTION__' => __ACTION__, // 當前操作地址 '__SELF__' => __SELF__, // 當前頁面地址 '__URL__' => __URL__, '../Public' => APP_TMPL_PATH.'Public',// 項目公共模板目錄 '__PUBLIC__' => __ROOT__.'/Public',// 站點公共目錄 '__MODULE__' => MODULE_NAME, // 這句是亮點 ); // 允許用戶自定義模板的字符串替換 if(is_array(C('TMPL_PARSE_STRING')) ) $replace = array_merge($replace,C('TMPL_PARSE_STRING')); $content = str_replace(array_keys($replace),array_values($replace),$content); return $content; }
3 檢查你的 tpl/index/index.html 中 是否有這幾個js 函數
<script type="text/javascript"> function fleshVerify(){ //重載驗證碼 $('#verifyImg').attr("src", '__APP__/Public/verify/'+new Date().getTime()); } function dialogAjaxMenu(json){ dialogAjaxDone(json); if (json.statusCode == DWZ.statusCode.ok){ $("#sidebar").loadUrl("__APP__/Public/menu"); } } function navTabAjaxMenu(json){ navTabAjaxDone(json); if (json.statusCode == DWZ.statusCode.ok){ $("#sidebar").loadUrl("__APP__/Public/menu"); } } $(function(){ DWZ.init("__PUBLIC__/dwz/dwz.frag.xml", { loginUrl:"__APP__/Public/login_dialog", loginTitle:"登錄", // 彈出登錄對話框 // loginUrl:"__APP__/Public/login", //跳到登錄頁面 statusCode:{ok:1,error:0}, pageInfo:{pageNum:"pageNum", numPerPage:"numPerPage", orderField:"_order", orderDirection:"_sort"}, //【可選】 debug:false, // 調試模式 【true|false】 callback:function(){ initEnv(); $("#themeList").theme({themeBase:"__PUBLIC__/dwz/themes"}); } }); }); </script>
這樣基本就差不多了,可以正常刷新,顯示 ajax返回的 success 和 error信息了
如果要關閉 dialog ,可以在 dialog form頁面上放這個東西
<input name="callbackType" type="hidden" value="closeCurrent" />
成功執行完就自動關閉dialog了
總體來說 dwz是個不錯的框架 ,不知道現在為啥改名 j-ui,導致seo一塌糊塗,他的js方面我用了快4年(從他第一個版本起),感覺進步不太大,
最近幾個月經常生氣來想換 bootstrap 下的后台框架,每次到最后都是安慰自己,支持國產支持國產,希望大家也辛苦支持國產
讀了他的一些代碼,感覺zhanghuihua@msn.com 做的代碼移植工作比較多,其他人好像都在混獎狀呢,呵呵
希望他越來越好,幫助文件能寫的更詳細,更多些,更有耐心些, 有償服務的 字體能低調些。
