Z-BlogPHP 博客程序如何让文章 ID 连续?

[复制链接]
reverie 发表于 2023-8-30 04:39:25|来自:北京 | 显示全部楼层 |阅读模式
文章或评论,还有分类什么的,如果删除就会造成空缺,虽然不管也没啥,但可能有人就是强迫症。。
全部回复1 显示全部楼层
cnfsonxxx 发表于 2023-8-30 04:39:31|来自:北京 | 显示全部楼层
在Z-BlogPHP博客程序中,文章ID默认是按照ID递增生成的,但有时候会删除文章,导致ID空缺。如果您想要让文章ID连续,可以尝试以下两种方法:
一、使用插件:
您可以安装一些Z-BlogPHP的插件来实现文章ID连续。例如,可以试试“使用空缺ID”(usebreakid)。
使用空缺ID - Z-Blog 应用中心二、接管接口:
您也可以通过插件的形式接管Z-BlogPHP的对应接口来实现文章ID连续。具体步骤如下:
1、打开自建插件的include.php文件。
2、找到ActivePlugin_插件名()函数,该函数用于接管接口。
3、添加接口代码:
Add_Filter_Plugin('Filter_Plugin_Post_Save','usebreakid_Post_Save');4、然后添加主函数:
function usebreakid_Post_Save($object){
    global $zbp;
    $table='Post';
    $fieldID = $zbp->datainfo[$table]['ID'][0];
     if (!$object->ID){
    $r = usebreakid_GetMinMaxID($table, $fieldID);
    if ($r[0] > 1 || !$r[0]){
    $object->ID = 1;
           }elseif ($id = (int)usebreakid_GetMinGapID($table, $fieldID)){
    $object->ID = $id;
           }
    if ($object->ID){
      usebreakid_CreateNewData($table, $fieldID, $object->ID);
           }
       }
}5、添加次函数
function usebreakid_GetMinMaxID($table, $fieldID){
    global $zbp;
    $sql = $zbp->db->sql->Select($zbp->table[$table],array("MIN($fieldID)","MAX($fieldID)"));
    $res = $zbp->db->Query($sql);
    if ($res){
        $d = array_values($res[0]);
        return array($d[0],$d[1]);
    }else{
        return array(0,0);
    }
}
function usebreakid_GetMinGapID($table, $field){
    global $zbp;
    $table = $zbp->table[$table];
    $res = $zbp->db->Query('select '.$field.'+1 from '.$table.' as t1 where not exists(select '.$field.' from '.$table.' as t2 where t2.'.$field.'=t1.'.$field.'+1) and length('.$field.')>0 order by '.$field.' limit 1;');
    if ($res){
        return array_values($res[0])[0];
    }
}
function usebreakid_CreateNewData($table, $fieldID, $id){
    global $zbp;
    $data = array(
        $fieldID => $id
        );
    foreach ($zbp->datainfo[$table] as $key => $value) {
        if ($key == 'ID'){
            continue;
        }
        $f = $value[0];
        if ($value[1] == 'boolean'){
            $data[$f] = 0;
        }else{
            $data[$f] = $value[3];
        }
    }
    $sql = $zbp->db->sql->Insert($zbp->table[$table], $data);
    $zbp->db->Insert($sql);
}6、保存文件并上传到服务器。
这样修改后,文章ID将查询数据库中空缺的ID,从而实现文章ID连续。

快速回帖

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则