在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连续。 |