一、共同引入
<?php //載入XOOPS主設定檔(必要) include_once "../../mainfile.php"; //載入自訂的共同函數檔 include_once "function.php"; //載入工具選單設定檔(亦可將 interface_menu.php 的內容複製到此檔下方,並刪除 interface_menu.php) include_once "interface_menu.php";
<?php //引入TadTools的函式庫 if (!file_exists(XOOPS_ROOT_PATH . "/modules/tadtools/tad_function.php")) { redirect_header("http://www.tad0616.net/modules/tad_uploader/index.php?of_cat_sn=50", 3, _TAD_NEED_TADTOOLS); } include_once XOOPS_ROOT_PATH . "/modules/tadtools/tad_function.php"; #引入ugmTools.php include_once XOOPS_ROOT_PATH . "/modules/ugm_tools2/ugmTools.php"; //其他自訂的共同的函數
<?php #引入權限檔(引入權限函數與x、y軸,權限則由使用程式處理) include XOOPS_ROOT_PATH . "/modules/" . "tncu_cart/groupperm.php" ; //---- 權限設定 ---- */ // 得到指定模組 mid $module_handler =& xoops_gethandler('module'); $xoopsModule =& $module_handler->getByDirname("tncu_cart"); $module_id = $xoopsModule->getVar('mid'); $isAdmin=false; if ($xoopsUser){ //判斷是否對該模組有管理權限 $isAdmin=$xoopsUser->isAdmin($module_id); } $gperm = get_gperm($module_id,$isAdmin,$gperm_itemid_arr,$gperm_name_arr); //---- 權限設定 ---- */ #工具列設定 $mod_name = $xoopsModule->name();//模組中文名 $module_name = $xoopsModule->dirname();//模組 $moduleMenu = array(); if($gperm['tncu_cartAdmin'][4]){ $i = 0; $moduleMenu[$i]['url']="index.php"; $moduleMenu[$i]['title']="回首頁"; $moduleMenu[$i]['icon']="fa-home"; $i++; $moduleMenu[$i]['url']="menu.php"; $moduleMenu[$i]['title']="選單管理"; $moduleMenu[$i]['icon']="fa-bars"; } if($isAdmin) { $i++; $moduleMenu[$i]['url']="admin/index.php"; $moduleMenu[$i]['title']=sprintf(_TAD_ADMIN,$mod_name);//管理後台 $moduleMenu[$i]['icon']="fa-wrench"; $i++; $moduleMenu[$i]['url']=XOOPS_URL."/modules/system/admin.php?fct=preferences&op=showmod&mod={$module_id}"; $moduleMenu[$i]['title']=sprintf(_TAD_CONFIG,$mod_name);//」偏好設定 $moduleMenu[$i]['icon']="fa-edit"; $i++; $moduleMenu[$i]['url']=XOOPS_URL."/modules/system/admin.php?fct=modulesadmin&op=update&module={$module_name}"; $moduleMenu[$i]['title']=sprintf(_TAD_UPDATE,$mod_name);//更新 $moduleMenu[$i]['icon']="fa-refresh"; $i++; $moduleMenu[$i]['url']=XOOPS_URL."/modules/system/admin.php?fct=blocksadmin&op=list&filter=1&selgen={$module_id}&selmod=-2&selgrp=-1&selvis=-1"; $moduleMenu[$i]['title']=sprintf(_TAD_BLOCKS,$mod_name);//」區塊管理 $moduleMenu[$i]['icon']="fa-th"; }
二、自動更新,增加資料表
//資料表 #---- 增加資料表 tncu_cart_kind $tbl = "tncu_cart_kind"; if(!chk_isTable($tbl)){ $sql=" CREATE TABLE `" . $xoopsDB->prefix($tbl) . "` ( `sn` smallint(5) unsigned NOT NULL AUTO_INCREMENT COMMENT 'sn', `ofsn` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '父類別', `kind` varchar(255) NOT NULL DEFAULT 'prod' COMMENT '分類', `title` varchar(255) NOT NULL DEFAULT '' COMMENT '標題', `sort` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '排序', `enable` enum('1','0') NOT NULL DEFAULT '1' COMMENT '狀態', `url` varchar(255) NOT NULL DEFAULT '' COMMENT '網址', `target` enum('1','0') NOT NULL DEFAULT '0' COMMENT '外連', `col_sn` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'col_sn', `content` text COMMENT '內容', `ps` varchar(255) DEFAULT NULL COMMENT '備註', PRIMARY KEY (`sn`) ) ENGINE=InnoDB; "; $xoopsDB->queryF($sql); }
-- 2 CREATE TABLE `tncu_cart_kind` ( `sn` smallint(5) unsigned NOT NULL AUTO_INCREMENT COMMENT 'sn', `ofsn` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '父類別', `kind` varchar(255) NOT NULL DEFAULT 'prod' COMMENT '分類', `title` varchar(255) NOT NULL DEFAULT '' COMMENT '標題', `sort` smallint(5) unsigned NOT NULL DEFAULT '0' COMMENT '排序', `enable` enum('1','0') NOT NULL DEFAULT '1' COMMENT '狀態', `url` varchar(255) NOT NULL DEFAULT '' COMMENT '網址', `target` enum('1','0') NOT NULL DEFAULT '0' COMMENT '外連', `col_sn` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'col_sn', `content` text COMMENT '內容', `ps` varchar(255) DEFAULT NULL COMMENT '備註', PRIMARY KEY (`sn`) ) ENGINE=InnoDB;
$modversion['tables'][2] = 'tncu_cart_kind';
三、選單管理
$i++; $modversion['templates'][$i]['file'] = 'tncu_cart_menu.tpl'; $modversion['templates'][$i]['description'] = 'tncu_cart_menu.tpl';
<?php /*-----------引入檔案區--------------*/ require_once "header.php"; $xoopsOption['template_main'] = 'tncu_cart_menu.tpl'; include_once XOOPS_ROOT_PATH . "/header.php"; #權限設定 if(!$gperm['tncu_cartAdmin'][4])redirect_header(XOOPS_URL,3,_NOPERM);//瀏覽 #引入類別物件--------------------------------- require_once XOOPS_ROOT_PATH . "/modules/ugm_tools2/ugmKind3.php"; #引入上傳物件 require_once XOOPS_ROOT_PATH . "/modules/ugm_tools2/ugmUpFiles3.php"; /*-----------執行動作判斷區----------*/ #system_CleanVars (&$global, $key, $default= '', $type= 'int') require_once $GLOBALS['xoops']->path('/modules/system/include/functions.php'); $op = system_CleanVars($_REQUEST, 'op', '', 'string'); $sn = system_CleanVars($_REQUEST, 'sn', '', 'int'); $kind = system_CleanVars($_REQUEST, 'kind', 'menuMain', 'string'); #foreign key $foreign = array( "menuMain" => array("title" => "主選單", "stopLevel" => 3), ); #防呆 $kind = in_array($kind, array_keys($foreign))?$kind:"menuMain"; #關閉左右區塊 $xoopsTpl->assign( 'xoops_showlblock', 0 ); $xoopsTpl->assign( 'xoops_showrblock', 0 ); #引入列表與表單陣列----------------------- require_once XOOPS_ROOT_PATH . "/modules/ugm_tools2/ugm_kind3_menuArray.php"; #引入類別物件--------------------------------- require_once XOOPS_ROOT_PATH . "/modules/ugm_tools2/ugm_kind3_main.php"; ########################################################### # 異動後,要執行的動作 ########################################################### function transaction(){ global $xoopsDB, $ugmKind,$op; #---- 過濾讀出的變數值 ---- $myts = MyTextSanitizer::getInstance(); $kind = $ugmKind->get_kind(); $moduleName =$ugmKind->get_moduleName(); $stopLevel =$ugmKind->get_stopLevel(); $ofsn=0; $level=1; $enable=1; if($kind == "menuMain"){ } } ########################################################### # 刪除資料 額外檢查 ########################################################### function opDeleteCheck($sn = "") { global $xoopsDB, $ugmKind; }
<{includeq file="$xoops_rootpath/modules/ugm_tools2/templates/ugm_tools_toolbar.tpl"}> <{if $op=="opList"}> <link href="<{xoAppUrl}>modules/tadtools/treeTable/stylesheets/jquery.treetable.css" rel="stylesheet"> <link href="<{xoAppUrl}>modules/tadtools/treeTable/stylesheets/jquery.treetable.theme.default.css" rel="stylesheet"> <script type="text/javascript" src="<{xoAppUrl}>modules/tadtools/treeTable/javascripts/src/jquery.treetable.js"></script> <!-- sweet-alert --> <link rel="stylesheet" href="<{xoAppUrl}>modules/tadtools/sweet-alert/sweet-alert.css" type="text/css"> <script src="<{xoAppUrl}>modules/tadtools/sweet-alert/sweet-alert.js" type="text/javascript"></script> <script type="text/javascript"> $(function() { //可以展開,預設展開 $('#form_table').treetable({ expandable: true ,initialState: 'expanded' }); // 配置拖動節點 $('#form_table .folder').draggable({ helper: 'clone', opacity: .75, refreshPositions: true, // Performance? revert: 'invalid', revertDuration: 300, scroll: true }); // Configure droppable rows $('#form_table .folder').each(function() { $(this).parents('#form_table tr').droppable({ accept: '.folder', drop: function(e, ui) { var droppedEl = ui.draggable.parents('tr'); console.log(droppedEl[0]); $('#form_table').treetable('move', droppedEl.data('ttId'), $(this).data('ttId')); //alert( droppedEl.data('ttId')); //目地的sn :$(this).data('ttId') //自己的sn:droppedEl.data('ttId') $.ajax({ type: 'POST', url: '?op=opSaveDrag', data: { ofsn: $(this).data('ttId'), sn: droppedEl.data('ttId'),kind :"<{$kind}>" }, success: function(theResponse) { swal({ title: theResponse, text: '<{$smarty.const._MD_TREETABLE_MOVE_RETURN}>', type: 'success', showCancelButton: 0, confirmButtonColor: '#3085d6', confirmButtonText: '確定', closeOnConfirm: false , allowOutsideClick: true }, function(){ location.href="<{$smarty.session.returnUrl}>"; }); } }); }, hoverClass: 'accept', over: function(e, ui) { var droppedEl = ui.draggable.parents('tr'); if(this != droppedEl[0] && !$(this).is('.expanded')) { $('#form_table').treetable('expandNode', $(this).data('ttId')); } } }); }); //排序 $('#sort').sortable({ opacity: 0.6, cursor: 'move', update: function() { var order = $(this).sortable('serialize') + '&op=opUpdateSort'; $.post('<{$action}>', order, function(theResponse){ swal({ title: theResponse, text: '<{$smarty.const._MD_TREETABLE_MOVE_RETURN}>', type: 'success', showCancelButton: 0, confirmButtonColor: '#3085d6', confirmButtonText: '確定', closeOnConfirm: false , allowOutsideClick: true }, function(){ location.href="<{$smarty.session.returnUrl}>"; }); }); } }); //每行的删除操作注册脚本事件 $(".btnDel").bind("click", function(){ var vbtnDel=$(this);//得到点击的按钮对象 var vTr=vbtnDel.parents("tr");//得到父tr对象; var sn=vTr.attr("sn");//取得 sn var kind=vTr.attr("kind");//取得 sn var title=$("#title_"+sn).val();//取得 title //警告視窗 swal({ title: '確定要刪除此資料?', text: title, type: 'warning', showCancelButton: true, confirmButtonColor: '#c9302c', cancelButtonColor: '#ec971f', confirmButtonText: '確定刪除!', cancelButtonText: '取消!' }, function(){ location.href="?op=opDelete&sn=" + sn+"&kind="+kind; }); }); }); </script> <div class="panel panel-primary"> <div class="panel-heading"><h3 class="panel-title"><{$listTitle}></h3></div> <div class="panel-body"> <form action='<{$action}>' method='post' id='myForm'> <{$foreignForm}> <{$listHtml}> <{$token}> </form> </div> </div> <{/if}> <{if $op=="opForm"}> <!-- bootstrap 驗證 --> <link rel="stylesheet" href="<{xoAppUrl}>modules/ugm_tools2/class/bootstrapValidator/css/bootstrapValidator.css"/> <script type="text/javascript" src="<{xoAppUrl}>modules/ugm_tools2/class/bootstrapValidator/js/bootstrapValidator.js"></script> <script type="text/javascript"> $(document).ready(function() { $('#myForm').bootstrapValidator({ live: 'disabled',// message: '此值無效', feedbackIcons: { valid: 'glyphicon glyphicon-ok', invalid: 'glyphicon glyphicon-remove', validating: 'glyphicon glyphicon-refresh' }, fields: { title: { validators: { notEmpty: { message: '必填' } } } } }); }); </script> <div class="panel panel-primary"> <div class="panel-heading"><h3 class="panel-title"><{$row.formTitle}></h3></div> <div class="panel-body"> <form role="form" action="<{$action}>" method="post" id="myForm" enctype="multipart/form-data"> <{foreach from=$forms item=form key=r}> <div class="row"> <{foreach from=$form item=cell key=col}> <{if $cell.type != "hidden"}> <div class="col-sm-<{$cell.width}>"> <div class="form-group"> <label for="<{$col}>"><{$cell.label}></label> <{if $cell.type == "text"}> <input type='text' name='<{$col}>' value='<{$row.$col}>' id='<{$col}>' class="form-control"> <{elseif $cell.type == "radio"}> <div> <input type='radio' name='<{$col}>' id='<{$col}>_1' value='1' <{if $row.$col==1}>checked<{/if}>> <label for='<{$col}>_1'>啟用</label> <input type='radio' name='<{$col}>' id='<{$col}>_0' value='0' <{if $row.$col==0}>checked<{/if}>> <label for='<{$col}>_0'>停用</label> </div> <{elseif $cell.type == "select"}> <select name="<{$col}>" id="<{$col}>" class="form-control" size="1" > <{$row.$col}> </select> <{elseif $cell.type == "icon"}> <link rel="stylesheet" type="text/css" href="<{xoAppUrl}>modules/ugm_tools2/class/fontawesome-iconpicker/css/fontawesome-iconpicker.min.css"> <script type="text/javascript" src="<{xoAppUrl}>modules/ugm_tools2/class/fontawesome-iconpicker/js/fontawesome-iconpicker.min.js"></script> <script type='text/javascript'> $(document).ready(function(){ $('#<{$col}>').iconpicker(); }); </script> <div class="input-group iconpicker-container"> <input type="text" data-placement="bottomRight" class="form-control icp icp-auto iconpicker-element iconpicker-input" id="<{$col}>" name="<{$col}>" value="<{$row.$col}>"> <span class="input-group-addon"><i class="fa <{$row.$col}>"></i></span> </div> <{elseif $cell.type == "single_img"}> <{$row.$col}> <{/if}> </div> </div> <{else}> <input type='hidden' name='<{$col}>' value='<{$row.$col}>'> <{/if}> <{/foreach}> </div> <{/foreach}> <hr> <div class="form-group text-center"> <button type="submit" class="btn btn-primary"><{$smarty.const._SUBMIT}></button> <{if !$row.sn}> <button type="reset" class="btn btn-danger"><{$smarty.const._RESET}></button> <{/if}> <button type="button" class="btn btn-warning" onclick="location.href='<{$smarty.session.return_url}>'">返回</button> <input type='hidden' name='op' value='<{$row.op}>'> <input type='hidden' name='sn' value='<{$row.sn}>'> <input type='hidden' name='kind' value='<{$row.kind}>'> <{$token}> </div> </form> </div> </div> <{/if}>