Emlog gid自动补全断号id的方法-站长杂谈下载

Emlog gid自动补全断号id的方法

来自版块: 站长杂谈发表于: 2015-8-17 13:03:27
30150
0
如本资源下载地址失效,请点击此处进行反馈
开通本站Svip会员,全站资源免费下
    Emlog文章连接使用gid自增号作为文章的ID,但是由于后台有删除文章的功能,一旦删除文章那么gid自增就会出现断号。
7 N; O; _% S3 m, s4 b+ X$ d" F    其实断号问题解决很方便,只要在添加文章的时候判断gid之前的有没有断号问题,有的话直接插入,没有的话自增。
; O# C) s* ^) G+ m7 W4 a( V    我这里的解决方法是这样的,我把gid自增段顺序读取作为值写入数组,自增段是从1开始的,但是数组键值是0开始的,那么先把数组($gidarr[0]='0')赋值掉,然后把$gidarr[]=gid,然后只要发现$gidarr键和键值不等就是断号了。& \8 n: d1 {4 P, ?$ V7 V
    找到我们的addlog添加文章和页面函数。路径在include/model/log_model.php中的
  1.         /**) f" O" a) s$ `' |2 ?4 {! k+ }
  2.          * 添加文章、页面' \9 Y0 K9 d) j: o0 Z5 q) c( s
  3.          *1 e+ }/ C- N+ C* w# S. e. o9 h
  4.          * @param array $logData
    7 t* z4 B9 C  _7 v
  5.          * @return int
    - O$ @7 C* v3 C
  6.          */& z& ]+ I- z% y
  7.         function addlog($logData) {- k+ E3 L! J. i$ N0 d! u
  8.                 $kItem = array();# t- r/ G4 Q' a8 d8 N, I, {
  9.                 $dItem = array();. i' S1 ^# |0 v' ?, T1 M- g9 _; X" X
  10.                 foreach ($logData as $key => $data) {
    ; @- a, H/ w& U' K3 E
  11.                         $kItem[] = $key;* N3 v3 [. k. `* z. Q0 A
  12.                         $dItem[] = $data;3 @; ?7 E4 R; B. r! @% C
  13.                 }
    0 ~( d5 c" r* k. P& W2 R
  14.                 $field = implode(',', $kItem);( C. U) `( H/ q# ]
  15.                 $values = "'" . implode("','", $dItem) . "'";
    ; j: P, V4 Z* N' d, j1 F# y; g4 w% u
  16.                 $this->db->query("INSERT INTO " . DB_PREFIX . "blog ($field) VALUES ($values)");
    8 f" P- p5 I4 L1 N" C. S  ]
  17.                 $logid = $this->db->insert_id();' v) }; e4 a4 i$ ]7 z: r1 F
  18.                 return $logid;/ {" K# u: `! z" K4 d5 t: U* u
  19.         }
复制代码
修改为:
  1. function addlog($logData) {! W( t" I- Z: W6 E- o" J
  2.         $kItem = array();
    6 t0 F1 Y/ O( Q/ S. y# {
  3.         $dItem = array();
    % E2 p1 M9 s. x' r5 `
  4.         foreach ($logData as $key => $data) {
    ( O: ?5 d* x% |5 ~* \
  5.                 $kItem[] = $key;$ R, P" A0 S% y
  6.                 $dItem[] = $data;
    % P) K1 N+ U3 H7 C* x" {% x
  7.         }
    ( L4 \2 a: Y7 c- p6 b
  8.         $field = implode(',', $kItem);
    $ h" g2 t8 i' A  Y( o
  9.         $values = "'" . implode("','", $dItem) . "'";
    . x" _* P" G5 t- o
  10.         $gidarr[0]='0';
    2 [/ C! E% D3 N9 r+ J& m
  11.         $res = $this->db->query("SELECT gid From  " . DB_PREFIX . "blog ORDER BY gid ASC");
    ( |0 j$ R/ d. O0 p! [
  12.         while ($row = $this->db->fetch_array($res)) {
    8 F7 F8 _8 P+ i( s
  13.                 $gidarr[] = $row['gid'];
    . s- I4 W# H! ~/ L8 z) V2 V$ j
  14.         }
    , [! t) S7 Q- X) q- |* u
  15.         foreach($gidarr as $key=>$val){& r# ?4 O# M" r! X! Y
  16.                 if($key!=$val){, h1 M! m: q, Y% ]
  17.                         $field = 'gid,'.$field;* l& l7 H3 p/ f0 |' i. Y
  18.                         $values = "'".$key."',".$values;
    " }! J" C" W& ?* O; i
  19.                         break;" @7 C- j0 \7 T% M0 i/ a
  20.                 }, j6 B* _( J; `+ u! N
  21.         }
    8 x% y9 w3 I/ c$ f7 B9 w) j
  22.         $this->db->query("INSERT INTO " . DB_PREFIX . "blog ($field) VALUES ($values)");
    5 t' A8 I+ @5 A
  23.         $logid = $this->db->insert_id();1 Q$ D! I9 f% e0 D" D- s
  24.         return $logid;: z6 P2 U5 U& `0 v) K/ d
  25. }
复制代码
    通过改变是否需要插入语句添加gid和gid值,来自增或者插入。 假如你有多篇文章删除,添加一篇的话,只有从开始的断号,慢慢补全断号。
9 t/ M( d& P$ Y3 {; W# }4 ^0 e# V    舍力提醒你,在更改文件时请先做好备份。
) H* |3 c  \( j+ z1 l+ `8 g

全部评论 0

您需要登录后才可以回帖 立即登录
登录
0
0
0
返回顶部