现在位置:首页 » emlog相关 »

让EMLOG文章ID连续起来的方法

心岛发布于2016年09月02日  分类: emlog相关  浏览:654 人次  评论:2 

今晚发现一个让人蛋疼的问题,emlog发布文章时的ID顺序是自动增加的,可是如果中途删除一些文章,那么这个ID就成为了空ID,即使以后再发文章也会按照最新ID进行增加,不会占用这些空ID了,貌似有点浪费了,因此,笔者通过搜索网络达人的日志发现了解决之道,不敢藏私,特同大家一起分享!

问题如下图所示:

QQ截图20160902224055.jpg

由于数据在后台不方便查看文章ID所以我只能从数据库中查看了,也就有了上面的截图

解决方法如下:

解决文章ID不连续问题解决很方便,只要在添加文章的时候判断gid之前的有没有空ID,有的话直接插入,没有的话自增。把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值,来自增或者插入。假如你有多篇文章删除,添加一篇的话,会从开始的空ID段慢慢补全。

本文由心岛原创或编辑,转载请保留链接【让EMLOG文章ID连续起来的方法】http://www.liangxin.name/?post=2
本文标签: 世海收藏 emlog 技巧
上一篇: SEO 齐博整站系统也可以玩!
下一篇:齐博cms 相关文章调用全站关键字相关数据
目前有 2 条评论
avatar
自媒体博客 2017-08-15 10:12回复
这个不错,可以解决中途删除文章,id断号的问题
avatar
心岛 2017-11-02 14:36 / 回复
@自媒体博客:谢友支持!