zblog发(更新)文章写表 关于ID 骚操作 更新ID 修改ID

zblog12个月前zblog问题解答40
zb_system/function/lib/base.php 的 Save() 函数


接口 Filter_Plugin_Post_Save 和 Filter_Plugin_PostArticle_Core 只能改 ID外的内容。

Save()  如果新增ID 为空,直接忽略ID 写入,写入后sql返回文章ID
如果不为空 则直接根据ID进行更新。

所以,要修改 文章ID,两种方式,

1 文章发布前 挂 Filter_Plugin_Post_Save 和 Filter_Plugin_PostArticle_Core 把计算出来的 ID(如值 222) 写入zbp_post表(其他值默认值空值), + $post->ID = 222;
  这样 在save时候,直接更新了。
  
  
2 文章发布后 改ID  挂 Filter_Plugin_PostArticle_Succeed 接口,获取ID, 把 计算出来的id 覆盖掉获取的ID(建议第一中,事少)。



可以用  $article->ID == 0 判断是否新文章。

public function Save()
{
    # 打印当前php 的 根目录到文件名的全路径 和 当前行数
    #print_r(debug_backtrace());
    #die();

    #print_r($this->data);
    #die("s");
    global $bloghost;
    #print_r($this->idname);
    # die();

    if (array_key_exists('Meta', $this->data)) {
        $this->data['Meta'] = $this->Metas->Serialize();
    }
    #print_r($this->datainfo);
    #die(" end");
    $keys = array();
    foreach ($this->datainfo as $key => $value) {
        if (!is_array($value) || count($value) < 4) {
            continue;
        }

        $keys[] = $value[0];
    }
    $keyvalue = array_fill_keys($keys, '');
    $keyvalue_orig = array();

    foreach ($this->datainfo as $key => $value) {
        if (!is_array($value) || count($value) < 4) {
            continue;
        }
        if (!array_key_exists($key, $this->data)) {
            //如果unset(某个$key)就不再插入或修改该数据
            unset($keyvalue[$value[0]]);
            continue;
        }

        if ($value[1] == 'boolean') {
            $keyvalue[$value[0]] = (int)$this->data[$key];
            $keyvalue_orig[$value[0]] = (int)$this->original[$key];
        } elseif ($value[1] == 'integer') {
            $keyvalue[$value[0]] = (int)$this->data[$key];
            $keyvalue_orig[$value[0]] = (int)$this->original[$key];
        } elseif ($value[1] == 'float') {
            $keyvalue[$value[0]] = (float)$this->data[$key];
            $keyvalue_orig[$value[0]] = (float)$this->original[$key];
        } elseif ($value[1] == 'double') {
            $keyvalue[$value[0]] = (float)$this->data[$key];
            $keyvalue_orig[$value[0]] = (float)$this->original[$key];
        } elseif ($value[1] == 'string' || $value[1] == 'char') {
            if ($key == 'Meta' || $bloghost == '/') {
                $keyvalue[$value[0]] = $this->data[$key];
                $keyvalue_orig[$value[0]] = $this->original[$key];
            } else {
                $keyvalue[$value[0]] = ($this->isreplacehost) ? $this->ReplaceHost2Tag($this->data[$key]) : $this->data[$key];
                $keyvalue_orig[$value[0]] = ($this->isreplacehost) ? $this->ReplaceHost2Tag($this->original[$key]) : $this->original[$key];
            }
        } else {
            $keyvalue[$value[0]] = $this->data[$key];
            $keyvalue_orig[$value[0]] = $this->original[$key];
        }
    }
    array_shift($keyvalue);
    array_shift($keyvalue_orig);

    $id_name = $this->idname;
    $id_field = $this->datainfo[$id_name][0];


    if (empty($this->$id_name)) {
        if (count($keyvalue) == 0) {
            return true;
        }


        $sql = $this->db->sql->Insert($this->table, $keyvalue);


        $this->$id_name = $this->db->Insert($sql);

    } else {
        foreach ($keyvalue as $key => $value) {
            if (array_key_exists($key, $keyvalue_orig)) {
                if ($value === $keyvalue_orig[$key]) {
                    unset($keyvalue[$key]);
                }
            }
        }
        if (count($keyvalue) == 0) {
            return true;
        }
        $sql = $this->db->sql->Update($this->table, $keyvalue, array(array('=', $id_field, $this->$id_name)));
        $r = $this->db->Update($sql);

        $this->original = $this->data;
        return $r;
    }

    $this->original = $this->data;
    return true;
}


相关文章

zblog的 $this->lang['msg']['operation_failed'],lang到底都配置什么?在哪里查看?都有哪些值?zblog语言包

zblog的 $this->lang['msg']['operation_failed'],lang到底都配置什么?在哪里查看?都有哪些值?zblog语言包

在上一篇文章《zblog函数ShowHint('good')中good是怎么来的?允许哪些,不允许哪些?》源码中有一个 $content = $this->lang[&...

dechex 函数 ,用于将一个十进制数转换为其对应的十六进制字符串表示。

在PHP中,dechex() 函数是一个内置函数,用于将一个十进制数转换为其对应的十六进制字符串表示。 这个函数在处理数字数据时非常有用,特别是当你需要将数字以十六进制格式输出或存储时。...

【此方案收费】阿里云服务器同账号的文件互传 -私网互传-【VPC对等连接】私网ip互通【阿里云套路收费!闭坑!】

【此方案收费】阿里云服务器同账号的文件互传 -私网互传-【VPC对等连接】私网ip互通【阿里云套路收费!闭坑!】

同一个阿里云账号 怎么用私网传输?【VPC对等连接】!跨地域私网确定收费!! 这个就是收费项目哦哦哦对等连接可以在两台 阿里云服务器使用 私网传输,但流量有限制。CDT 赠送200 GB/月公网流量,...

zblog创建表 和 删除表 的方法1

$table['cat_spider'] = '%pre%cat_spider'; # 定义这个可以使用 $zbp...

宝塔面板保持终端持续运行的解决方案(Screen全屏窗口管理器)

Screen是一个全屏窗口管理器命令在Linux终端中管理会话时,screen是一个非常有用的工具。它允许你在单个终端会话中创建多个虚拟终端,从而可以同时运行多个任务,即使在断开与服务器的连接后也可以...

ai提示词 生成文章tag 标签

ai提示词 生成文章tag 标签

你是一个专业的文章标签生成专家, 并符合SEO优化要求。 要求: 理解给定内容是属于哪一个行业,并且思考这个篇内容是在解决用户的什么问题 从正文中提取出最多5个最合适的标签,并返回...