文章页面头部优化
  Skill  527℃  6条  367字数  预计阅读时间1分钟

文章页面头部优化

  Skill  527℃  6条  367字数  预计阅读时间1分钟

最近忙里偷闲,又折腾起网站了,昨日周末在家调整了一些夜间模式下的 BUG,以及优化了几个小功能。

如上图,这次主要修改了原来主题里的文章头部。

新增了文章字数统计及预计阅读时间,具体实现方法如下:

function art_count($cid){
$db=Typecho_Db::get();
$rs=$db->fetchRow ($db->select ('table.contents.text')->from ('table.contents')->where ('table.contents.cid=?',$cid)->order ('table.contents.cid',Typecho_Db::SORT_ASC)->limit (1));
$text = preg_replace("/[^\x{4e00}-\x{9fa5}]/u", "", $rs['text']);
$read_time = ceil(mb_strlen($text,'UTF-8')/400);
echo 'mb_strlen($text,'UTF-8') . '字数 ' . '预计阅读时间' . $read_time . '分钟';
}

将上述代码放入 functions.php 中,

并在 post.php 中相关位置添加调用语句:<?php art_count($this->cid); ?> 即可。

同时又将原来的文章浏览量重新梳理了一下。

原本的文章浏览量没有 cookie 判断,这就导致假设我在测试网站某项功能时一直刷新当前页面,这样的操作也会算作一次浏览量。

并且之前的浏览量还需要在数据库里增加 views 字段,修改默认的数据表,这次使用了系统自定义字段来进行计算,不会动数据表。

同时也新增了 cookie 判断,只要不清除 cookie 的状态下就不会记作一次浏览,更为准确。

当然,问题就是,以前那些看似好几千的文章浏览量就全部清零重新开始啦,哈哈。

新增的 cookie 版文章浏览量统计实现代码如下:

function getViewsStr($widget, $format = "{views}") {
    $fields = unserialize($widget->fields);
    if (array_key_exists('views', $fields))
        $views = (!empty($fields['views'])) ? intval($fields['views']) : 0;
    else
        $views = 0;
    if ($widget->is('single')) {
        $vieweds = Typecho_Cookie::get('contents_viewed');
        if (empty($vieweds))
            $vieweds = array();
        else
            $vieweds = explode(',', $vieweds);
        if (!in_array($widget->cid, $vieweds)) {
            $views = $views + 1;
            $widget->setField('views', 'str', strval($views), $widget->cid);
            $vieweds[] = $widget->cid;
            $vieweds = implode(',', $vieweds);
            Typecho_Cookie::set("contents_viewed",$vieweds);
        }
    }
    return str_replace("{views}", $views, $format);
}

将上述代码放入 functions.php 中,

并在 post.php 中相关位置添加调用语句:<?php _e(getViewsStr($this));?> 即可。

好啦,这就是周末在家鼓捣的几个不算新功能的新功能吧,哈哈。

如果本文对您有用的话,欢迎在下方留言评论哦~

(๑´ㅂ`๑) 已有5人微信打赏,心情+5...

文章页面头部优化

最近忙里偷闲,又折腾起网站了,昨日周末在家调整了一些夜间模式下的 BUG,以及优化了几个小功能。

tbwz.jpg

如上图,这次主要修改了原来主题里的文章头部。

新增了文章字数统计及预计阅读时间,具体实现方法如下:

function art_count($cid){
$db=Typecho_Db::get();
$rs=$db->fetchRow ($db->select ('table.contents.text')->from ('table.contents')->where ('table.contents.cid=?',$cid)->order ('table.contents.cid',Typecho_Db::SORT_ASC)->limit (1));
$text = preg_replace("/[^\x{4e00}-\x{9fa5}]/u", "", $rs['text']);
$read_time = ceil(mb_strlen($text,'UTF-8')/400);
echo 'mb_strlen($text,'UTF-8') . '字数 ' . '预计阅读时间' . $read_time . '分钟';
}

将上述代码放入 functions.php 中,

并在 post.php 中相关位置添加调用语句:<?php art_count($this->cid); ?> 即可。

同时又将原来的文章浏览量重新梳理了一下。

原本的文章浏览量没有 cookie 判断,这就导致假设我在测试网站某项功能时一直刷新当前页面,这样的操作也会算作一次浏览量。

并且之前的浏览量还需要在数据库里增加 views 字段,修改默认的数据表,这次使用了系统自定义字段来进行计算,不会动数据表。

同时也新增了 cookie 判断,只要不清除 cookie 的状态下就不会记作一次浏览,更为准确。

当然,问题就是,以前那些看似好几千的文章浏览量就全部清零重新开始啦,哈哈。

新增的 cookie 版文章浏览量统计实现代码如下:

function getViewsStr($widget, $format = "{views}") {
    $fields = unserialize($widget->fields);
    if (array_key_exists('views', $fields))
        $views = (!empty($fields['views'])) ? intval($fields['views']) : 0;
    else
        $views = 0;
    if ($widget->is('single')) {
        $vieweds = Typecho_Cookie::get('contents_viewed');
        if (empty($vieweds))
            $vieweds = array();
        else
            $vieweds = explode(',', $vieweds);
        if (!in_array($widget->cid, $vieweds)) {
            $views = $views + 1;
            $widget->setField('views', 'str', strval($views), $widget->cid);
            $vieweds[] = $widget->cid;
            $vieweds = implode(',', $vieweds);
            Typecho_Cookie::set("contents_viewed",$vieweds);
        }
    }
    return str_replace("{views}", $views, $format);
}

将上述代码放入 functions.php 中,

并在 post.php 中相关位置添加调用语句:<?php _e(getViewsStr($this));?> 即可。

好啦,这就是周末在家鼓捣的几个不算新功能的新功能吧,哈哈。

发表你的评论
选择表情
  1. 老狮
    B罩

    大佬,我用你的预读时间出错,提示:syntax error, unexpected 'UTF' (T_STRING), expecting ',' or ';'

    搜狗浏览器 上海市 电信
    1. Jdeal
      主人
      @老狮

      检查下,号和;是否为中文符号。

      Chrome 江苏省无锡市 电信
  2. Jdeal
    主人

    郁闷,下午突然发现提交评论后网页无响应,但是后台收到评论了,排查后发现是评论回复邮件通知插件出现了问题,重新重置设置了下,又好了 aru_27.png

    Chrome 江苏省无锡市 电信
  3. 广州技校
    A罩

    网站内容不错的,谢谢博主。

    搜狗浏览器 广东省东莞市 电信IDC机房
  4. 小白
    A罩

    大佬的那个cross怎么搞的?

    Safari 江苏省连云港市 电信
    1. Jdeal
      主人
      @小白

      非大佬,哈哈,如果你是Typecho的话可参考原作者链接:https://www.jdeal.cn/go/sNR2FEQf
      需要调整主题模板的一些样式才能很好的展示~ aru_12.png

      Chrome 江苏省无锡市 电信