標籤:style blog io ar color os sp for 資料
最近幾天在做一個網站,牽扯到一個導航管理的功能!領導說不用作,可是由於自己自作主張,搞了1天的功能。領導說這個導航管理就是不用做!容易牽扯出好多問題來!估摸是客戶小的原因!
沒辦法就把我1天的勞動荒廢了!在這裡貼出來,一個是與大家交流, 第二,也是希望大家可以使勁拍磚,相信大家的拍磚可以使我更好的成長!我可以學到更多的知識!
本人初級PHP鳥一隻!希望各位多多指教!
上代碼!
首先是HTML代碼!主要實現了!table的一個表格,未添加任何CSS樣式,因為做到這一步,要添加樣式的時候,領導說不需要!就再沒往下做!
我直接拷貝的我做的資料,表格裡面存的是資料!我用的CI架構做的!所以資料都是PHP程式碼片段輸出!$nav_array是從資料庫取出來的導航數組
<div>這裡是導航管理介面</div><form method="post"> <table class="table" border="1" style="border-collapse: collapse"> <thead><tr><th>順序</th><th>導航名稱</th><th>管理</th></tr></thead> <tbody> <?php foreach($nav_array as $key=>$value):?> <tr num="<?php echo $value[‘id‘]?>" navid="<?php echo $value[‘id‘];?>"> <td><?php echo $value[‘sort‘]?></td> <td><?php echo $value[‘nav_name‘]?></td><!-- <td><button class="button" num="--><?php //echo $value[‘id‘]?><!--">修改</button></td>--> </tr> <?php endforeach ?> </tbody> </table></form>
jquery代碼實現的點擊變修改!主要的思路就是用empty抹掉原來表格中的資料,添加進去一段input
這段input html代碼應該可以用for迴圈搞定!我懶的搞了!有興趣的自己研究下吧!
$(‘.table‘).on(‘click‘, ‘.button‘, function(){ var num = $(this).attr(‘num‘);//當前點擊事件的按鈕flag var current_tr = $(‘table‘).find(‘tr[num="‘+ num +‘"]‘);//當前點擊事件的tr行 var current_tds = $(current_tr).find(‘td‘);//當前點擊事件的行所有td var navid = $(current_tr).attr(‘navid‘);//這個是導航的id 是主鍵 //儲存當前點擊事件行中td的原值,用在下面的form 的html代碼中顯示 var arr = []; for(var i = 0; i < current_tds.length; i++){ arr[i] = $(current_tds).eq(i).text(); } //要替換的html代碼 var td_html = ‘<td><input type="hidden" name="nav_id" value="‘+ navid +‘"><input type="text" name="sort" value="‘+ arr[0] +‘"></td><td><input type="text" name="nav_alter" value="‘+ arr[1] +‘"></td><td><input type="submit" name="" value="確定"></td>‘; $(‘.table‘).find(‘tr[num="‘+ num +‘"]‘).empty().append(td_html); });
PHP代碼,這裡直接從My Code拷貝過來了,不修改了!有缺點歡迎指正!懂的話,應該可以改成自己的代碼
index主要就是載入這個頁面,用了CI的input類,post接收到資料,從資料庫提取一級導航,然後驗證post過來的資料是否存在於資料庫中的資料中!
public function index(){ $nav_id = $this->input->post(‘nav_id‘); //導航ID $nav_name = $this->input->post(‘nav_alter‘);//修改的導航名 $sort = $this->input->post(‘sort‘); //排序num $data[‘nav_array‘] = $this->m_nav_manage->getNav();//提取所有一級導航,從資料庫 //檢查post過來的資料 是否已經存在於資料庫中 if( $nav_name || $sort) { if( !$this->check_nav_in_array( $nav_name, $data[‘nav_array‘] ) || !$this->check_nav_in_array($sort, $data[‘nav_array‘])) { $this->m_nav_manage->up_data_nav($nav_name, $sort, $nav_id); $data[‘nav_array‘] = $this->m_nav_manage->getNav(); //重寫資料庫並且提取資料 } } $this->load->view(‘nav_manage‘, $data); } /**檢查nav是否存在於二維數組中 * @param $nav 待搜尋的值 * @param $array 被搜尋的二維數組 * @return bool */ private function check_nav_in_array($value, $array) { for( $i = 0; $i < count($array); $i++ ) { foreach( $array as $key=>$value ) { if( in_array( $value, $array[$i] ) ) { return TRUE; } } } }
另外有一段在model中的函數,主要用來update資料和並且將排序更改
,實現思路 ----主要是用傳過來的sort,$navid是隱藏的input中提交過來的,$navname 三個變數都是post過來的資料
這段實現的比較糾結!總之 $nav_a 取得的是這個nav的ID $nav_b取得的是這個nav的sort
功能實現了,我自己到現在還沒別過勁來!~~留給自己慢慢思考吧!
get_one() 產生的select語句 SELECT id FROM $this->table WHERE sort = $sort; 其他自己的研究吧!
public function up_data_nav($navName, $sort, $navId) { $nav_a = $this->m_common->get_one(‘id‘, $this->table, array(‘sort‘=>$sort));//要被改成$sort的nav的id $nav_b = $this->m_common->get_one(‘sort‘, $this->table, array(‘id‘=>$navId));//正在修改的nav的sort //print_r($nav_a); print_r($nav_b); die(); $nav_alter_array[‘nav_name‘] = $navName; $nav_alter_array[‘sort‘] = $sort; //print_r($nav_alter_array);die(); $this->m_common->up_data($this->table, $nav_alter_array, array(‘id‘ => $navId) ); $this->m_common->up_data($this->table, array(‘sort‘=>$nav_b[‘sort‘]), array( ‘id‘ => $nav_a[‘id‘] ) ); }
/** * 擷取單條資料 * @param $table 表名 * @param $where 條件數組 * @param string $fields 查詢的欄位 預設是 ‘*‘ * * 返回一個數組 */ public function get_one($fields = ‘*‘, $table, $where ) { if($where != ‘‘) { return $this->db->select($fields)->from($table)->where($where)->get()->row_array(); } else { return $this->db->select($fields)->from($table)->get()->row_array(); } }
table表格實現點擊修改 PHP同步資料庫 排序