Emlog gid自动插入断号id的方法

摘要

如果大家使用过WordPress

如果大家使用过WordPress建博客一定会知道文章ID是不连续的,网上有很多解决方法的,这里就不多说了,因为本博客是使用Emlog博客程序的,最近看到有许多朋友提到emlog由于后台删除文章那么gid自增就会出现断号了,其实断号问题解决很方便,只要在添加文章的时候判断gid之前的有没有断号问题,有的话直接插入,没有的话自增。

我这里的解决方法是这样的,我把gid自增段顺序读取作为值写入数组,自增段是从1开始的,但是数组键值是0开始的,那么先把数组($gidarr[0]='0')赋值掉,然后把$gidarr[]=gid,然后只要发现$gidarr键和键值不等就是断号了。

找到我们的addlog添加文章和页面函数。路径在include/model/log_model.php。

原始代码:

/** * 添加文章、页面 * * @param array $logData * @return int */ function addlog($logData) { $kItem = array(); $dItem = array(); foreach ($logData as $key => $data) { $kItem[] = $key; $dItem[] = $data; } $field = implode(',', $kItem); $values = "'" . implode("','", $dItem) . "'"; $this->db->query("INSERT INTO " . DB_PREFIX . "blog ($field) VALUES ($values)"); $logid = $this->db->insert_id(); return $logid; }

修改为:
function addlog($logData) { $kItem = array(); $dItem = array(); foreach ($logData as $key => $data) { $kItem[] = $key; $dItem[] = $data; } $field = implode(',', $kItem); $values = "'" . implode("','", $dItem) . "'"; $gidarr[0]='0'; $res = $this->db->query("SELECT gid From " . DB_PREFIX . "blog ORDER BY gid ASC"); while ($row = $this->db->fetch_array($res)) { $gidarr[] = $row['gid']; } foreach($gidarr as $key=>$val){ if($key!=$val){ $field = 'gid,'.$field; $values = "'".$key."',".$values; break; } } $this->db->query("INSERT INTO " . DB_PREFIX . "blog ($field) VALUES ($values)"); $logid = $this->db->insert_id(); return $logid;}

通过改变是否需要插入语句添加gid和gid值,来自增或者插入。 假如你有多篇文章删除,添加一篇的话,只有从开始的断号,慢慢补全断号。

此段代码已经过我的测试,应该是没有问题的,但是由于代码涉及到更改程序內核,所以李明仍然建议你在使用这段代码之前先好备份,然后再测试。

版权所有:《李明博客
文章标题:《Emlog gid自动插入断号id的方法
除非注明,文章均为 《李明博客》 原创
转载请注明本文短网址:http://likinming.com/post-412.html  [生成短网址]

发表评论

注意:本博客开启缓存,你的评论一般2小时后才能看到,如是广告,评论将无法显示!

目前评论:16 条

  1. avatar 迷糊小侠
    回复 2015-01-14 13:12  沙发

    我用的分类目录加别名,都没注意到这些

  2. avatar 森灭
    回复 2015-01-07 12:46  板凳

    很不错的样子,可是我不用emlog

  3. avatar 小劣博客
    回复 2015-01-06 23:19  地板

    学习了,其实对我来说断号好像没什么意义,不是强迫症一般都不会在乎吧

  4. avatar 灰常记忆
    回复 2015-01-05 15:52  #4 楼

    懒得折腾这个

  5. avatar 免费部落
    回复 2015-01-05 08:43  #5 楼

    没有用过Emlog的票过!

  6. avatar 蓝色悠悠
    回复 2015-01-04 21:27  #6 楼

    那要是有草稿怎么办呢?也占用一个GID?要是隔了很久才完稿而修改了发布时间那这篇文章会排列在哪个位置?按时间?还是按GID?请教下~

    • avatar 李明

      @蓝色悠悠:草稿也是一个GID的,文章id是包括草稿的id,不会重复的。

      • avatar 蓝色悠悠

        @李明:俺的草稿箱里有十多篇,都两年了,这要是想完稿发布的话肯定得修改发布时间了,那么GID是不能变了哦……

        • avatar 李明

          @蓝色悠悠:我的草稿箱有30多篇沒法完成的文章,在发布文章时只要修改发布时间就可以了,GID是不变的。

  7. avatar 瑾瑜
    回复 2015-01-04 19:02  #7 楼

    所以不用id作为链接,看着别扭。

  8. avatar WingsBlog
    回复 2015-01-04 15:54  #8 楼

    这么改好像很容易出问题

    • avatar 李明

      @WingsBlog:建议在使用这段代码之前先好备份,然后再测试。

  9. avatar 传递分享网
    回复 2015-01-04 15:02  #9 楼

    倒没注意到这些,不删除文章应该就没有关系吧?

    • avatar 李明

      @传递分享网:之前因使用了一个投稿插件引来很多无聊投稿,我一下子在后台删除了很多文章,所以要补回被删的文章id。

  10. avatar 王语双
    回复 2015-01-04 13:57  #10 楼

    这功能可以有。
    不过,我基本上文章发了后不更改,也不随便删除的。