emlog文章使用的是blog表中gid自增来作为文章的ID,但是由于后台有删除文章的功能,一旦删除文章那么gid自增就会出现断号。
解决删除导致断号的问题有2种方法:
方法一:不删除文章,采用转为草稿再重新编辑发布的方法,适用于没有删除过文章的。(一般都已经删除文章了才会找到这篇文章)
方法二:只要在添加文章的时候判断gid之前的有没有断号问题,有的话直接插入,没有的话自增。
修改方法
找到我们的addlog添加文章和页面的函数addlog,路径在include/model/log_model.php。
by 2023-03-26
支持最新版本emlog pro v2.0.3
优化了代码机制,性能更佳,通过把gid自增段顺序读取,然后通过$i+1的方式看gid是否等于i,不等于就是断号,跳出循环。
public function addlog($logData) { $kItem = $dItem = []; foreach ($logData as $key => $data) { $kItem[] = $key; $dItem[] = $data; } $field = implode(',', $kItem); $values = "'" . implode("','", $dItem) . "'"; $this->db->query("INSERT INTO $this->table ($field) VALUES ($values)"); return $this->db->insert_id(); }
修改为
public function addlog($logData) { $kItem = $dItem = []; foreach ($logData as $key => $data) { $kItem[] = $key; $dItem[] = $data; } $field = implode(',', $kItem); $values = "'" . implode("','", $dItem) . "'"; $i = 0; $res = $this->db->query("SELECT gid From $this->table ORDER BY gid ASC"); while ($row = $this->db->fetch_array($res)) { $i++; if($i!=$row['gid']){ $field = 'gid,'.$field; $values = "'".$i."',".$values; break; } } $this->db->query("INSERT INTO $this->table ($field) VALUES ($values)"); return $this->db->insert_id(); }
老版本原始代码:
把gid自增段顺序读取作为值写入数组,自增段是从1开始的,但是数组键值是0开始的,那么先把数组($gidarr[0]='0')赋值掉,然后把$gidarr[]=gid,然后只要发现$gidarr键和键值不等就是断号了。
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值来自增或者插入。
假如你有多篇文章删除,添加一篇的话,只有从开始的断号,慢慢补全断号。自己根据原始代码判断下用哪个版本的代码。
目前有 0 条评论