发布于2022年11月4日2年前 前言原因分析:在后台设置了阅读量后,前台不显示。查找原因经过查找,找到了下面代码<span><?php if(isset($this->fields->viewsNum)){ _e('<i class="iconfont icon-eye"></i> 浏览量 '); $this->fields->viewsNum(); } ?></span>看来是调用了typecho的自定义字段功能,自定义字段为viewsNum。分析typecho的自定义字段功能调用字段$field = $this->fields->fieldName;输出字段$this->fields->fieldName();判断字段if(isset($this->fields->fieldName)){ echo '字段存在,值为:'.$this->fields->fieldName; }else{ echo '字段不存在'; }经过判断发现字段viewsNum不存在。接着进行分析:在functions文件末尾,发现以下语句。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表。看起来需要对数据库入手。零时解决办法将上段语句替换为下面语句//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.php和post.php中将<span><?php if(isset($this->fields->viewsNum)){ _e('<i class="iconfont icon-eye"></i> 浏览量 '); $this->fields->viewsNum(); } ?></span>替换为:<span><i class="iconfont icon-eye"></i> 浏览量 <?php Views_Plugin::theViews(); ?> </span>效果如下 版权属于:逍遥子大表哥本文链接:https://blog.bbskali.cn/423.html按照知识共享署名-非商业性使用 4.0 国际协议进行许可,转载引用文章应遵循相同协议。
创建帐户或登录后发表意见