标签 博客 下的文章

我一直很喜欢一种网页风格:没有排版,也没有华丽的装饰,各种文字信息以较高密度呈现在观看者眼前的风格。后来我逐渐意识到,这种风格十分偏向于千禧年前后,匠人手制网页的模样。

在我把Typecho更新之后,曾经的主题便不兼容了。也是在这时候,我发现Typecho自己的主题挺有我说的那种味道的,于是打算直接用默认主题就得了。但渐渐的,我发现默认主题还是多多少少有些缺失的,比如首页直接把文章全文按顺序排列,浏览文章十分不便。所以,我最终决定把官方这个主题打磨一下,让它成为我心目中最理想的,最千禧年风格主题。现在,它来了。

Übermorgen/Typecho Millennium Style主题


特性及优势

  1. 基于官方主题,原汁原味的简约,完全区分文章与独立页面这两个Typecho的文章形式
  2. 紧凑的自适应布局,高信息密度、清晰的观感
  3. 亮暗模式,轻点按钮即可实现
  4. 可选置顶文章,公开事项不必担心被新发表内容淹没了
  5. 可选在首页展开最新发布的文章,主次区分更明显。不必担心文章点击量降低,若开启,首页即是文章页
  6. 可选使用分类文章列表,调理更清晰,博客主题更凸显
  7. 可选展示随机文章,引流更全面,搜索引擎更友好
  8. 可选展示联系方式,全面宣传不再困难
  9. 所有可以看到的图形元素均已font-awesome字符化,包括搜索栏右边的放大镜按钮,加载快人一步
  10. 搜索、归档、分类文章界面半隐效果,增加点击概率
  11. 分类、标签同级展示,连接更方便

安装、设置

2.1版本后,插件TePostViews作为主题推荐插件会在后台弹窗提示。推荐安装激活以获得更完全的体验。

直接前往gitee下载最新发行版,解压到你的Typecho文件夹/usr/theme/中将文件夹重命名为Millennium-style,然后在Typecho后台启用即可。

每次推出新版本时,typecho后台—控制台—外观—设置外观会弹出提示。此时再次前往前面的网页下载最近发行版,解压覆盖即可。

当前,如果你熟悉git操作的话,也可以直接克隆这个工程的master分支。这样每次发出新版本的时候,只需同步一次即可。

现在,可以切换到主题的设置界面,你首先会看到这些勾选项。它们各自控制着首页不同板块,具体如下图所示。

在选项下面,是四个自定义项目。相关说明如下。

置顶文章ID

如果前面开启了置顶文章功能,那么可以在这里输入文章的cid使其在首页置顶显示。多篇置顶可以连续输入,通过英文逗号分隔。置顶的文章可以在首页显示标题及一部分文章内容。

获取cid是简单的,只需查看文章链接中的数字即可。

注意:推荐输入不超过3篇置顶文章,以获得最佳展示效果;仅当置顶文章被勾选且此处写入了文章ID,置顶模块才会被启用。

分类缩略名

如果前面开启了显示分类功能,那么可以在这里输入分类的slug,使首页直接展示这些分类下的文章列表。这些列表将只显示标题而不再显示正文预览。

获取slug也是简单的,直接进入博客设置界面-管理-分类中查看缩略名一列即可。

注意:推荐输入3的倍数个分类,分类名间用英文逗号分隔;仅当显示分类被勾选且此处写入了slug,分类文章列表模块才会被启用。

社交信息

这是上述所有设置项目中最繁琐的。但格式很简单:一行一个社交平台信息,按照社交平台名,链接,图标,用户名的形式输入即可(中间通过英文逗号分隔)。

  • 社交平台名:鼠标放到社交按钮上会浮现出来的名字
  • 链接:如微博、其他平台的主页等,会有对应的超链接地址。有则复制,没有则输#
  • 图标:关联font-awesome。直接输入font-awesome的图标样式即可;若没有则留空(不过font-awesome那么多图标,总会有一个是比较沾边的)
  • 用户名:展示在图标旁的名字。当然也可以使用社交平台的名字而不用用户名

注意:仅当显示社交平台信息被勾选且此处写入了字段才会被启用。

下面举几个例子。

1、微信(有用户名、有图标、无链接)

微信,#,fab fa-weixin,stsiao

2、Tg(有用户名、有图标、有链接)

telegram,https://t.me/stsiao,fab fa-telegram,@stsiao

3、灵感创造者(我的另一个站点,无用户名,无图标,有链接)

灵感创造者,https://kanban.bwsl.wang,,灵感创造者

对于站内链接,也可以放在这里。比如增加一个本站RSS订阅按钮:

RSS,/feed,fa fa-rss,RSS

随机文章显示数量(2.1版本新增)

这部分非常容易理解。如果打开了随机文章功能,那么可以在这里自定义这个模块显示的文章数量。留空则应用默认值8篇。

友链(2.6版本新增)

如果此处填写有信息,对于PC端,此部分会展示在页脚文章归档模块下方;对于手机端,此部分会展示在页脚社交平台信息与搜索栏之间。填写方法很简单,一行一个,按照名称,地址格式书写。其中:

  • 地址应该以http或https开头
  • 中间为英文逗号

那么就说到这儿吧,祝使用愉快。

好像很长时间没怎么更新过博客了,就连一些评论也没再回复过。

所以趁着元旦有点时间,简单说说吧。

工作了

去年8月份开始,正式从学生变成了社会人。不好说是否已经完成了身份的改变,但这身份终究是要如此转变的。

我现在就职在某国企的系统集成子公司的总部。不用想,肯定有很多人感觉朝九晚五,工作轻松。

错了。因为它早在3年前就已经进行了混改了,现实的情况是在我去之前,我们组一共4个人,要支撑全国31家分公司和产业互联网公司的业务。你就可以想象一下在总部的这几个人需要拥有多少个分身了。

但现实终究不是西游记,这些人也不可能拥有分身来协助,所以纵使刚刚到岗的我再不熟悉业务,也算是多了一个帮手。什么意思呢?我到岗的第4天就被安排出差去四川了。

从四川回来,是为期一个礼拜的新员工培训——这可能也是我这半年里边最轻松的一个礼拜。

然后便是无止境的工作。对了,我好像还没有介绍公司的上下班时间:早上八点半,晚上五点,不打卡。

但是工作量使得五点这个下班时间没有什么作用,至少从五点半开始,同事才会陆陆续续的离开。

可能即使是这种程度的加班也比一般的互联网公司下班时间早。但是要知道,公司是不打卡的,不打卡就意味着人力或者领导并不知道你到底是几点离岗的,也就意味着加班是没有加班工资的。

退一万步讲,即使我可以做到正点下班,我的单位在二环里,每天我都要往返于六环外和二环里。而这就使得我一天要上两个班:单位一个班,坐车一个班。

说几个数据你可以体会一下:为了保证八点半到岗,我需要赶六点四十五的车上班;五点半出公司的话,我最早可以在八点二十下车到家。

插空做的视频

所以即使正点出公司,我也没有时间在工作日做视频。所以从工作开始,所有的视频都是在礼拜六日抽空录制的。这也是为什么我不再提供字幕了。没时间打轴维护,也懒得在休息日做这么多工作了。

如果你是从b站关注过来的,你应该还记得我在去年八月份时候发过一条动态,就是更新频率从周更调整至四周三更。这是有计算的。因为我知道不管我去到什么样的公司,我家的位置也就保证了我在工作日是没有时间做额外的事情的——有时间也只是在坐车途中看看书。所以所有额外的工作都要堆到周末完成。而一个月有四个礼拜,四周三更就意味着每个月能空出来一个星期。我又没指定四周三更是哪三周更,所以这一个礼拜有着很大的价值:

  • 如果这个月没什么出差也没什么事,那么空出来的这个礼拜可以录一个视频做备用。
  • 如果有出差,那么出差占用的那个礼拜末正好就是四周三更中不更新的那一周,或者直接使用备用视频发布。

事实上也是这样。在这半年里,我已经使用过几个备用视频了,你可以通过结尾来判断。

很少更新的博客

这半年里边,我视频内容更多的是在进行看板主题的解答。这一部分的内容我个人感觉还真不值得写一篇文章来保存,所以也就没有跟随视频的更新而更新。

即使是自己产出的内容,就现在的情况来看也不是很有时间把视频落到文字上面。

不过之后可能就会有所变化了。为什么呢?因为我想变一变我的流程了——文字不是记录,而是草稿。

也就是说,在确定了视频主题后,先落实到文字,再做成视频。相对于现在临场发挥的录制法,这样兴许还会节省不少剪辑衔接的时间。

啊不说了,明天又该上班了。就祝这里的各位新年(公历)大吉吧。

虽然Dedipath的终身优惠让我可以以每月2.6刀的价格拥有一台双核、1G内存、100G存储、双ip的服务器。不过这么一段时间下来,还是在一些地方感觉有那么点儿不舒服:

  • OVZ架构,内核版本只能用默认的2.6
  • 往大陆直连速度不快(虽然做了加速)
  • ssh经常会被断开(大概是因为经常性的25%的丢包率)

所以,我前两天终于是给它给换掉了。你大概不知道,当你看到这篇文章时,这个博客的伺服器已经从Dedipath的德国机房转移到RackNerd的洛杉矶mc机房了。

根据介绍,该机房的的路由对大陆地区还是不错的。目前中国电信已经加入了cn2线路直连,虽不保证cn2,但相比之前没有加入要好;另外洛杉矶mc机房一直对联通支持的比较友好,联通169骨干直连;移动线路相对弱一点走的也是联通骨干。

那我这台服务器的配置怎么样呢?

3核、2G内存、75G硬盘、月流量2T。

至于速度,北京鹏博士ping出去延迟在200ms左右,下载基本保持在800kb~1M,而这是在没有开启bbr加速的情况下测试的。要打开了bbr,你就琢磨去吧。

没错,这个服务器能打开bbr,这意味着它的内核可以被升级到4版本以上,也就意味着我可以随意调整内核版本,也就说明这个机器是KVM的!

哇,3核2G,75G存储,还是KVM虚拟化,更有cn直连,如此美好的东西价格如何呢?

说出让你死心的价格吧:月缴9.59刀。我又附加了一个ip,所以月缴10.59刀(合74.3)。

当然,它原本应该是这么贵的。

实际上,现在有月缴模式终身5折的优惠。所以我这机器实际月缴5.29刀。按现在汇率算,38块钱一个月!想一想,38块钱就买到了一个三核2G加上75G存储的双ip、KVM虚拟化服务器,而这些钱买腾讯云能买到啥?至少你的带宽就只有可怜的1Mbps(核算过来从服务器下载数据速度最高128k);而6刀买国外服务器又能买到啥样的?要想kvm的话,撑死1核1G了吧?

这么看,超值了啊!

比我这个配置低的还有两个KVM方案:

  • 单核512M、30G存储、500G流量,只能年缴23刀
  • 双核1G、50G存储、1T流量,月缴5.59刀,加一个终身5折优惠,月缴才1块多美元啊!

要是最近想买服务器,快去!

购买传送门:

双核1G+50G存储

我的同款

优惠码(我也不知道啥时候失效,所以尽快):zhujicepingcom50mo

记得改成月缴呦~

感谢原插件(WikimoeBangumi)的创作者 广树,我所做的仅仅是在其基础之上进行了些许改动而已。
不想看废话的,就请直接拉到最后。

Übermorgen/Typecho追番插件-B站来源


最近更新

  • 1.0.0.2210, 2022.10.23更新

    • 合并请求,修复undefined问题
    • 自定义翻页键样式输入框可以随意回车了
  • 1.0.0.2010, 2020.10.25更新

    • 进一步避免jQuery对主题的依赖
    • 支持自定义每页数量
    • 支持翻页按钮自定义
  • 1.0.0.207, 2020.7.12更新

    • 隔离jquery依赖
  • 1.0.0.204, 2020.4.22更新
    追番信息分页显示,每页30个
  • 1.0.0.202, 2020.2.8更新
    兼容伪静态站
  • 1.0.0.201c, 2020.1.20更新

    1. 进一步撤销了no-referrer标记
    2. 现在番剧封面不直接从b站获取了,会保存到服务器供使用

    注意:因为现在需要下载封面到服务器,所以设置好插件后应先访问一次以构建封面缓存。时间可能较长,耐心等待。

  • 1.0.0.201b 20200116更新
    新增:番剧块背景可调(番剧封面/空白)
    更新请先禁用再启用
  • 1.0.0.201 20200115更新

    1. 修复了评论与番剧封面不兼容的问题
    2. 优化了载入速度。理论上每多45个番剧,载入速度能提升2倍
    3. 现在的番剧封面默认走https协议了

一、为什么想做这个

自打从WP转到Typecho,我就突然有了浏览独立博客的习惯。但博客内容并不是我浏览的重点所在,我更喜欢去看每位博客作者的 关于 页面。真的有意思。

除此之外,我很好奇每个博客的结构。比如都有哪些分类,页面都有什么元素之类的。这关注点有点儿奇怪,不是吗?

但不知是不是我的选择性记忆,我逐渐发现不少的博客都有一个追番页。你说它有什么用吗?我其实没感觉有啥用说实话…所以我也一直没怎么太注意过这种插件。直到我开始应用了看板作为我的进度及备忘工具之后,突然感觉追番页这种有条理的东西,放在那儿也挺有意思的啊。于是便简单搜了搜这类插件。自然,如果你检索过这种插件,那么仅有的两个结果你大概也就知道了:我使用的这个主题的大佬做的熊猫追番,以及WikimoeBangumi。这两个的来源都是 Bangumi 的API,而我从来都是在B站上头(不管是看还是追)的,单开一个账号我也想不起来去打理,又白消耗人家一丁点数据库空间。所以,我便尝试着把WikimoeBangumi改造,用B站的api来实现一个追番插件了。

二、现在成什么样了

每天两小时,连蒙带猜的搞了两天,已经改的差不多了。用抽风Crazy这个头油怪的账号试了一下(不,他并不认识我,之后你会明白为什么可以拿别人账号测试),83个追番加载的速度还算可以接受吧。刨去我的服务器从德国向B站请求数据->B站返回给德国->处理好后将网页发送到圣何塞->圣何塞转送给北京这种由于世界人民大团结而产生的延迟,我认为3秒加载还是可以接受的(这地方我觉得我以后会改一改。我觉得…)

主要更改了哪些呢?

  • api:这是当然的。现在会通过B站来请求追番数据了
  • 登录方式:大佬原本的插件是通过用户名密码,很友好的登陆的。但是B站的第三方登录需要API Key,否则需要破一道图片验证码…这太麻烦了,所以我改成了直接用cookie登录。自然,插件设置页变更成了填写UID和cookie。所以设置的时候有点儿麻烦,但恕我才疏学浅,实在想不到怎么能比较方便的实现登录了…
  • 块显示内容:原本插件会显示中文番剧名、外文番剧名、首播日期、进度。现在更改成了中文番剧名、最后更新的剧集名、首播日期、进度。
  • 进度条显示内容:原本是简洁的当前话数/总话数(类似10/135/未知),但B站的剧集数并没那么规矩,而好在B站api直接提供了一个当前观看状态的值(类似于 已看完第13话已看完PV1看到第2话 1:37这种),顺便为了友好化未知这种冷冰冰的词,所以更改成了观看状态(截掉了具体的观看位置)/共 num 话(类似于 已看完第13话/共 13 话已看完PV1/未完结看到第2话/共 12 话
  • css:稍微的调整了块高度,使其在RAW主题上可以更好地显示;亦调整了图片长宽,避免变形;换成了em单位,对于不同分辨率,显示应该更好一些了?还调整了进度条,现在当番剧未完结时,进度会显示成50%了。
  • (201b新增)css: 块背景可选透明还是番剧封面
  • 函数变更:整体到底是麻烦了还是简单了我也说不清,总之删掉了部分函数,更改了载入追番的逻辑(B站API默认不能直接获取到所有,但是它会返回一个追番总数。所以目前暂时用了一个简单粗暴的解决方案:分多次获取,然后全部显示)(204取消了这个粗暴的逻辑)分页获取,提供上下翻页按钮,更改了curl的方法(加入了伪装登录用的各种需要的头),自然也更改了各种变量对应的json字段,最后增加了一个函数,用于截掉详细进度信息。
  • (201c新增)函数:增加了下载封面到服务器的方法。现在可以完全规避b站禁止跨域导致的封面403问题了。
  • (2010新增)函数: 可以自定义每页展示的番剧数量以及翻页键按钮样式了。
  • (207新增)依赖:独立了jQuery依赖,使得不再要求主题带有jQuery库,(2010新增)并且包含在插件中,不必再担心获取js速度的问题了。

效果 看这里

三、怎么用?

注意

你的博客根目录下不存在bangumi文件。注意是文件,文件夹是没问题的。因为封面会保存到这个文件夹内,所以如果存在同名文件夹没有关系(共用就好),但文件就不成了。

a、插件部署

clone或下载zip,解压放到你的Typecho文件夹/usr/plugins/,并更改文件夹名为BiliBangumi,启用即可。

b、番剧页

参考WikimoeBangumi的部署方法。只不过语句要改成<?php BiliBangumi_Plugin::output(); ?>

c、插件设置

目前一共两个设置项:UID、cookie。

截止到2010,共有5个设置项:UID、cookie、块背景、每页数量和自定义翻页键。

UID很好说,直接把你的BilibiliUID填入即可。此时会有两种情况:

  • 如果你的追番信息是公开的(即别人可以从你的主页看到你追的番):这时候你的追番页应该就可以显示出追番信息了——除了进度相关是失效的。这就是为什么我可以用头油怪的账号做实验。
  • 如果你的追番信息是隐藏的,或者说你想要显示出追番进度,那么就需要“登录”——也就是填入cookie。

至于块背景,你可以选择使用番剧封面还是默认背景色(默认是透明的);每页数量则定义了每一页中展示的番剧数量,默认是10。

自定义翻页键则属于比较高级的设置项。可通过编写css自定义翻页按钮的样式实现更细致的美化。这里只需使用css中属性: 变量;的语法顺次写入即可。不要回车,回车会触发Typecho设置页面的确定按钮。

d、所以如何获取cookie?

  1. 在Bilibili登录你的账号(电脑网页端,推荐使用Chrome)
  2. 点击头像,进入个人主页(此时网址应该是space.bilibili.com/uid号。如果uid号后面还有一堆字符,删掉即可)
  3. 按下万能的F12,切换到Network标签
  4. 清空一下Network里边的内容,然后F5刷新
  5. 不出意外,此时在Network列表内,应该有一项是以UID为名称的条目。点击它
  6. 弹出一个预览窗格,切换到Headers标签页
  7. Request Headers栏目下,会有一个cookie项目。把这个的值复制下来,粘贴到插件设置页,保存
  8. enjoy

e、疑难解答


Q: 封面获取逻辑

A:因为使用no-referrer总会间歇性的失效导致封面无法获取,所以从版本201c开始,封面获取逻辑改为从服务器自身获取:

  • 第一次进入到追番列表的番剧,自动去b站下载封面到typecho文件夹/bangumi/
  • 之后每次访问,封面就会从上述的文件夹获取封面文件了

因为需要下载,所以在初次启用插件时,最好在设置好后自己先访问一次以完成封面下载工作。受限于服务器传输速度和追番数量,第一次访问加载的时间可能会很长,耐心等待封面下载完成即可。

想清除封面文件,只需清理typecho根目录/bangumi即可

Q:迷の版本号

A:是一个拼接出的结果:原插件版本号.日期后两位+月份。这里边我只会更新我自己的版本号部分,原插件版本号会一直保留原样,作为基于哪个版本的参照。这是我的习惯,就像我喜欢留点儿缺陷,后期刷版本号的一种执念::(滑稽)

四、更多信息

下载地址:https://gitee.com/stsiao/typecho_bangumi_bili


任何问题,留在这里吧。码云的issue我可能很难想起来去看…

就怕忘了。万一啥时候主题一更新,或者手残一重装,又要重新来一遍可怎么办…

顶栏公告栏

修改效果:顶部导航栏下面滚动自定义的公告;后台的设置外观界面可以自定义公告和滚动速度

编辑当前外观中,在functions.phpfunction themeConfig($form)方法里添加代码

//公告栏设置
$notice = new Typecho_Widget_Helper_Form_Element_Textarea('notice', NULL, NULL, _t('公告'), _t('公告栏,可用一部分html标签'));
$form->addInput($notice);
$speed = new Typecho_Widget_Helper_Form_Element_Textarea('speed', NULL, NULL, _t('公告游动控制'), _t('设置公告文字游动速度'));
$form->addInput($speed);

然后,在header.php</nav>下增加公告栏位

<!-- 公告牌 -->
<div id="bbs">
    <marquee class="nav-link" scrollamount=<?php $this->options->speed(); ?> onmouseover=this.stop() onmouseout=this.start() style="line-height:18px;">  
</div>

<!-- 下面这个脚本,可以实现公告滚动几次之后自动隐藏 -->
<!-- 如果没有这个需求,可以不用;上方div的id也可以不用 -->
<!-- 用的话,在marquee标签里增加loop="数字"来给出循环次数 -->
<script>
    function hideboard(){
        bbs.style.display="none"
    }
</script>

修正https导致的问题

可能只在cloudflare使用flexible模式时候才需要修改。

具体看这里吧

获得评论者正确的ip地址

只需要在网站根目录的config.inc.php中,增加/修改一个字段即可:

/** IP地址来源 */
define('__TYPECHO_IP_SOURCE__', 'HTTP_X_FORWARDED_FOR');

/** 具体需要看phpinfo的PHP Variable里边能展示真正ip的字段 */

Typecho支持PHP7的修正

由于PHP7的一部分函数被取消,导致Typecho默认并不能支持PHP7.但只需要将根目录/config.inc.php中的$db = new Typecho_Db('Mysql', 'typecho_');更改为$db = new Typecho_Db('Pdo_Mysql', 'typecho_');,保存即可。

RAW主题去掉日志/说说切换栏

index.php中,带有“日志”和“说说”两个div删掉即可。

RAW主题,文章列表页顶栏修正

当把typecho的主页设置为静态页面时,文章列表(就是默认的首页)的顶栏会置空。应该是开发时没有注意到这个问题。
修复也很简单,在index.php中,将

<?php if ($this->is('index')): ?><!-- 页面为首页时 -->
最近文章
<?php if...

一句的if条件加上$this->is('front'),即条件语句变为

<?php if ($this->is('index') || $this->is('front')): ?><!-- 页面为首页/文章列表页时 -->

保存即可。

Access插件,控制面板仅管理员账号显示

  • 编辑Access的plugin.php文件,将active方法中的第2行最后一个参数修改为administrator,即改变成
Helper::addPanel(1, self::$panel, _t('Access控制台'), _t('Access插件控制台'), 'administrator');
  • 注释adminFooter方法中的所有行
  • 保存。如果不生效,则重新应用插件

RAW主题,增加前台注册页

最终效果:点击弹出登录窗口后,拥有链接导向注册页。点击后弹出注册窗口,用户可以输入用户名和邮箱注册,之后跳转到后台。

修改RAW主题的header.php文件

1、修改登录页,增加注册页链接

  • 找到action="<?php $this->options->loginAction()?>的form表单,在文本中加入注册页的链接:
<a style="text-decoration: underline" data-fancybox="" data-src="#hidden-register-form" href="javascript:;" target="_blank">注册</a>

2、增加注册表单

相同文档里,增加下述代码:

<div id="hidden-register-form" class="login-form" style="display:none">
    <form action="<?php $this->options->registerAction();?>" method="post" name="register" role="form">
        <p>注册</p>
        <p>
            <input type="hidden" name="_" value="<?php echo $this->security->getToken($this->request->getRequestUrl());?>">
            <input type="text" name="name" placeholder="用户名" required/>
        </p>
        <p>
            <input type="email" id="mail" name="mail" placeholder="邮箱" required/>
        </p>
        <p style="font-weight: bold; color: red">
            成功后请立刻修改密码!否则随机密码你是记不住的!
        </p>
        <button type="submit" name="loginsubmit" value="true">注册</button>
    </form>
</div>

保存即可。

随便看看功能

整合在热门文章插件中,可共同启停用。最终显示在电脑端左栏中。

  • 在热评插件的plugin.php中,增加功能:
public static function outputRandomPosts() {
    $archive = Typecho_Widget::widget('Widget_Archive');
    $pluginOpts = Typecho_Widget::widget('Widget_Options')->plugin('TePostViews');
    $sortBy = $pluginOpts->sortBy;
    $hotNums = $pluginOpts->hotNums;
    $minViews = $pluginOpts->minViews;
    $linkClass = $pluginOpts->linkClass;
    $hotNums = intval($hotNums) <= 0 ? 8 : $hotNums;
    $minViews = intval($minViews) <= 0 ? 0 : $minViews;
    $linkClass = strlen($linkClass) > 0 ? 'class="'.$linkClass.'" ' : '';
    $db = Typecho_Db::get();
    $select = $db->select()->from('table.contents')
        ->where('table.contents.type = ?', 'post')
        ->where('table.contents.status = ?', 'publish')
        ->order('', 'RAND()')
        ->limit($hotNums);
    $rows = $db->fetchAll($select);
    foreach ($rows as $row) {
        $row = $archive->filter($row);
        echo '<span><a ' . $linkClass . 'href="' . $row['permalink'] . '" title="' . $row['title'] . '">' . $row['title'] . '</a><br>
        <span style="margin-right:1em"><i class="fa fa-eye"></i>&nbsp;'.$row['viewsNum'].'</span>
        <span><i class="fa fa-comment"></i>&nbsp;'.$row['commentsNum'].'</span></span>';
    }
}
  • RAW主题的nav-left.php文件中,在nav标签合适位置增加下述代码:
<aside>
    <div id="hot-posts" style="animation-delay:0.4s">
        <span><i class="fa fa-random"></i> 随便看看</span>
        <?php TePostViews_Plugin::outputRandomPosts(); ?>
    </div>
</aside>

Access插件,兼容ipv6地址记录

通过直接记录ip,而不使用ip2long来保存。性能会下降

数据库:

access_log表中,修改ip列为varchar(100)

插件:

page/console.php: 类似于Access->long2ip()的字段全部只保留ip变量$log['ip']

Access_Core.php: 注释所有$ip = bindec(decbin(ip2long($ip)));

Access_IP.php: $nip2 = pack('N', ip2long($nip));改为$nip2 = pack('N', $nip);

编辑文章时增加标签选择列表

来源:Typecho Wiki

在typecho目录admin下找到write-post.php文件并进行编辑,在其中找到代码(大概在94行左右):

<p><input id="tags" name="tags" type="text" value="<?php $post->tags(',', false); ?>" class="w-100 text" /></p>

在这段代码后面增加如下代码:

<div id="exist-tags">
<p style="background: #fff;border: 1px solid #D9D9D6;display: block;padding: 2px 4px;">
<?php
$stack = Typecho_Widget::widget('Widget_Metas_Tag_Cloud')->stack;
$i = 0; 
while (isset($stack[$i])) {
  echo "<a id=\"mydiv$i\" style=\"cursor:pointer;padding: 0px 6px;margin: 2px 0;display: inline-block;\" onclick=\"mytag=document.getElementById('mydiv$i');mytag.style.backgroundColor='#E9E9E6';t=document.getElementById('tags').value;c=t?',':'';document.getElementById('tags').value=t+c+'",$stack[$i]['name'],"'\">",$stack[$i]['name'], "</a>";
  $i++;
  if (isset($stack[$i])) echo "  ";
}
?>
</p>
</div>

Typecho修改头像地址

现在gravatar的地址已经不可连接,所以替换为镜像源以确保头像可以正常显示。

前往网站根目录/var/Typecho/Common.php,将gravatarUrl方法中的网址按规律修改即可。具体镜像源可以参考知乎文章这个博客

一直用Cloudflare作为我这个域名的DNS和CDN。一来,我的服务器在德国,不能备案。所以虽然可以用国内的域名解析,但不能用国内的CDN,访问速度必然会是一个问题;二来,Cloudflare的CDN是免费的。免费的东西谁不喜欢::(阴险)

因为本身我这个博客也申请过ssl证书,而Cloudflare之前的ssl设置也一直使用的Full(strict),然后从CDN到我这博客的后台都做了强制的https跳转。一直用的也好好的。直到昨天…

不知道脑子哪根筋抽了,想把我的子域名都做上CDN。但Cloudflare的Full模式要求域名要有证书,也要有Cloudflare的证书。

Cf的证书好说,免费申请一个就可以随便用,只要主域名是一个就行;但我自己的证书不行啊,只授权到了www这个下面。所以如果这样的话,就不得不再申请几个证书来用。太麻烦了…就不如把Cf的SSL降到Flexible来用来得快。


Cf的SSL等级有4个:Off、Flexible、Full和Full(Strict)。区别看图


然后,满心欢喜的把我的很多二级域名都打开了CDN。再来ping一下:

完美。ping到的ip已经是Cf的CDN地址了。加速的同时,我的真实ip也已经被隐藏了。其实本身我的真实ip也是禁ping的…所以就算知道了,如果想用ping来验证大概也是不可能的

但随之而来的就是对这个正经的HTTPS站点一些坑爹的善后了…

一、重定向次数过多

一开始没发现这个问题,直到在满意的离开我那些带有小绿锁的二级域名站,转到www下面时…

打开控制台看跳转(用到了Firefox。因为火狐不会提示这个错误而是会一直跟着跳转走,直到内存耗尽),发现访问地址不断的在http和https之间来回跳跃。

仔细阅读SSL的帮助,发现对Flexible的解释中提到了一点:

Note: You may encounter a redirect loop with some origin configurations.

为什么呢?往前看一看:

Visitors will be able to access your site over HTTPS, but connections to your origin will be made over HTTP. 

所以说,使用flexible时,浏览器请求HTTPS到cf,而cf则请求HTTP到我的服务器上。而对于www这个网址,我之前又配置过强制HTTPS,也就是说,cf通过HTTP链接服务器的请求全部被跳转到了HTTPS,但cf又把它拉回了HTTP。这循环便形成了。

明白了原因,那解决就很好办了。因为我是用宝塔的,所以直接去这个网站的SSL设置,将强制HTTPS关掉,便万事大吉了。

直到我想登录的时候…

二、登录不作用

什么现象呢?当我想登陆时,输入好用户名和密码后点击登录,页面会刷新一下,然后我填写的东西便被吞噬了。

仿佛无事发生。

可还行::(阴险)

这我可是真的没头绪了…毕竟在Full模式时候都没出现过这种问题,怎么等级松下来了,反而登录不了了…

直到搜到了这个博客的文章,提到了个解决方案,就是在config.ini.php下加入一行:

 /** 开启HTTPS */
define('__TYPECHO_SECURE__',true);

虽然这个博主的问题是评论不可用,我这是登录不可用,但都是不可用,所以就死马当活驴医,试试吧。

然后…就可以了…

我所有二级域名都可以愉快的使用CDN和HTTPS了。