Typecho千禧年主题大更新!
自己基于官方主题魔改的千禧年风格主题更新到了3.0版本了。增加了不少实用功能,也优化、修正了前面版本遗漏的问题。所以如果你以前访问过本站,可能需要强制刷新一次才能获得正常的浏览体验。
当然,如果你是Typecho用户,也对这个主题感兴趣,请阅读这篇主题介绍文章。
祝使用愉快!公历新年快乐!
自己基于官方主题魔改的千禧年风格主题更新到了3.0版本了。增加了不少实用功能,也优化、修正了前面版本遗漏的问题。所以如果你以前访问过本站,可能需要强制刷新一次才能获得正常的浏览体验。
当然,如果你是Typecho用户,也对这个主题感兴趣,请阅读这篇主题介绍文章。
祝使用愉快!公历新年快乐!
3.0版本上线!大改版,简约同时更实用!建议一定更新!
我一直很喜欢一种网页风格:没有排版,也没有华丽的装饰,各种文字信息以较高密度呈现在观看者眼前的风格。后来我逐渐意识到,这种风格十分偏向于千禧年前后,匠人手制网页的模样。
在我把Typecho更新之后,曾经的主题便不兼容了。也是在这时候,我发现Typecho自己的主题挺有我说的那种味道的,于是打算直接用默认主题就得了。但渐渐的,我发现默认主题还是多多少少有些缺失的,比如首页直接把文章全文按顺序排列,浏览文章十分不便。所以,我最终决定把官方这个主题打磨一下,让它成为我心目中最理想的,最千禧年风格主题。现在,它来了。
基于官方主题,原汁原味的简约,完全区分文章与独立页面这两个Typecho的文章形式。在此基础上有着更多优势:
2.1版本后,插件TePostViews
作为主题推荐插件会在后台弹窗提示。推荐安装激活以获得更完全的体验。
直接前往gitee下载最新发行版,解压到你的Typecho文件夹/usr/theme/中
将文件夹重命名为Millennium-style
,然后在Typecho后台启用即可。
每次推出新版本时,typecho后台—控制台—外观—设置外观
会弹出提示。此时再次前往前面的网页下载最近发行版,解压覆盖即可。
当前,如果你熟悉git操作的话,也可以直接克隆这个工程的master分支。这样每次发出新版本的时候,只需同步一次即可。
现在,可以切换到主题的设置界面进行自定义了。下面详细介绍每一个设置项。
若开启,则首页会全文显示最新发布的文章。
若开启,则侧栏会展示网站内除文章作者外的最近回复内容。
若开启,则侧栏会展示网站的分类结构。
若开启,则页脚会展示文章归档板块。
若开启,则侧栏会展示随机文章板块。
这五个选项对应的效果如图所示。
在选项下面,是一系列自定义功能,相关说明如下。
在这里输入文章的cid使其在首页置顶显示,留空则不启用。多篇置顶可以连续输入,通过英文逗号分隔。置顶的文章可以在首页显示标题及一部分文章内容。
获取cid默认情况下是简单的,只需查看文章链接中的数字即可。
如果你有自定义文章slug的习惯,那么也许需要到Typecho控制台-管理-文章
下,找到对应的文章后,查看编辑文章的链接,其最后会有?cid=
字段,等号后面的数字便是文章的cid了。
使用效果如下图。
注意:推荐输入不超过3篇置顶文章,以获得最佳展示效果。
在这里输入分类的slug,使首页直接展示这些分类下的文章列表,留空则不启用。多个分类可以连续输入,通过英文逗号分割。这些列表将只显示标题而不再显示正文预览。
获取slug也是简单的,直接进入Typecho控制台-管理-分类
中查看缩略名
一列即可。
使用效果如下图。
注意:推荐输入3的倍数个分类,以获得最佳展示效果。
在这里输入内容以启用“联系我”板块。这里输入的内容结构是所有设置项目中最繁琐的:一行一个社交平台信息,按照社交平台名,链接,图标,用户名
的形式输入即可(中间通过英文逗号分隔)。
#
下面举几个例子。
微信,#,fab fa-weixin,stsiao
telegram,https://t.me/stsiao,fab fa-telegram,@stsiao
灵感创造者,https://kanban.bwsl.wang,,灵感创造者
对于站内链接,也可以放在这里。比如增加一个本站RSS订阅按钮:
RSS,/feed,fa fa-rss,RSS
使用效果如下图。
对于手机端,此板块会自动调整至页脚展示。
当勾选了随机文章
功能,那么可以在这里自定义这个模块显示的文章数量。留空则应用默认值8篇。
在此处输入内容以启用“友链”板块。内容结构为一行一个,按照名称,地址
格式书写。其中:
使用效果如下图。
在此处输入内容以启用自定义页脚部分。通过HTML语法书写任何内容。可以是展示在页面最下方的文本,也可以是一段CSS样式表,甚至是一段js代码。
最基本的使用效果如下图。
主题拥有标题导航功能。编写文章/独立页面时,只需根据需要设置不同等级的标题样式,发布后即可自动划分文章并在侧栏展示,点击便可跳转至文章对应位置。
注意:此模块仅在电脑端展示
类似于微信公众号的阅读原文
按钮,在编写文章时,将链接填入编辑页面底部的原文链接
处,发布后便会自动在文章底部增加此按钮,点击即可跳转。
注意:此功能仅对文章生效,独立页面填写后不做响应。
那么就说到这儿吧,祝使用愉快。
好像很长时间没怎么更新过博客了,就连一些评论也没再回复过。
所以趁着元旦有点时间,简单说说吧。
去年8月份开始,正式从学生变成了社会人。不好说是否已经完成了身份的改变,但这身份终究是要如此转变的。
我现在就职在某国企的系统集成子公司的总部。不用想,肯定有很多人感觉朝九晚五,工作轻松。
错了。因为它早在3年前就已经进行了混改了,现实的情况是在我去之前,我们组一共4个人,要支撑全国31家分公司和产业互联网公司的业务。你就可以想象一下在总部的这几个人需要拥有多少个分身了。
但现实终究不是西游记,这些人也不可能拥有分身来协助,所以纵使刚刚到岗的我再不熟悉业务,也算是多了一个帮手。什么意思呢?我到岗的第4天就被安排出差去四川了。
从四川回来,是为期一个礼拜的新员工培训——这可能也是我这半年里边最轻松的一个礼拜。
然后便是无止境的工作。对了,我好像还没有介绍公司的上下班时间:早上八点半,晚上五点,不打卡。
但是工作量使得五点这个下班时间没有什么作用,至少从五点半开始,同事才会陆陆续续的离开。
可能即使是这种程度的加班也比一般的互联网公司下班时间早。但是要知道,公司是不打卡的,不打卡就意味着人力或者领导并不知道你到底是几点离岗的,也就意味着加班是没有加班工资的。
退一万步讲,即使我可以做到正点下班,我的单位在二环里,每天我都要往返于六环外和二环里。而这就使得我一天要上两个班:单位一个班,坐车一个班。
说几个数据你可以体会一下:为了保证八点半到岗,我需要赶六点四十五的车上班;五点半出公司的话,我最早可以在八点二十下车到家。
所以即使正点出公司,我也没有时间在工作日做视频。所以从工作开始,所有的视频都是在礼拜六日抽空录制的。这也是为什么我不再提供字幕了。没时间打轴维护,也懒得在休息日做这么多工作了。
如果你是从b站关注过来的,你应该还记得我在去年八月份时候发过一条动态,就是更新频率从周更调整至四周三更。这是有计算的。因为我知道不管我去到什么样的公司,我家的位置也就保证了我在工作日是没有时间做额外的事情的——有时间也只是在坐车途中看看书。所以所有额外的工作都要堆到周末完成。而一个月有四个礼拜,四周三更就意味着每个月能空出来一个星期。我又没指定四周三更是哪三周更,所以这一个礼拜有着很大的价值:
事实上也是这样。在这半年里,我已经使用过几个备用视频了,你可以通过结尾来判断。
这半年里边,我视频内容更多的是在进行看板主题的解答。这一部分的内容我个人感觉还真不值得写一篇文章来保存,所以也就没有跟随视频的更新而更新。
即使是自己产出的内容,就现在的情况来看也不是很有时间把视频落到文字上面。
不过之后可能就会有所变化了。为什么呢?因为我想变一变我的流程了——文字不是记录,而是草稿。
也就是说,在确定了视频主题后,先落实到文字,再做成视频。相对于现在临场发挥的录制法,这样兴许还会节省不少剪辑衔接的时间。
啊不说了,明天又该上班了。就祝这里的各位新年(公历)大吉吧。
虽然Dedipath的终身优惠让我可以以每月2.6刀的价格拥有一台双核、1G内存、100G存储、双ip的服务器。不过这么一段时间下来,还是在一些地方感觉有那么点儿不舒服:
所以,我前两天终于是给它给换掉了。你大概不知道,当你看到这篇文章时,这个博客的伺服器已经从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方案:
要是最近想买服务器,快去!
优惠码(我也不知道啥时候失效,所以尽快):zhujicepingcom50mo
记得改成月缴呦~
感谢原插件(WikimoeBangumi)的创作者 广树,我所做的仅仅是在其基础之上进行了些许改动而已。
不想看废话的,就请直接拉到最后。
1.0.0.2411, 2024.11.23更新
1.0.0.246, 2024.6.16更新
1.0.0.245, 2024.5.13更新
1.0.0.2210, 2022.10.23更新
1.0.0.2010, 2020.10.25更新
1.0.0.207, 2020.7.12更新
1.0.0.201c, 2020.1.20更新
注意:因为现在需要下载封面到服务器,所以设置好插件后应先访问一次以构建封面缓存。时间可能较长,耐心等待。
1.0.0.201 20200115更新
自打从WP转到Typecho,我就突然有了浏览独立博客的习惯。但博客内容并不是我浏览的重点所在,我更喜欢去看每位博客作者的 关于 页面。真的有意思。
除此之外,我很好奇每个博客的结构。比如都有哪些分类,页面都有什么元素之类的。这关注点有点儿奇怪,不是吗?
但不知是不是我的选择性记忆,我逐渐发现不少的博客都有一个追番页。你说它有什么用吗?我其实没感觉有啥用说实话…所以我也一直没怎么太注意过这种插件。直到我开始应用了看板作为我的进度及备忘工具之后,突然感觉追番页这种有条理的东西,放在那儿也挺有意思的啊。于是便简单搜了搜这类插件。自然,如果你检索过这种插件,那么仅有的两个结果你大概也就知道了:我使用的这个主题的大佬做的熊猫追番,以及WikimoeBangumi。这两个的来源都是 Bangumi 的API,而我从来都是在B站上头(不管是看还是追)的,单开一个账号我也想不起来去打理,又白消耗人家一丁点数据库空间。所以,我便尝试着把WikimoeBangumi改造,用B站的api来实现一个追番插件了。
每天两小时,连蒙带猜的搞了两天,已经改的差不多了。用抽风Crazy
这个头油怪的账号试了一下(不,他并不认识我,之后你会明白为什么可以拿别人账号测试),83个追番加载的速度还算可以接受吧。刨去我的服务器从德国向B站请求数据->B站返回给德国->处理好后将网页发送到圣何塞->圣何塞转送给北京这种由于世界人民大团结而产生的延迟,我认为3秒加载还是可以接受的。
主要更改了哪些呢?
当前话数/总话数
(类似10/13
、5/未知
),但B站的剧集数并没那么规矩,而好在B站api直接提供了一个当前观看状态的值(类似于 已看完第13话
、已看完PV1
、看到第2话 1:37
这种),顺便为了友好化未知
这种冷冰冰的词,所以更改成了观看状态(截掉了具体的观看位置)/共 num 话
(类似于 已看完第13话/共 13 话
、已看完PV1/未完结
、看到第2话/共 12 话
)效果 看这里
你的博客根目录下不存在bangumi
文件。注意是文件,文件夹是没问题的。因为封面会保存到这个文件夹内,所以如果存在同名文件夹没有关系(共用就好),但文件就不成了。
clone或下载zip,解压放到你的Typecho文件夹/usr/plugins/
,并更改文件夹名为BiliBangumi
,启用即可。
参考WikimoeBangumi的部署方法。只不过语句要改成<?php BiliBangumi_Plugin::output(); ?>
2010版本开始,设置内容从UID、cookie两项增加到了5项:UID、cookie、块背景、每页数量和自定义翻页键。
UID很好说,直接把你的BilibiliUID填入即可。此时会有两种情况:
至于块背景,你可以选择使用番剧封面还是默认背景色(默认是透明的);每页数量则定义了每一页中展示的番剧数量,默认是10。
自定义翻页键则属于比较高级的设置项。可通过编写css自定义翻页按钮的样式实现更细致的美化。这里只需使用css中属性: 变量;
的语法顺次写入即可。
space.bilibili.com/uid号
。如果uid号后面还有一堆字符,删掉即可)F12
,切换到Network
标签F5
刷新Headers
标签页Request Headers
栏目下,会有一个cookie
项目。把这个的值复制下来,粘贴到插件设置页,保存Cookie有寿命,无法保证长期有效。因此从1.0.0.2411版本开始,插件加入了Cookie有效性检测功能。当填入的Cookie失效,插件设置页面将弹出提示,便于及时更新设置项。
Q: 封面获取逻辑
A:因为使用no-referrer
总会间歇性的失效导致封面无法获取,所以从版本201c
开始,封面获取逻辑改为从服务器自身获取:
typecho文件夹/bangumi/
下因为需要下载,所以在初次启用插件时,最好在设置好后自己先访问一次以完成封面下载工作。受限于服务器传输速度和追番数量,第一次访问加载的时间可能会很长,耐心等待封面下载完成即可。
想清除封面文件,只需清理typecho根目录/bangumi
即可
Q:迷の版本号
A:是一个拼接出的结果:原插件版本号.更新日期年份后两位+月份
。这里边我只会更新我自己的版本号部分,原插件版本号会一直保留原样,作为基于哪个版本的参照。这是我的习惯,就像我喜欢留点儿缺陷,后期刷版本号的一种执念::(滑稽)
下载地址:https://gitee.com/stsiao/typecho_bangumi_bili
任何问题,留在这里吧。码云的issue我可能很难想起来去看…
就怕忘了。万一啥时候主题一更新,或者手残一重装,又要重新来一遍可怎么办…
修改效果:顶部导航栏下面滚动自定义的公告;后台的设置外观
界面可以自定义公告和滚动速度
编辑当前外观
中,在functions.php
的function 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>
可能只在cloudflare使用flexible模式时候才需要修改。
具体看这里吧。
只需要在网站根目录的config.inc.php
中,增加/修改一个字段即可:
/** IP地址来源 */
define('__TYPECHO_IP_SOURCE__', 'HTTP_X_FORWARDED_FOR');
/** 具体需要看phpinfo的PHP Variable里边能展示真正ip的字段 */
由于PHP7的一部分函数被取消,导致Typecho默认并不能支持PHP7.但只需要将根目录/config.inc.php
中的$db = new Typecho_Db('Mysql', 'typecho_');
更改为$db = new Typecho_Db('Pdo_Mysql', 'typecho_');
,保存即可。
将index.php
中,带有“日志”和“说说”两个div删掉即可。
当把typecho的主页设置为静态页面时,文章列表(就是默认的首页)的顶栏会置空。应该是开发时没有注意到这个问题。
修复也很简单,在index.php
中,将
<?php if ($this->is('index')): ?><!-- 页面为首页时 -->
最近文章
<?php if...
一句的if条件加上$this->is('front')
,即条件语句变为
<?php if ($this->is('index') || $this->is('front')): ?><!-- 页面为首页/文章列表页时 -->
保存即可。
plugin.php
文件,将active
方法中的第2行最后一个参数修改为administrator
,即改变成Helper::addPanel(1, self::$panel, _t('Access控制台'), _t('Access插件控制台'), 'administrator');
adminFooter
方法中的所有行最终效果:点击弹出登录窗口后,拥有链接导向注册页。点击后弹出注册窗口,用户可以输入用户名和邮箱注册,之后跳转到后台。
修改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> '.$row['viewsNum'].'</span>
<span><i class="fa fa-comment"></i> '.$row['commentsNum'].'</span></span>';
}
}
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>
通过直接记录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>
现在gravatar的地址已经不可连接,所以替换为镜像源以确保头像可以正常显示。
前往网站根目录/var/Typecho/Common.php
,将gravatarUrl
方法中的网址按规律修改即可。具体镜像源可以参考知乎文章、这个博客