首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >本博客主题阅读量bug修改

本博客主题阅读量bug修改

作者头像
逍遥子大表哥
发布2021-12-17 14:32:15
发布2021-12-17 14:32:15
3560
举报
文章被收录于专栏:kali blogkali blog

前言

原因分析:在后台设置了阅读量后,前台不显示。

查找原因

经过查找,找到了下面代码

代码语言:javascript
复制
<span><?php if(isset($this->fields->viewsNum)){  _e('<i class="iconfont icon-eye"></i> 浏览量 '); $this->fields->viewsNum(); } ?></span>

看来是调用了typecho的自定义字段功能,自定义字段为viewsNum

分析typecho的自定义字段功能

调用字段

代码语言:javascript
复制
$field = $this->fields->fieldName;

输出字段

代码语言:javascript
复制
$this->fields->fieldName();

判断字段

代码语言:javascript
复制
if(isset($this->fields->fieldName)){
  echo '字段存在,值为:'.$this->fields->fieldName;
}else{
  echo '字段不存在';
}

经过判断发现字段viewsNum不存在。

接着进行分析:

functions文件末尾,发现以下语句。

代码语言:javascript
复制
function viewCounter($archive){
    $cid = $archive->cid;
    $views = Typecho_Cookie::get('__typecho_views');
    $views = !empty($views) ? explode(',', $views) : array();
    if(!in_array($cid,$views)){
        $db = Typecho_Db::get();
        $field = $db->fetchRow($db->select()->from('table.fields')->where('cid = ? AND name = ?', $cid , 'viewsNum'));
        if(empty($field)){
            $db->query($db->insert('table.fields')
            ->rows(array('cid' => $cid, 'name' => 'viewsNum', 'type' => 'str', 'str_value' => 1, 'int_value' => 0, 'float_value' => 0)));
        }else{
            $db->query($db->update('table.fields')->expression('str_value', 'str_value + 1')->where('cid = ? AND name = ?', $cid , 'viewsNum'));
        }
        array_push($views, $cid);
        $views = implode(',', $views);
        Typecho_Cookie::set('__typecho_views', $views);
    }
}

发现需要在数据库中获取views的值,但是在数据库中找不到相应的views表。看起来需要对数据库入手。

零时解决办法

将上段语句替换为下面语句

代码语言:javascript
复制
//get_post_view($this)
function get_post_view($archive)
{
    $cid    = $archive->cid;
    $db     = Typecho_Db::get();
    $prefix = $db->getPrefix();
    if (!array_key_exists('views', $db->fetchRow($db->select()->from('table.contents')))) {
        $db->query('ALTER TABLE `' . $prefix . 'contents` ADD `views` INT(10) DEFAULT 0;');
        echo 0;
        return;
    }
    $row = $db->fetchRow($db->select('views')->from('table.contents')->where('cid = ?', $cid));
    if ($archive->is('single')) {
       $db->query($db->update('table.contents')->rows(array('views' => (int) $row['views'] + 1))->where('cid = ?', $cid));
    }
    echo $row['views'];
}

index.phppost.php中将

代码语言:javascript
复制
<span><?php if(isset($this->fields->viewsNum)){  _e('<i class="iconfont icon-eye"></i> 浏览量 '); $this->fields->viewsNum(); } ?></span>

替换为:

代码语言:javascript
复制
<span><i class="iconfont icon-eye"></i> 浏览量 <?php Views_Plugin::theViews(); ?> </span>

效果如下

版权属于:逍遥子大表哥

本文链接:https://cloud.tencent.com/developer/article/1920613

按照知识共享署名-非商业性使用 4.0 国际协议进行许可,转载引用文章应遵循相同协议。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 查找原因
  • 分析typecho的自定义字段功能
    • 调用字段
    • 输出字段
    • 判断字段
  • 零时解决办法
  • 效果如下
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档