恶意攻击的都是吃饱撑着了是吧,真是吃的太饱了。让我中秋节给网站来了个大整改,有本事你就继续来。


每次更改或新增代码后,一定要及时查看控制台是否有报错,使用PC和移动端多次访问确保无误!!!

网站设置

备份设置

需要备份的东西都直接在宝塔后台备份就行,备份网站程序和数据库两个压缩包文件就行了。如果重装网站后更改了数据库账号密码,那么就直接在Typecho程序根目录下的config.inc.php文件中第56行更改数据库连接设置就行了:

/** 定义数据库参数 */
$db->addServer(array (
      'host' => 'localhost',
      'user' => '****',
      'password' => '******',
      'charset' => 'utf8',
      'port' => '*******',
      'database' => '******',
), Typecho_Db::READ | Typecho_Db::WRITE);

网站所有都调整完毕后,可以在宝塔后台安装七牛云官方备份程序:

可以自动将程序备份至七牛云账户。

伪静态设置

在宝塔网站设置中添加伪静态规则:

if (!-e $request_filename) {
    rewrite ^(.*)$ /index.php$1 last;
}

然后在Typecho后台设置地址重写:

替换Gravatar头像为Cravatar头像

Cravatar是Gravatar在中国的完美替代方案,你可以在https://cravatar.cn更新你的头像

define('__TYPECHO_GRAVATAR_PREFIX__', 'https://cravatar.cn/avatar/');

CDN加速

将主题下的assets文件夹全部复制至七牛云CDN,使用CDN加速全部主题资源。

本站主题资源assets资源已全部放入七牛云CDN,如果需要进行文件修改,修改后需要在七牛云CDN中的刷新预取中刷新文件链接才会完成文件更新。

显示评论IP归属地

<small style="color: rgba(0,0,0,.8)">来自<span id="ip-<?php $this->theId(); ?>"></span></small>
<script referrerpolicy="no-referrer" src="https://whois.pconline.com.cn/jsDom.jsp?level=3&domId=ip-<?php $this->theId(); ?>&ip=<?php echo $this->ip; ?>"></script>

不支持Pjax刷新,不知道怎么改代码。

使用自制404页面

在宝塔后台打开网站配置文件,取消注释第28行:

#ERROR-PAGE-START  错误页配置,可以注释、删除或修改
error_page 404 /404.html;

然后在站点根目录重写404.html

流量限制

后台登陆加密

自定义小功能

获取网站最后更新时间

function get_last_update(){ 
    $num = '1'; //取最近的一笔就好了 
    $now = time();
    $db = Typecho_Db::get();
    $prefix = $db->getPrefix();
    $create = $db->fetchRow($db->select('created')->from('table.contents')->limit($num)->order('created',Typecho_Db::SORT_DESC));
    $update = $db->fetchRow($db->select('modified')->from('table.contents')->limit($num)->order('modified',Typecho_Db::SORT_DESC));
    if($create>=$update){
        //发表时间和更新时间取最近的
        echo Typecho_I18n::dateWord($create['created'], $now);
        //转换为更通俗易懂的格式
    }else{
        echo Typecho_I18n::dateWord($update['modified'], $now);
    } 
}

文章热度排行

在主题下的funtions.php中写入函数:

function getHotComments($limit = 10){
    $db = Typecho_Db::get();
    $result = $db->fetchAll($db->select()->from('table.contents')
        ->where('status = ?','publish')
        ->where('type = ?', 'post')
        ->where('created <= unix_timestamp(now())', 'post') //添加这一句避免未达到时间的文章提前曝光
        ->limit($limit)
        ->order('viewsNum', Typecho_Db::SORT_DESC)
    );
    if($result){
        foreach($result as $val){
            $val = Typecho_Widget::widget('Widget_Abstract_Contents')->push($val);
            $post_title = htmlspecialchars($val['title']);
            $permalink = $val['permalink'];
            echo '<li><a href="'.$permalink.'" title="'.$post_title.'" target="_self">'.$val['title'].'</a> <small>'.$val['viewsNum'].'次阅读</small></li>';
        }
    }
}

然后再在主题文件夹下的Archives.php文件中的合适地方调用该函数:

<!--PHP输出热门文章-->
<div class="tag-cloud yue float-up">
    <h2>热门文章排行</h2>
    <ol>
        <?php getHotComments('20');?>
    </ol>
</div>

统计全部文章阅读数

public static function getViewNum()
{
    $db= Typecho_Db::get();
    $query= $db->select('sum(viewsNum)')->from('table.contents');
    $result = $db->fetchAll($query);
    return $result[0]['sum(`viewsNum`)'];
}

插件设置

ExSearch

第一次使用该插件需要重建索引。

该插件中不能引入JQuery,因为在主题中已经引入,如果再次引入,博客主页会出现空白。

Meting

问题:网易云歌单只能解析第一首歌曲,网易云无论是自己收藏的歌单还是公开歌单,均只能获取第一首,歌手与专辑正常。

解决方案:插件后台填写网易云音乐Cookie。获取方法:打开 https://music.163.com/F12-网络-再次刷新找到 music.163.com项,点击进去找到 cookie的值复制。

Sticky

美化代码:

<span style='color:red;color:white;padding:4px 26px;background:red;z-index:99999999;position:absolute;right:0;top:0;transform:rotate(45deg) translate(25%,-45%);font-weight:700;font-size:larger'>[置顶] </span>

网站美化

OwO表情按钮及弹窗

#comments form .comment-buttons .OwO .OwO-body {
    min-width: 294px
}

.OwO-body {
    z-index: 24!important
}

.OwO .OwO-body .OwO-items .OwO-item {
    padding: 0;
}

#comments form .comment-buttons .OwO .OwO-body .OwO-items-image .OwO-item {
    max-width: calc(25% - 10px)!important
}

#comments form .comment-buttons .OwO {
    left: 12px;
    width: auto;
    top: -60px
}

设置小齿轮位置调整

@media screen and (max-width: 767.5px) {
    .setting-panel-show #setting-panel {
        top: 133px
    }
}

参考代码程序

  1. 网站前端修改
  2. 网站前端美化

评论区调整

如果文章禁止评论,那么直接评论区什么也不输出:

移动端展示

首页
首页
归档页
归档页
电影页
电影页
关于页
关于页
实时搜索
实时搜索
文章页
文章页