├── 404.php ├── README.md ├── archive.php ├── comments.php ├── footer.php ├── functions.php ├── header.php ├── index.php ├── main.min.js ├── page-archives.php ├── page-links.php ├── page-whisper.php ├── page.php ├── post.php ├── screenshot.png ├── sidebar.php └── style.min.css /404.php: -------------------------------------------------------------------------------- 1 | need('header.php'); ?> 3 |
4 |

404 - 页面没找到

5 |

你要查看的页面已被转移或删除了

6 |
7 | 8 | options->OneCOL): $this->need('sidebar.php'); endif; ?> 9 | need('footer.php'); ?> -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Typecho主题 - Initial 简约而不简单(v2.5.5) 2 | 3 | ![主题封面](https://www.offodd.com/usr/uploads/2018/09/111355748.png) 4 | 5 | 主题命名为**Initial**,意为“**初**”,专注于文字,算是极极极简风格吧,简约而不简单,希望你能喜欢这种很小众的风格。 6 | 7 | 主题预览:[https://www.offodd.com/](https://www.offodd.com/) 8 | 9 | ## 功能与特点 10 | 11 | * 重新优化的响应式布局,移动端舒适体验 12 | * 轻量级设计,极速浏览体验 13 | * 傻瓜式后台设置,告别使用疑惑 14 | * 公共资源支持切换源:Staticfile、jsDelivr、CDNJS 15 | * Gravatar头像支持切换源:官方源、国内源、七牛源等。 16 | * 支持主题静态文件、文章附件自定义链接,实现镜像加速 17 | * 全站Pjax、Ajax评论、Ajax翻页、HTML压缩、CSS与JS文件压缩 18 | * 支持自定义Favicon图标,自定义头部跟随或固定,自定义标题或LOGO,自定义导航栏显示等 19 | * 支持自定义文章缩略图或者获取文章内任意图片作为缩略图 20 | * 支持面包屑导航、文章目录、文章二维码打赏、代码高亮 21 | * 支持“轻语”功能(类似说说) 22 | * 内置链接功能,可在首页(侧栏或页底)和链接模板内显示,可自定义要显示的链接分类 23 | * 添加侧边栏轻语、热门文章、标签云 24 | * 添加三套极简模板:轻语模板、归档模板和链接模板 25 | * 支持自定义备案号、网站统计代码 26 | * 网页右下角小工具,包括返回顶部、背景音乐、文章目录 27 | * 说明一下:背景音乐默认不加载,也就是说,如果不点播放按钮,是不会消耗任何流量的 28 | * 更多细节,等你发现🤩 29 | 30 | ## 使用与更新 31 | 32 | ### 下载与使用 33 | 34 | 进入[下载页面](https://www.offodd.com/17.html),下载主题包并解压(若是从GitHub下载,建议把解压出来的文件夹改名为“initial”),将文件夹上传至网站文件主题目录下,网站后台启用主题即可。 35 | 36 | 主题设置方面的问题可以看[这里](https://www.offodd.com/58.html) 37 | 38 | ### 更新 39 | 40 | 更新版本时,下载新版主题包并解压,直接把解压后的文件覆盖上传即可(对主题有修改请自行备份),无需切换至其他主题(这样就不会丢失设置)。 41 | 42 | 如发现BUG等问题,也请随时[站内反馈](https://www.offodd.com/17.html#comments)😋 43 | 44 | ## 更新历史 45 | 46 | 2018/09/04:发布第一版 47 |
2018/09/08:更新1.1版本 48 |
2018/09/12:更新1.2版本 49 |
2018/09/17:更新1.2.1版本(增加返回顶部过渡动画,微调部分样式,添加标签云,修复小BUG) 50 |
2018/09/28:更新1.3版本 51 |
2018/10/12:更新2.0版本 52 |
2018/11/02:更新2.1版本 53 |
2018/11/23:更新2.2版本 54 |
2018/11/28:更新2.2.1版本 55 |
2018/12/14:更新2.3版本 56 |
2018/12/24:更新2.3.1版本 57 |
2018/12/25:更新2.3.2版本 58 |
2019/01/04:更新2.4版本 59 |
2019/01/09:更新2.4.1版本 60 |
2019/01/14:更新2.4.2版本 61 |
2019/02/20:更新2.4.3版本 62 |
2019/12/11:更新2.4.4版本 63 |
2020/09/04:更新2.4.5版本 64 |
2020/09/11:更新2.5版本 65 |
2020/09/16:更新2.5.1版本 66 |
2020/10/21:更新2.5.2版本 67 |
2022/03/09:更新2.5.3版本 68 |
2022/10/12:更新2.5.4版本 69 |
2023/02/20:更新2.5.5版本 70 | 71 | ### 2.5.5版更新内容 72 | 73 | > * 修复部分用户背景音乐播放音量无法设置的问题 74 | > * 适配返回顶部新算法,修复返回顶部后无法继续下拉的问题 75 | 76 | ### 2.5.4版更新内容 77 | 78 | > * 新增单栏模式(关闭侧边栏,简单优化了一下样式) 79 | > * 修复当文章被设置为隐藏或私密时,依旧能通过侧边栏小工具访问的问题 80 | > * 优化加密文章展示效果 81 | 82 | 之前一位网友提出的一个建议 “*可不可以考虑下取消所有侧边栏后,内容居中,太需要了。*” ,真是一个很不错的想法啊,这样Initial不就秒变成为一个简单的**单栏主题**了吗?😄 83 | 84 | ### 2.5.3版更新内容 85 | 86 | > * 修复Ajax翻页双击(多击)问题 87 | > * 修改过度样式,解决刷新页面后页面移动问题 88 | > * 更新几个Gravatar头像源 89 | 90 | ### 2.5.2版更新内容 91 | 92 | > * 后台新增“自定义样式”(优先级大于默认样式) 93 | > * 字体大小和行距稍微增大(阅读更轻松) 94 | > * “文章许可信息”可关闭显示 95 | > * 备案号链接跟随调整(这玩意为什么又变了?😟) 96 | > * 优化轻语评论逻辑 97 | > * 其他细节调整与优化 98 | 99 | 本次更新主要是调整了字体大小,希望能够使阅读更加轻松。 100 | 101 | **2.5.1版更新内容** 102 | 103 | > * 新增“代码高亮”(Highlight.js) 104 | > * 修复关闭Pjax时产生报错的问题 105 | > * 大量优化与调整 106 | > * 重写了“轻语”和“最近回复”的部分代码 107 | > * 优化部分页面结构,更有利于SEO 108 | > * 其他细节调整 109 | 110 | 本次更新新增了便于阅读的“代码高亮”功能(阻滞页面,影响加载速度,虽然很微弱,但是不爽😑)。 111 | 112 | js文件使用base62转码压缩,如果需要查看源码,可在浏览器控制台内点击`Initial By JIElive http://www.offodd.com `这个log右上角的链接,里面就是js源码,可以方便大家mod. 113 | 114 | 上个版本提取js后有可能会出现一些BUG,虽然我已经尽量把能想到的问题全部测试通过了,但不排除还有没发现的问题,如果发现问题欢迎[留言](https://www.offodd.com/17.html#comments)反馈。 115 | 116 | **2.5版更新内容** 117 | 118 | > * js写入独立文件 119 | > * 修复关闭Ajax翻页时,加密文章无法打开的问题 120 | > * 删除公共静态资源来源“BootCDN”(太不稳定) 121 | > * 其他微调优化 122 | 123 | 本次更新主要是把js语句全部写入独立的js文件,配合pjax和cdn,访问速度理论上应该有所提升,其余更新内容不多。 124 | 125 | **2.4.5版更新内容** 126 | 127 | > * 站点标题支持自定义显示方式(仅文字、仅LOGO、LOGO+文字) 128 | > * 文章目录添加全局开关 129 | > * 添加Staticfile静态资源CDN 130 | > * 其他微调 131 | 132 | 更新内容不多,不想覆盖升级的可以参照GitHub自行修改。 133 | 134 | **2.4.4版更新内容** 135 | 136 | > * 优化分类名过长时的显示问题 137 | > * 备案号链接地址更新 138 | > * archive页面添加文章阅读量显示 139 | > * 关闭偶尔可能会出现的无关紧要的php提示 140 | > * 其他优化与小调整 141 | 142 | 小小更新一下,以上问题基本不影响使用,想省事的可以自行修复一下即可。 143 | 144 | **2.4.3版更新内容** 145 | 146 | > * 删除外观设置内从2.4版本开始弃用的链接列表(已迁移至 管理-独立页面-链接模板页面-自定义字段-links 内) 147 | > * 新增“轻语”的评论回复功能,并优化评论样式 148 | > * 新增文章底部“文章许可信息”,可在后台自定义内容 149 | > * 修复“轻语”评论无法换行的问题 150 | > * 修复某些情况下“文章目录”按钮状态异常 151 | > * 修复“注脚”链接新窗口打开的问题 152 | > * 优化导航下拉列表,不再限制宽度 153 | > * 优化评论框架结构,回复评论目标更清晰 154 | > * 其他优化与小调整 155 | 156 | **注意**:从本版开始,后台-外观设置内的 链接列表 已彻底删除,新的链接列表已迁移至 管理-独立页面-链接模板页面-自定义字段-links 内,以后的链接操作都需要在这里进行。 157 | 158 | **2.4.2版更新内容** 159 | 160 | > * 新增背景音乐“随机播放”选项,请在 后台-控制台-外观-设置外观-背景音乐 处修改 161 | > * 将文章、页面、轻语的外链接、评论者的链接修改为使用使用新窗口打开(仅外链接使用新窗口,本站链接还在当前页打开) 162 | > * 调整“文章目录”按钮位置到右下角并美化界面,仅当文章有目录时,才会显示 163 | > * 后台设置选项判断优化(老用户请进入 后台-设置外观 将未选择的设置项重选一下即可,不影响使用,请正常升级) 164 | > * 其他优化与小调整 165 | 166 | 本次更新以查找问题为主,需要注意的就是主题设置项进行了优化,新用户忽略即可,老用户升级后,请到 后台-设置外观 ,可以看到有几个单选的设置项被清空了,只需要重新选择一下并保存就行,当然,如果你不重新选择,也不会影响使用🤨。 167 | 168 | **2.4.1版更新内容** 169 | 170 | > * 调整“文章目录”选项位置到 编辑文章 内,可单独设置每篇文章是否显示文章目录(默认关闭) 171 | > * 调整侧边栏“最近回复”超链接,点击自动跳转至评论位置 172 | > * 部分代码优化 173 | 174 | 本次更新依然是小更新,优化为主,主要是调整了“文章目录”的开启关闭方式,从之前的 主题设置 移动到 编辑文章 内,可单独设置每篇文章是否显示文章目录(默认关闭)。 175 | 176 | **2.4版更新内容** 177 | 178 | > * 新增文章阅读量统计与显示 179 | > * 新增文章目录(默认关闭) 180 | > * 新增“轻语”的评论功能 181 | > * 将“链接列表”迁移至“链接”页面内,防止丢失 182 | > * 稍微增加移动端字体大小 183 | > * 修复关闭Pjax时某些情况下无法评论 184 | > * 修复几处PHP Notice 185 | > * 优化Archive作者页标题 186 | > * 优化热门文章排序规则 187 | > * 代码优化和其他优化调整 188 | 189 | **注意:从2.4版开始,链接列表 已迁移至 管理-独立页面-链接模板页面-自定义字段-links 内,以后的链接操作都需要在这里进行,主题设置处的列表暂留备份,再更新几次后将会彻底删除。** 190 | 191 | 此次更新最需要注意的就是“链接列表”,从主题设置迁移到了“链接”模板页面的自定义字段内。 192 | 193 | 老用户更新2.4版主题后 194 | 195 | 若已创建 **链接模板页面**,前台刷新该页面,将会自动将之前的 **链接列表** 迁移至 **链接模板页面** 内。 196 | 197 | 若未创建 **链接模板页面**,请前往 **管理-独立页面-新增页面-自定义模板-选择“链接”** 创建“链接”模板页面,然后前台访问该页面,将会自动将之前的 **链接列表** 迁移至 **链接模板页面** 内。 198 | 199 | 新用户若需要使用“链接”功能,请前往 **管理-独立页面-新增页面-自定义模板-选择“链接”** 创建“链接”模板页面,然后新增“自定义字段”,字段名称设置为`links`,字段值按照之前的 **链接格式** 输入即可。具体使用方法可以[点击这里](https://www.offodd.com/58.html)查看。 200 | 201 | **2.3.2版更新内容** 202 | 203 | > * 优化子分类显示(同一父分类下的所有级别的子分类都将显示在该父分类下,级别太多也不好吧😥)。 204 | > * 其他小调整。 205 | 206 | 子分类这个东西之前从来没有使用过,所以也一直没有发现这个问题,谢谢网友**@luvnaxx**发现并提出。 207 | 208 | **2.3.1版更新内容** 209 | 210 | > * 新增切换Gravatar头像源,官方源、国内源、V2EX源 211 | > * 丰富Ajax翻页选项,自动、点击、关闭 212 | > * **删除DNS预获取、删除自定义Apple图标** 213 | > * 其他优化与小调整 214 | 215 | 最近年底了,事情很多,更新不会很大,以优化和修复为主。 216 | 217 | **2.3版更新内容** 218 | 219 | > * 新增Ajax翻页,支持自动翻页与点击翻页 220 | > * 新增“轻语”功能(类似说说),并新增一套极简“轻语”模板,支持在首页和侧边栏显示 221 | > * 文章缩略图支持调用文章内的任意图片(例如:输入数字“2”代表使用文章内第二张图片) 222 | > * 再次优化加密文章与Pjax冲突问题,已经趋近完美 223 | > * 解决进入“归档”页面时侧边栏的文章数量异常 224 | > * 其他功能优化与小调整(比较多,记不清了) 225 | 226 | 本版更新主要在“轻语”这个功能,折腾了很久,本以为挺简单,但实际操作才发现有很多小问题,还好都解决了,目前正常使用没问题,后续更新会丰富此功能。 227 | 其次就是添加了Ajax翻页,这个也是很多朋友期待的,欢迎更新品尝,若有问题随时站内反馈😋 228 | 229 | **2.2.1版更新内容** 230 | 231 | > * 链接功能添加链接图标参数 232 | > * 链接模板内的链接增加图标显示(默认关闭) 233 | > * 其他小调整 234 | 235 | 本版更新为小更新,主要由于在后台的“链接列表”增加了一个“链接图标”的参数,考虑到要尽量减少对使用者的影响,故提前更新。 236 | 237 | **2.2版更新内容** 238 | 239 | > * 添加侧边栏动态滚动(默认关闭) 240 | > * 调整右下角小工具位置,解决超宽屏尴尬 241 | > * 添加背景音乐播放进度条 242 | > * 修复关于链接的小问题 243 | > * 清除翻译语句 244 | > * 其他细节调整与小BUG修复 245 | 246 | **2.1版更新内容** 247 | 248 | > * 新增一套链接模板 249 | > * 新增链接功能,可在首页(侧栏或页底)和链接模板内显示,可自定义要显示的分类 250 | > * 新增自定义公共静态资源来源,支持BootCDN、CDNJS、jsDelivr 251 | > * 修复加密文章与Pjax有冲突的问题(感谢okgo发现并提出此BUG,估计带Pjax的TE主题都有此问题😖) 252 | > * 修复侧边栏热门文章显示数量使其与后台设置一致 253 | > * 移除Normalize,将其优化集成进主题css 254 | > * 背景音乐优化、界面微调优化 255 | > * 其他细节调整与小BUG修复(优化了很多细节,记不起来了🤣) 256 | 257 | **2.0版更新内容** 258 | 259 | > * 公共静态资源由BootCDN替换为CDNJS(BootCDN已暂停) 260 | > * 重新设计的网站头部样式 261 | > * 新增可将头部设置为固定显示 262 | > * 新增导航栏可自定义显示分类、页面、是否合并显示等(充足的自定义) 263 | > * 新增自定义副标题,取消自定义描述(因为头部重做后已不显示此项) 264 | > * 新的a标签颜色,整体样式微调 265 | > * 新增面包屑导航(可自定义) 266 | > * 新增侧边栏热门文章 267 | > * 其他细节调整与小BUG修复 268 | 269 | 本版更新主要在外观,变化较大,当然,细节和新增功能也是精益求精,望君喜。 270 | 271 | **1.3版更新内容** 272 | 273 | > * 使用excerpt摘要函数,可自动截取摘要 274 | > * ~~阅读量统计(这个目前还不确定是否要加上)~~*暂时不加* 275 | > * 自定义文章缩略图或者自动调用文章第一张图片作为缩略图 276 | > * URL替换(主要是方便于使用七牛等cdn的静态文件镜像加速) 277 | > * HTML代码压缩 278 | > * 背景音乐添加支持多首歌曲循环,添加错误歌曲检测,自动跳过 279 | > * 添加评论区文章作者小标签 280 | > * 其他细节调整与优化 281 | 282 | **1.2版更新内容** 283 | 284 | > * 优化部分细节 285 | > * 修复一处关于Ajax评论的逻辑性小错误 286 | > * 添加右下角小工具 287 | > * 返回顶部(1.2.1版添加过渡动画) 288 | > * 背景音乐 289 | > * 侧边栏添加标签云(1.2.1) 290 | 291 | 背景音乐这个真是折腾了好久,因为主要是想使用网易的音乐,再加上要尽量做到最轻量,看了几个API框架,直接就放弃了(虽然做完只有不到100KB,但还是觉得太大了),最后找到一个不错的开放API,可惜不支持https😖貌似没办法了。。。 292 |
晚上回家思考了一下,制作本主题的初衷就是简约而不简单,既然是要“简约”何不做到极致?好像找到了新的大门🤩 293 | 294 | 最后确定使用原生HTML5播放器(隐藏式),后台自定义**一首**你最最喜欢的音乐循环播放(后台可给音乐设置一个合适的音量),仅使用一个按钮来集成**播放状态提示**、**播放控制**、**播放进度**,*播放和暂停状态提示由纯CSS实现;播放和暂停控制由原生JS实现。*虽然没有使用框架那么强大的功能和兼容性,但觉得非常符合本主题初衷。 295 | 296 | **1.1版更新内容** 297 | 298 | > * 全站Pjax + ajax评论 299 | > * 二维码打赏 300 | -------------------------------------------------------------------------------- /archive.php: -------------------------------------------------------------------------------- 1 | need('header.php'); ?> 3 | 10 | have()): ?> 11 | next()): ?> 12 |
13 |

title() ?>

14 | 20 |
21 | options->PjaxOption && $this->hidden): ?> 22 |
options->AjaxLoad): ?>action="getTokenUrl($this->permalink); ?>" method="post"> 23 |

请输入密码访问

24 |

25 | 26 | 27 |

28 |
29 | 30 | 31 |

32 | 33 |

excerpt(200, ''); ?>

34 | options->OneCOL): ?> 35 |

- 阅读全文 -

36 | 37 |
38 |
39 | 40 | 41 |
42 |

没有找到内容

43 |
44 | 45 | pageNav('上一页', $this->options->AjaxLoad ? '查看更多' : '下一页', 0, '..', $this->options->AjaxLoad ? array('wrapClass' => 'page-navigator ajaxload') : ''); ?> 46 | 47 | options->OneCOL): $this->need('sidebar.php'); endif; ?> 48 | need('footer.php'); ?> -------------------------------------------------------------------------------- /comments.php: -------------------------------------------------------------------------------- 1 | authorId) { 5 | if ($comments->authorId == $comments->ownerId) { 6 | $commentClass .= ' comment-by-author'; 7 | } else { 8 | $commentClass .= ' comment-by-user'; 9 | } 10 | } 11 | ?> 12 |
  • 22 |
    23 |
    24 | gravatar('32'); ?> 25 | 26 | authorId == $comments->ownerId) { ?> 27 | Author 28 | 29 | status == 'waiting') { ?> 30 | 您的评论正等待审核! 31 | 32 |
    33 |
    34 | 35 |
    36 |
    37 | content(); ?> 38 |
    39 |
    40 | reply(); ?> 41 |
    42 |
    43 | children) { ?> 44 |
    45 | threadedComments($options); ?> 46 |
    47 | 48 |
  • 49 | 50 |
    51 | comments()->to($comments); ?> 52 | have()): ?> 53 |

    commentsNum(_t('暂无评论'), _t('已有 %d 条评论')); ?>

    54 | listComments(); ?> 55 | pageNav('上一页', '下一页', 0, '..'); ?> 56 | 57 | allow('comment')): ?> 58 |
    59 |
    60 | cancelReply(); ?> 61 |
    62 |

    添加新评论

    63 |
    user->hasLogin()): ?> class="comment-form clearfix"> 64 | user->hasLogin()): ?> 65 |

    登录身份: user->screenName(); ?>. options->PjaxOption): ?> no-pjax>退出 »

    66 | 67 |

    user->hasLogin()): ?>class="textarea"> 68 | 69 |

    70 |

    user->hasLogin()): ?>class="textbutton"> 71 | user->hasLogin()): ?> 72 | 73 | options->commentsRequireMail): ?> required /> 74 | options->commentsRequireURL): ?> required /> 75 | 76 | 77 |

    78 |
    79 |
    80 | options->commentsThreaded): ?> 81 | 82 | 83 | 84 |

    评论已关闭

    85 | 86 |
    87 | -------------------------------------------------------------------------------- /footer.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 22 | options->scrollTop || ($this->options->MusicSet && $this->options->MusicUrl)): ?> 23 |
    24 | 35 |
    36 | options->PjaxOption || $this->options->AjaxLoad): ?> 37 | 38 | options->PjaxOption): ?> 39 | 40 | options->Highlight):?> 41 | 42 | 43 | 44 | footer(); ?> 45 | options->CustomContent): $this->options->CustomContent(); ?> 46 | 47 | 48 | 49 | options->compressHtml): $html_source = ob_get_contents(); ob_clean(); print compressHtml($html_source); ob_end_flush(); endif; ?> -------------------------------------------------------------------------------- /functions.php: -------------------------------------------------------------------------------- 1 | GravatarUrl) define('__TYPECHO_GRAVATAR_PREFIX__', Helper::options()->GravatarUrl); 6 | 7 | function themeConfig($form) { 8 | $logoUrl = new Typecho_Widget_Helper_Form_Element_Text('logoUrl', NULL, NULL, _t('站点标题 LOGO 地址'), _t('在这里填入一个图片 URL 地址, 以显示网站标题 LOGO')); 9 | $form->addInput($logoUrl); 10 | 11 | $customTitle = new Typecho_Widget_Helper_Form_Element_Text('customTitle', NULL, NULL, _t('自定义站点标题'), _t('仅用于替换页面头部位置的“标题”显示,和Typecho后台设置的站点名称不冲突,留空则显示默认站点名称')); 12 | $form->addInput($customTitle); 13 | 14 | $titleForm = new Typecho_Widget_Helper_Form_Element_Radio('titleForm', 15 | array('title' => _t('仅文字'), 16 | 'logo' => _t('仅LOGO'), 17 | 'all' => _t('LOGO+文字')), 18 | 'title', _t('站点标题显示内容'), _t('默认仅显示文字标题,若要显示LOGO,请在上方添加 LOGO 地址')); 19 | $form->addInput($titleForm); 20 | 21 | $subTitle = new Typecho_Widget_Helper_Form_Element_Text('subTitle', NULL, NULL, _t('自定义站点副标题'), _t('浏览器副标题,仅在当前页面为首页时显示,显示格式为:标题 - 副标题,留空则不显示副标题')); 22 | $form->addInput($subTitle); 23 | 24 | $favicon = new Typecho_Widget_Helper_Form_Element_Text('favicon', NULL, NULL, _t('Favicon 地址'), _t('在这里填入一个图片 URL 地址, 以添加一个Favicon,留空则不单独设置Favicon')); 25 | $form->addInput($favicon); 26 | 27 | $CustomCSS = new Typecho_Widget_Helper_Form_Element_Textarea('CustomCSS', NULL, NULL, _t('自定义样式'), _t('在这里填入你的自定义样式(直接填入css,无需<style>标签)')); 28 | $form->addInput($CustomCSS); 29 | 30 | $cjcdnAddress = new Typecho_Widget_Helper_Form_Element_Text('cjcdnAddress', NULL, NULL, _t('主题静态文件(css和js)的链接地址替换'), _t('请输入你的CDN云存储地址,例如://cdn.jsdelivr.net/gh/jielive/initial/
    被替换的原地址为主题文件位置,即:http://www.example.com/usr/themes/initial/')); 31 | $form->addInput($cjcdnAddress); 32 | 33 | $AttUrlReplace = new Typecho_Widget_Helper_Form_Element_Textarea('AttUrlReplace', NULL, NULL, _t('文章内的链接地址替换(建议用在图片等静态资源的链接上)'), _t('按照格式输入你的CDN链接以替换原链接,格式:
    原地址=替换地址
    原地址与新地址之间用等号“=”分隔,例如:
    http://www.example.com/usr/uploads/=http://cdn.example.com/usr/uploads/
    可设置多个规则,换行即可,一行一个')); 34 | $form->addInput($AttUrlReplace); 35 | 36 | $Navset = new Typecho_Widget_Helper_Form_Element_Checkbox('Navset', 37 | array('ShowCategory' => _t('显示分类'), 38 | 'AggCategory' => _t('↪合并分类'), 39 | 'ShowPage' => _t('显示页面'), 40 | 'AggPage' => _t('↪合并页面')), 41 | array('ShowCategory', 'AggCategory', 'ShowPage'), _t('导航栏显示'), _t('默认显示合并的分类,显示页面')); 42 | $form->addInput($Navset->multiMode()); 43 | 44 | $CategoryText = new Typecho_Widget_Helper_Form_Element_Text('CategoryText', NULL, NULL, _t('导航栏-分类 下拉菜单显示名称(使用“导航栏显示-合并分类”时生效)'), _t('在这里输入导航栏分类下拉菜单的显示名称,留空则默认显示为“分类”')); 45 | $form->addInput($CategoryText); 46 | 47 | $PageText = new Typecho_Widget_Helper_Form_Element_Text('PageText', NULL, NULL, _t('导航栏-页面 下拉菜单显示名称(使用“导航栏显示-合并页面”时生效)'), _t('在这里输入导航栏页面下拉菜单的显示名称,留空则默认显示为“其他”')); 48 | $form->addInput($PageText); 49 | 50 | $Breadcrumbs = new Typecho_Widget_Helper_Form_Element_Checkbox('Breadcrumbs', 51 | array('Postshow' => _t('文章内显示'), 52 | 'Text' => _t('↪文章标题替换为“正文”'), 53 | 'Pageshow' => _t('页面内显示')), 54 | array('Postshow', 'Text', 'Pageshow'), _t('面包屑导航显示'), _t('默认在文章与页面内显示,并将文章标题替换为“正文”')); 55 | $form->addInput($Breadcrumbs->multiMode()); 56 | 57 | $WeChat = new Typecho_Widget_Helper_Form_Element_Text('WeChat', NULL, NULL, _t('微信打赏二维码(建议图片尺寸不低于240*240)'), _t('在这里填入一个图片 URL 地址, 以添加一个微信打赏二维码,留空则不设置微信打赏')); 58 | $form->addInput($WeChat); 59 | 60 | $Alipay = new Typecho_Widget_Helper_Form_Element_Text('Alipay', NULL, NULL, _t('支付宝打赏二维码(建议图片尺寸不低于240*240)'), _t('在这里填入一个图片 URL 地址, 以添加一个支付宝打赏二维码,留空则不设置支付宝打赏')); 61 | $form->addInput($Alipay); 62 | 63 | $LicenseInfo = new Typecho_Widget_Helper_Form_Element_Text('LicenseInfo', NULL, NULL, _t('文章许可信息'), _t('填入后将在文章底部显示你填入的许可信息(支持HTML标签,输入数字“0”可关闭显示),留空则默认使用 (CC BY-SA 4.0)国际许可协议。')); 64 | $form->addInput($LicenseInfo); 65 | 66 | $HeadFixed = new Typecho_Widget_Helper_Form_Element_Radio('HeadFixed', 67 | array(1 => _t('启用'), 68 | 0 => _t('关闭')), 69 | 0, _t('浮动显示头部'), _t('默认关闭')); 70 | $form->addInput($HeadFixed); 71 | 72 | $SidebarFixed = new Typecho_Widget_Helper_Form_Element_Radio('SidebarFixed', 73 | array(1 => _t('启用'), 74 | 0 => _t('关闭')), 75 | 0, _t('动态显示侧边栏'), _t('默认关闭')); 76 | $form->addInput($SidebarFixed); 77 | 78 | $cjCDN = new Typecho_Widget_Helper_Form_Element_Radio('cjCDN', 79 | array('jd' => _t('jsDelivr'), 80 | 'sc' => _t('Staticfile'), 81 | 'cf' => _t('CDNJS')), 82 | 'jd', _t('公共静态资源来源'), _t('默认jsDelivr,若JS文件异常,可尝试切换来源')); 83 | $form->addInput($cjCDN); 84 | 85 | $GravatarUrl = new Typecho_Widget_Helper_Form_Element_Radio('GravatarUrl', 86 | array(false => _t('官方源'), 87 | 'https://cn.gravatar.com/avatar/' => _t('国内源'), 88 | 'https://gravatar.loli.net/avatar/' => _t('loli源'), 89 | 'https://sdn.geekzu.org/avatar/' => _t('极客族源'), 90 | 'https://dn-qiniu-avatar.qbox.me/avatar/' => _t('七牛源')), 91 | false, _t('Gravatar头像源'), _t('默认官方源,若头像显示异常,可尝试切换来源')); 92 | $form->addInput($GravatarUrl); 93 | 94 | $compressHtml = new Typecho_Widget_Helper_Form_Element_Radio('compressHtml', 95 | array(1 => _t('启用'), 96 | 0 => _t('关闭')), 97 | 0, _t('HTML压缩'), _t('默认关闭,启用则会对HTML代码进行压缩,可能与部分插件存在兼容问题,请酌情选择开启或者关闭')); 98 | $form->addInput($compressHtml); 99 | 100 | $PjaxOption = new Typecho_Widget_Helper_Form_Element_Radio('PjaxOption', 101 | array(1 => _t('启用'), 102 | 0 => _t('关闭')), 103 | 0, _t('全站Pjax'), _t('默认关闭,启用则会强制关闭“反垃圾保护”,强制“将较新的的评论显示在前面”')); 104 | $form->addInput($PjaxOption); 105 | 106 | $AjaxLoad = new Typecho_Widget_Helper_Form_Element_Radio('AjaxLoad', 107 | array('auto' => _t('自动'), 108 | 'click' => _t('点击'), 109 | 0 => _t('关闭')), 110 | 0, _t('Ajax翻页'), _t('默认关闭,启用则会使用Ajax加载下一页的文章')); 111 | $form->addInput($AjaxLoad); 112 | 113 | $Highlight = new Typecho_Widget_Helper_Form_Element_Radio('Highlight', 114 | array(1 => _t('启用'), 115 | 0 => _t('关闭')), 116 | 0, _t('代码高亮'), _t('默认关闭,启用则会渲染页面内代码块”')); 117 | $form->addInput($Highlight); 118 | 119 | $catalog = new Typecho_Widget_Helper_Form_Element_Radio('catalog', 120 | array('post' => _t('使用文章内设定'), 121 | 'open' => _t('全部启用'), 122 | 0 => _t('全部关闭')), 123 | 'post', _t('文章目录'), _t('一键开关全部文章目录,默认使用文章内的设定,(若文章内无任何标题,则不显示目录)')); 124 | $form->addInput($catalog); 125 | 126 | $scrollTop = new Typecho_Widget_Helper_Form_Element_Radio('scrollTop', 127 | array(1 => _t('启用'), 128 | 0 => _t('关闭')), 129 | 0, _t('返回顶部'), _t('默认关闭,启用将在右下角显示“返回顶部”按钮')); 130 | $form->addInput($scrollTop); 131 | 132 | $MusicSet = new Typecho_Widget_Helper_Form_Element_Radio('MusicSet', 133 | array('order' => _t('顺序播放'), 134 | 'shuffle' => _t('随机播放'), 135 | 0 => _t('关闭')), 136 | 0, _t('背景音乐'), _t('默认关闭,启用后请填写音乐地址,否则开启无效')); 137 | $form->addInput($MusicSet); 138 | 139 | $MusicUrl = new Typecho_Widget_Helper_Form_Element_Textarea('MusicUrl', NULL, NULL, _t('背景音乐地址(建议使用mp3格式)'), _t('请输入完整的音频文件路径,例如:
    https://music.163.com/song/media/outer/url?id={MusicID}.mp3
    可设置多个音频,换行即可,一行一个,留空则关闭背景音乐')); 140 | $form->addInput($MusicUrl); 141 | 142 | $MusicVol = new Typecho_Widget_Helper_Form_Element_Text('MusicVol', NULL, NULL, _t('背景音乐播放音量(输入范围:0~1)'), _t('请输入一个0到1之间的小数(0为静音 0.5为50%音量 1为100%最大音量)输入错误内容或留空则使用默认音量100%')); 143 | $form->addInput($MusicVol); 144 | 145 | $InsideLinksIcon = new Typecho_Widget_Helper_Form_Element_Radio('InsideLinksIcon', 146 | array(1 => _t('启用'), 147 | 0 => _t('关闭')), 148 | 0, _t('显示链接图标(内页)'), _t('默认关闭,启用后内页(链接模板)链接将显示链接图标')); 149 | $form->addInput($InsideLinksIcon); 150 | 151 | $IndexLinksSort = new Typecho_Widget_Helper_Form_Element_Text('IndexLinksSort', NULL, NULL, _t('首页显示的链接分类(支持多分类,请用英文逗号“,”分隔)'), _t('若只需显示某分类下的链接,请输入链接分类名(建议使用字母形式的分类名),留空则默认显示全部链接')); 152 | $form->addInput($IndexLinksSort); 153 | 154 | $InsideLinksSort = new Typecho_Widget_Helper_Form_Element_Text('InsideLinksSort', NULL, NULL, _t('内页(链接模板)显示的链接分类(支持多分类,请用英文逗号“,”分隔)'), _t('若只需显示某分类下的链接,请输入链接分类名(建议使用字母形式的分类名),留空则默认显示全部链接')); 155 | $form->addInput($InsideLinksSort); 156 | 157 | $ShowLinks = new Typecho_Widget_Helper_Form_Element_Checkbox('ShowLinks', array('footer' => _t('页脚'), 'sidebar' => _t('侧边栏')), NULL, _t('首页显示链接')); 158 | $form->addInput($ShowLinks->multiMode()); 159 | 160 | $ShowWhisper = new Typecho_Widget_Helper_Form_Element_Checkbox('ShowWhisper', array('index' => _t('首页'), 'sidebar' => _t('侧边栏')), NULL, _t('显示最新的“轻语”')); 161 | $form->addInput($ShowWhisper->multiMode()); 162 | 163 | $sidebarBlock = new Typecho_Widget_Helper_Form_Element_Checkbox('sidebarBlock', 164 | array('ShowHotPosts' => _t('显示热门文章(根据评论数量排序)'), 165 | 'ShowRecentPosts' => _t('显示最新文章'), 166 | 'ShowRecentComments' => _t('显示最近回复'), 167 | 'IgnoreAuthor' => _t('↪不显示作者回复'), 168 | 'ShowCategory' => _t('显示分类'), 169 | 'ShowTag' => _t('显示标签'), 170 | 'ShowArchive' => _t('显示归档'), 171 | 'ShowOther' => _t('显示其它杂项')), 172 | array('ShowRecentPosts', 'ShowRecentComments', 'ShowCategory', 'ShowTag', 'ShowArchive', 'ShowOther'), _t('侧边栏显示')); 173 | $form->addInput($sidebarBlock->multiMode()); 174 | 175 | $OneCOL = new Typecho_Widget_Helper_Form_Element_Radio('OneCOL', 176 | array(1 => _t('启用'), 177 | 0 => _t('关闭')), 178 | 0, _t('单栏模式'), _t('关闭侧边栏,仅显示主栏内容。')); 179 | $form->addInput($OneCOL); 180 | 181 | $ICPbeian = new Typecho_Widget_Helper_Form_Element_Text('ICPbeian', NULL, NULL, _t('ICP备案号'), _t('在这里输入ICP备案号,留空则不显示')); 182 | $form->addInput($ICPbeian); 183 | 184 | $CustomContent = new Typecho_Widget_Helper_Form_Element_Textarea('CustomContent', NULL, NULL, _t('底部自定义内容'), _t('位于底部,footer之后body之前,适合放置一些JS内容,如网站统计代码等(若开启全站Pjax,目前支持Google和百度统计的回调,其余统计代码可能会不准确)')); 185 | $form->addInput($CustomContent); 186 | } 187 | 188 | function themeInit($archive) { 189 | $options = Helper::options(); 190 | $options->commentsAntiSpam = false; 191 | if ($options->PjaxOption || FindContents('page-whisper.php', 'commentsNum', 'd')) { 192 | $options->commentsOrder = 'DESC'; 193 | $options->commentsPageDisplay = 'first'; 194 | } 195 | if ($archive->is('single')) { 196 | $archive->content = hrefOpen($archive->content); 197 | if ($options->AttUrlReplace) { 198 | $archive->content = UrlReplace($archive->content); 199 | } 200 | if ($archive->is('post') && (($options->catalog == 'post' && $archive->fields->catalog) || $options->catalog == 'open')) { 201 | $archive->content = createCatalog($archive->content); 202 | } 203 | } 204 | } 205 | 206 | function cjUrl($path) { 207 | $options = Helper::options(); 208 | $ver = '?ver='.constant("INITIAL_VERSION_NUMBER"); 209 | if ($options->cjcdnAddress) { 210 | echo rtrim($options->cjcdnAddress, '/').'/'.$path.$ver; 211 | } else { 212 | $options->themeUrl($path.$ver); 213 | } 214 | } 215 | 216 | function hrefOpen($obj) { 217 | return preg_replace('/]+?)\bhref="((?!'.addcslashes(Helper::options()->index, '/._-+=#?&').'|\#).*?)"([^>]*?)>/i', '', $obj); 218 | } 219 | 220 | function UrlReplace($obj) { 221 | $list = explode(PHP_EOL, Helper::options()->AttUrlReplace); 222 | foreach ($list as $tmp) { 223 | list($old, $new) = explode('=', $tmp); 224 | $obj = str_replace($old, $new, $obj); 225 | } 226 | return $obj; 227 | } 228 | 229 | function postThumb($obj) { 230 | $thumb = $obj->fields->thumb; 231 | if (!$thumb) { 232 | return false; 233 | } 234 | if (is_numeric($thumb)) { 235 | preg_match_all('//i', $obj->content, $matches); 236 | if (isset($matches[1][$thumb-1])) { 237 | $thumb = $matches[1][$thumb-1]; 238 | } else { 239 | return false; 240 | } 241 | } 242 | if (Helper::options()->AttUrlReplace) { 243 | $thumb = UrlReplace($thumb); 244 | } 245 | return ''; 246 | } 247 | 248 | function Postviews($archive) { 249 | $db = Typecho_Db::get(); 250 | $cid = $archive->cid; 251 | if (!array_key_exists('views', $db->fetchRow($db->select()->from('table.contents')))) { 252 | $db->query('ALTER TABLE `'.$db->getPrefix().'contents` ADD `views` INT(10) DEFAULT 0;'); 253 | } 254 | $exist = $db->fetchRow($db->select('views')->from('table.contents')->where('cid = ?', $cid))['views']; 255 | if ($archive->is('single')) { 256 | $cookie = Typecho_Cookie::get('contents_views'); 257 | $cookie = $cookie ? explode(',', $cookie) : array(); 258 | if (!in_array($cid, $cookie)) { 259 | $db->query($db->update('table.contents') 260 | ->rows(array('views' => (int)$exist+1)) 261 | ->where('cid = ?', $cid)); 262 | $exist = (int)$exist+1; 263 | array_push($cookie, $cid); 264 | $cookie = implode(',', $cookie); 265 | Typecho_Cookie::set('contents_views', $cookie); 266 | } 267 | } 268 | echo $exist == 0 ? '暂无阅读' : $exist.' 次阅读'; 269 | } 270 | 271 | function Breadcrumbs($archive) { 272 | $options = Helper::options(); 273 | if (!empty($options->Breadcrumbs) && in_array('Pageshow', $options->Breadcrumbs)) { 274 | echo ''.PHP_EOL; 275 | } 276 | } 277 | 278 | function createCatalog($obj) { 279 | global $catalog; 280 | global $catalog_count; 281 | $catalog = array(); 282 | $catalog_count = 0; 283 | $obj = preg_replace_callback('/(.*?)<\/h\1>/i', function($obj) { 284 | global $catalog; 285 | global $catalog_count; 286 | $catalog_count ++; 287 | $catalog[] = array('text' => trim(strip_tags($obj[3])), 'depth' => $obj[1], 'count' => $catalog_count); 288 | return ''.$obj[3].''; 289 | }, $obj); 290 | return $obj.PHP_EOL .getCatalog(); 291 | } 292 | 293 | function getCatalog() { 294 | global $catalog; 295 | $index = ''; 296 | if ($catalog) { 297 | $index = '
      '.PHP_EOL; 298 | $prev_depth = ''; 299 | $to_depth = 0; 300 | foreach($catalog as $catalog_item) { 301 | $catalog_depth = $catalog_item['depth']; 302 | if ($prev_depth) { 303 | if ($catalog_depth == $prev_depth) { 304 | $index .= ''.PHP_EOL; 305 | } elseif ($catalog_depth > $prev_depth) { 306 | $to_depth++; 307 | $index .= PHP_EOL .'
        '.PHP_EOL; 308 | } else { 309 | $to_depth2 = ($to_depth > ($prev_depth - $catalog_depth)) ? ($prev_depth - $catalog_depth) : $to_depth; 310 | if ($to_depth2) { 311 | for ($i=0; $i<$to_depth2; $i++) { 312 | $index .= ''.PHP_EOL .'
      '.PHP_EOL; 313 | $to_depth--; 314 | } 315 | } 316 | $index .= ''.PHP_EOL; 317 | } 318 | } 319 | $index .= '
    • '.$catalog_item['text'].''; 320 | $prev_depth = $catalog_item['depth']; 321 | } 322 | for ($i=0; $i<=$to_depth; $i++) { 323 | $index .= '
    • '.PHP_EOL .'
    '.PHP_EOL; 324 | } 325 | $index = '
    '.PHP_EOL .'文章目录'.PHP_EOL .$index.''.PHP_EOL .'
    '.PHP_EOL; 326 | } 327 | return $index; 328 | } 329 | 330 | function CommentAuthor($obj, $autoLink = NULL, $noFollow = NULL) { 331 | $options = Helper::options(); 332 | $autoLink = $autoLink ? $autoLink : $options->commentsShowUrl; 333 | $noFollow = $noFollow ? $noFollow : $options->commentsUrlNofollow; 334 | if ($obj->url && $autoLink) { 335 | echo 'url, $options->index) == $obj->url ? NULL : ' target="_blank"').'>'.$obj->author.''; 336 | } else { 337 | echo $obj->author; 338 | } 339 | } 340 | 341 | function CommentAt($coid){ 342 | $db = Typecho_Db::get(); 343 | $prow = $db->fetchRow($db->select('parent')->from('table.comments') 344 | ->where('coid = ? AND status = ?', $coid, 'approved')); 345 | $parent = $prow['parent']; 346 | if ($prow && $parent != '0') { 347 | $arow = $db->fetchRow($db->select('author')->from('table.comments') 348 | ->where('coid = ? AND status = ?', $parent, 'approved')); 349 | echo '@'.$arow['author'].''; 350 | } 351 | } 352 | 353 | function Contents_Post_Initial($limit = 10, $order = 'created') { 354 | $db = Typecho_Db::get(); 355 | $options = Helper::options(); 356 | $posts = $db->fetchAll($db->select()->from('table.contents') 357 | ->where('type = ? AND status = ? AND created < ?', 'post', 'publish', $options->time) 358 | ->order($order, Typecho_Db::SORT_DESC) 359 | ->limit($limit), array(Typecho_Widget::widget('Widget_Abstract_Contents'), 'filter')); 360 | if ($posts) { 361 | foreach($posts as $post) { 362 | echo '
  • PjaxOption ? '' : ' href="'.$post['permalink'].'"').'>'.htmlspecialchars($post['title']).'
  • '.PHP_EOL; 363 | } 364 | } else { 365 | echo '
  • 暂无文章
  • '.PHP_EOL; 366 | } 367 | } 368 | 369 | class Initial_Widget_Comments_Recent extends Widget_Abstract_Comments 370 | { 371 | public function __construct($request, $response, $params = NULL) { 372 | parent::__construct($request, $response, $params); 373 | $this->parameter->setDefault(array('pageSize' => $this->options->commentsListSize, 'parentId' => 0, 'ignoreAuthor' => false)); 374 | } 375 | public function execute() { 376 | $select = $this->select()->limit($this->parameter->pageSize) 377 | ->where('table.comments.status = ?', 'approved') 378 | ->order('table.comments.coid', Typecho_Db::SORT_DESC); 379 | if ($this->parameter->parentId) { 380 | $select->where('cid = ?', $this->parameter->parentId); 381 | } 382 | if ($this->options->commentsShowCommentOnly) { 383 | $select->where('type = ?', 'comment'); 384 | } 385 | if ($this->parameter->ignoreAuthor) { 386 | $select->where('ownerId <> authorId'); 387 | } 388 | $page_whisper = FindContents('page-whisper.php', 'commentsNum', 'd'); 389 | if ($page_whisper) { 390 | $select->where('cid <> ? OR (cid = ? AND parent <> ?)', $page_whisper[0]['cid'], $page_whisper[0]['cid'], '0'); 391 | } 392 | $this->db->fetchAll($select, array($this, 'push')); 393 | } 394 | } 395 | 396 | function FindContent($cid) { 397 | $db = Typecho_Db::get(); 398 | return $db->fetchRow($db->select()->from('table.contents') 399 | ->where('cid = ?', $cid) 400 | ->limit(1), array(Typecho_Widget::widget('Widget_Abstract_Contents'), 'filter')); 401 | } 402 | 403 | function FindContents($val = NULL, $order = 'order', $sort = 'a', $publish = NULL) { 404 | $db = Typecho_Db::get(); 405 | $sort = ($sort == 'a') ? Typecho_Db::SORT_ASC : Typecho_Db::SORT_DESC; 406 | $select = $db->select()->from('table.contents') 407 | ->where('created < ?', Helper::options()->time) 408 | ->order($order, $sort); 409 | if ($val) { 410 | $select->where('template = ?', $val); 411 | } 412 | if ($publish) { 413 | $select->where('status = ?','publish'); 414 | } 415 | $content = $db->fetchAll($select, array(Typecho_Widget::widget('Widget_Abstract_Contents'), 'filter')); 416 | return empty($content) ? NULL : $content; 417 | } 418 | 419 | function Whisper($sidebar = NULL) { 420 | $db = Typecho_Db::get(); 421 | $options = Helper::options(); 422 | $page = FindContents('page-whisper.php', 'commentsNum', 'd'); 423 | $p = $sidebar ? 'li' : 'p'; 424 | $remind = ''; 425 | if (Typecho_Widget::widget('Widget_User')->pass('editor', true) && (!$page || isset($page[1]))) { 426 | $remind = '<'.$p.' class="notice">仅管理员可见: '.($page ? '发现多个"轻语"模板页面,已自动选取内容较多的页面来展示,请删除多余模板页面。' : '未找到"轻语"模板页面,请创建"轻语"模板页面。').''.PHP_EOL; 427 | } 428 | if ($page) { 429 | $page = $page[0]; 430 | $title = $sidebar ? '

    '.$page['title'].'

    ' : '

    '.$page['title'].'···

    '; 431 | $comment = $db->fetchAll($db->select()->from('table.comments') 432 | ->where('cid = ? AND status = ? AND parent = ?', $page['cid'], 'approved', '0') 433 | ->order('coid', Typecho_Db::SORT_DESC) 434 | ->limit(1)); 435 | if ($comment) { 436 | $content = hrefOpen(Markdown::convert($comment[0]['text'])); 437 | if ($options->AttUrlReplace) { 438 | $content = UrlReplace($content); 439 | } 440 | $content = strip_tags($content, '


    '.$options->commentsHTMLTagAllowed).($sidebar ? PHP_EOL .'
  • 查看更多...
  • ' : ''); 441 | } else { 442 | $content = '<'.$p.'>暂无内容'; 443 | } 444 | } else { 445 | $title = $sidebar ? '

    轻语

    ' : '

    轻语

    '; 446 | $content = '<'.$p.'>暂无内容'; 447 | } 448 | echo $title.PHP_EOL .($sidebar ? '
      ' : '
      ').PHP_EOL .$content.PHP_EOL .$remind.($sidebar ? '
    ' : '').PHP_EOL; 449 | } 450 | 451 | function Links($sorts = NULL, $icon = 0) { 452 | $db = Typecho_Db::get(); 453 | $link = NULL; 454 | $list = NULL; 455 | $page_links = FindContents('page-links.php', 'order', 'a'); 456 | if ($page_links) { 457 | $exist = $db->fetchRow($db->select()->from('table.fields') 458 | ->where('cid = ? AND name = ?', $page_links[0]['cid'], 'links')); 459 | if (empty($exist)) { 460 | $db->query($db->insert('table.fields') 461 | ->rows(array( 462 | 'cid' => $page_links[0]['cid'], 463 | 'name' => 'links', 464 | 'type' => 'str', 465 | 'str_value' => NULL, 466 | 'int_value' => 0, 467 | 'float_value' => 0 468 | ))); 469 | return NULL; 470 | } 471 | $list = $exist['str_value']; 472 | } 473 | if ($list) { 474 | $list = explode(PHP_EOL, $list); 475 | foreach ($list as $val) { 476 | list($name, $url, $description, $logo, $sort) = explode(',', $val); 477 | if ($sorts) { 478 | $arr = explode(',', $sorts); 479 | if ($sort && in_array($sort, $arr)) { 480 | $link .= '
  • '.PHP_EOL; 481 | } 482 | } else { 483 | $link .= '
  • '.PHP_EOL; 484 | } 485 | } 486 | } 487 | echo $link ? $link : '
  • 暂无链接
  • '.PHP_EOL; 488 | } 489 | 490 | function Playlist() { 491 | $options = Helper::options(); 492 | $arr = explode(PHP_EOL, $options->MusicUrl); 493 | if ($options->MusicSet == 'shuffle') { 494 | shuffle($arr); 495 | } 496 | echo implode(',', $arr); 497 | } 498 | 499 | function compressHtml($html_source) { 500 | $chunks = preg_split('/(.*?|.*?<\/nocompress>|||)/msi', $html_source, -1, PREG_SPLIT_DELIM_CAPTURE); 501 | $compress = ''; 502 | foreach ($chunks as $c) { 503 | if (strtolower(substr($c, 0, 19)) == '') { 504 | $c = substr($c, 19, strlen($c) - 19 - 20); 505 | $compress .= $c; 506 | continue; 507 | } else if (strtolower(substr($c, 0, 12)) == '') { 508 | $c = substr($c, 12, strlen($c) - 12 - 13); 509 | $compress .= $c; 510 | continue; 511 | } else if (strtolower(substr($c, 0, 4)) == ' $char) { 525 | if ($char == '"' && $chars[$key - 1] != '\\' && !$is_apos) { 526 | $is_quot = !$is_quot; 527 | } else if ($char == '\'' && $chars[$key - 1] != '\\' && !$is_quot) { 528 | $is_apos = !$is_apos; 529 | } else if ($char == '/' && $chars[$key + 1] == '/' && !$is_quot && !$is_apos) { 530 | $tmp = substr($tmp, 0, $key); 531 | break; 532 | } 533 | } 534 | } 535 | $c .= $tmp; 536 | } 537 | } 538 | $c = preg_replace('/[\\n\\r\\t]+/', ' ', $c); 539 | $c = preg_replace('/\\s{2,}/', ' ', $c); 540 | $c = preg_replace('/>\\s <', $c); 541 | $c = preg_replace('/\\/\\*.*?\\*\\//i', '', $c); 542 | $c = preg_replace('//', '', $c); 543 | $compress .= $c; 544 | } 545 | return $compress; 546 | } 547 | 548 | function themeFields($layout) { 549 | $thumb = new Typecho_Widget_Helper_Form_Element_Text('thumb', NULL, NULL, _t('自定义缩略图'), _t('在这里填入一个图片 URL 地址, 以添加本文的缩略图,若填入纯数字,例如 3 ,则使用文章第三张图片作为缩略图(对应位置无图则不显示缩略图),留空则默认不显示缩略图')); 550 | $thumb->input->setAttribute('class', 'w-100'); 551 | $layout->addItem($thumb); 552 | 553 | $catalog = new Typecho_Widget_Helper_Form_Element_Radio('catalog', 554 | array(1 => _t('启用'), 555 | 0 => _t('关闭')), 556 | 0, _t('文章目录'), _t('默认关闭,启用则会在文章内显示“文章目录”(若文章内无任何标题,则不显示目录),需要在“控制台-设置外观-文章目录”启用“使用文章内设定”后,方可生效')); 557 | $layout->addItem($catalog); 558 | } 559 | -------------------------------------------------------------------------------- /header.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | options->favicon): ?> 9 | 10 | 11 | <?php $this->archiveTitle(array( 12 | 'category' => _t('分类 %s 下的文章'), 13 | 'search' => _t('包含关键字 %s 的文章'), 14 | 'tag' => _t('标签 %s 下的文章'), 15 | 'date' => _t('在 %s 发布的文章'), 16 | 'author' => _t('作者 %s 发布的文章') 17 | ), '', ' - '); ?><?php $this->options->title(); if ($this->is('index') && $this->options->subTitle): ?> - <?php $this->options->subTitle(); endif; ?> 18 | header('generator=&template=&pingback=&xmlrpc=&wlw=&commentReply=&rss1=&rss2=&antiSpam=&atom='); ?> 19 | 20 | options->CustomCSS): ?> 21 | 22 | 23 | 24 | 25 | 28 | 101 |
    options->PjaxOption): ?> in-pjax> 102 |
    103 |
    104 | -------------------------------------------------------------------------------- /index.php: -------------------------------------------------------------------------------- 1 | need('header.php'); 13 | if ($this->_currentPage == 1 && !empty($this->options->ShowWhisper) && in_array('index', $this->options->ShowWhisper)): ?> 14 |
    15 | 16 |
    17 | 18 | next()): ?> 19 |
    20 |

    title() ?>

    21 | 27 |
    28 | options->PjaxOption && $this->hidden): ?> 29 |
    options->AjaxLoad): ?>action="getTokenUrl($this->permalink); ?>" method="post"> 30 |

    请输入密码访问

    31 |

    32 | 33 | 34 |

    35 |
    36 | 37 | 38 |

    39 | 40 |

    excerpt(200, ''); ?>

    41 | options->OneCOL): ?> 42 |

    - 阅读全文 -

    43 | 44 |
    45 |
    46 | 47 | pageNav('上一页', $this->options->AjaxLoad ? '查看更多' : '下一页', 0, '..', $this->options->AjaxLoad ? array('wrapClass' => $this->options->AjaxLoad == 'auto' ? 'page-navigator ajaxload auto' : 'page-navigator ajaxload') : ''); ?> 48 |
    49 | options->OneCOL): $this->need('sidebar.php'); endif; ?> 50 | need('footer.php'); ?> -------------------------------------------------------------------------------- /main.min.js: -------------------------------------------------------------------------------- 1 | eval(function(p,a,c,k,e,r){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('3(6.m("v").2b("2Q-D")){2R.2S.1e=4(n,d){E.2T(4(){7 a=$(E);a.V({2U:\'2V\'});2W(7 x=1;x<=n;x++){a.W({1O:(-d)},X).W({1O:d},X).W({1O:0},X)}});r E};$(6).D(\'a:2X(a[2Y="2Z"], a[31-D])\',{1f:\'#w\',1g:\'#w\',1h:1i}).Y(\'1j\',\'J[G=1P], J[G=8-J]\',4(a){$.D.1j(a,{1f:\'#w\',1g:\'#w\',1h:1i})}).Y(\'D:2c\',4(){$("#1Q").1k("")}).Y(\'D:32\',4(){33(4(){$("#2d").1R()},1S);$(\'#1Q\').2e("Y");$(\'#s\').1T("");$("#2f").1l("t");3(1m 1n!==\'1o\'){6.34(\'35 36\').37((2g)=>{1n.38(2g)})}}).Y(\'D:39\',4(){3($(\'.A\').o){1U()}1V();1W();1p();3(1m 2h!==\'1o\'){2h.2i([\'3a\',11.2j+11.1P])}3(1m 2k!==\'1o\'){2k(\'2c\',\'3b\',11.2j+11.1P)}});4 1W(){$v=$(\'1q,v\');7 g=\'.8-1r\',h=\'.8-2l\',i=\'.8-1s a\',1X=\'.3c-1s\',j=\'#3d\',k=\'\',l=\'\';c();$(\'#8-J\').1j(4(){$.1t({12:$(E).B(\'1u\'),2m:\'F\',1v:$(E).2n(),P:4(){13("提交失败,请检查网络并重试或者联系管理员。");r p},1w:4(d){3(!$(g,d).o){13("您输入的内容不符合规则或者回复太频繁,请修改内容或者稍等片刻。");r p}9{k=$(g,d).1q().1Y(/G=\\"?8-\\d+/g).3e().1Y(/\\d+/g).3f(4(a,b){r a-b}).3g();3($(\'.3h-3i .3j\').o&&l==""){k=\'\'}3(l){d=$(\'#H-8-\'+k,d).2o();3($(\'#\'+l).K(".8-1Z").o<=0){$(\'#\'+l).3k("<1x u=\'8-1r\'><\\/1x><\\/Z>")}3(k)$(\'#\'+l+" .8-1Z .8-1r").1k(d);l=\'\'}9{d=$(\'#H-8-\'+k,d).2o();3(!$(g).o)$(\'#2p\').1k("<2q>已有 <14 u=\'8-2l\'>0<\\/14> 条评论<\\/2q><1x u=\'8-1r\'><\\/1x>");$(g).1k(d)}$(\'#H-8-\'+k).3l();7 f;$(h).o?(f=3m($(h).C().1Y(/\\d+/)),$(h).1q($(h).1q().1y(f,f+1))):0;3n.3o();$(j).1T(\'\');$(i+\',\'+1X+\', #2r-8-1s-2s\').2t(\'16\');c();3(k){$v.W({L:$(\'#H-8-\'+k).2u().1z-X},1S)}9{$v.W({L:$(\'#2p\').2u().1z-X},1S)}}}});r p});4 c(){$(i+\',\'+1X).16(4(){l=$(E).M().M().M().B("G")});$(\'#2r-8-1s-2s\').16(4(){l=\'\'})}}1W();3(6.m("2v")){7 1A=6.m("2v").3p.1y(\'3q\',"")}4 1p(){$(\'.I .F-Q a, .I .3r a\').16(4(){7 a=$(E).M().M();a.K(\'.2w\').C("请输入密码访问").V(\'R\',\'20\').1e(2,10);a.K(\':2x\').3s();r p});$(\'.I J\').1j(4(){1B=$(E);S=1B.K(\'.2w\');$(S).1l("t").2y(\'21\').C("请稍等");$(\'.A\').o?1C():2z();r p})}1p();4 2z(){7 b=$(\'.I .F-Q a\').B("N");3($(\'22.F-Q\').o){1A=$(\'.I J\').B("1u").1y(b,"");1C()}9{$.1t({12:1D.11.N,1w:4(d){1A=$(\'.I J[1u^="\'+b+\'"]\',d).B("1u").1y(b,"");1C()}})}}4 1C(){7 c=1B.M().M().K(\'.F-Q a\').B("N");$.1t({12:c+1A,2m:\'F\',1v:1B.2n(),P:4(){1E();S.C("提交失败,请检查网络并重试或者联系管理员。").V(\'R\',\'20\').1e(2,10);r p},1w:4(d){3(!$(\'22.F-Q\',d).o){1E();S.C("对不起,您输入的密码错误。").V(\'R\',\'20\').1e(2,10);$(":2x").1T("");r p}9{1E();S.C("密码正确,如果没有跳转新页面,请手动刷新本页。").V(\'R\',\'3t\');$(\'22.F-Q\').o?$.D.3u({1f:\'#w\',1g:\'#w\',1h:1i}):$.D({12:c,1f:\'#w\',1g:\'#w\',1h:1i})}}});4 1E(){$(S).2e("21")}}}7 O=1F;4 1U(){$(\'.A H[u!="17"]\').1R();$(\'.A .17 a\').16(4(){3(O){O=p;23()}r p})}4 23(){7 a=\'.A .17 a\',b=$(a).B("N");$(a).2y(\'21\').C("正在加载");3(b){$.1t({12:b,P:4(){13(\'请求失败,请检查网络并重试或者联系管理员\');$(a).1l("u").C("查看更多");O=1F;r p},1w:4(d){7 c=$(d).K("#w .F"),e=$(d).K(a).B("N");3(c){$(\'.A\').3v(c)}$(a).1l("u");3(e){$(a).C("查看更多").B("N",e)}9{$(a).1R();$(\'.A .17\').C(\'没有更多文章了\')}3($(\'.I\',d).o){$(\'.I *\').2t();1p()}O=1F;r p}})}}3(6.3w("A").o){1U();3($(\'.A.3x\').o){$(1D).3y(4(){3(O&&$(\'.A .17 a\').B("N")&&($(E).L()+$(1D).2A()+5)>=$(6).2A()){O=p;23()}})}}1D.3z=4(){7 a=6.v.L||6.24.L;7 x=6.m("1z");7 y=6.m("2f");7 z=6.1G(\'v\')[0].3A.3B(\'3C-2B\');3(x){7 b=6.m("1z");3(a>=3D){b.18("u")}9{b.19("u","3E")}b.1H=4 25(){7 a=6.v.L||6.24.L;3(a>1){3F(25);2C(0,a-(a/5))}9{3G(25);2C(0,0)}}}3(z){7 c=6.m("1Q");3(a>0&&a<30){c.t.1I=(15-a/2)+"1a 0"}9 3(a>=30){c.t.1I=0}9{c.18("t")}}3(y&&y.2b("3H-2B")){7 d=6.m("w");7 e=6.24.3I;7 f=z?0:41;3(d.q>y.q){3(y.q>e-2D&&a>y.q+26-e){3(a30+f){3(a=0&&d<=1){a.3L=d}a.1L=c.2G();a.T(\'1b\',g);a.T(\'27\',h);a.T(\'2H\',f);a.T(\'P\',f);a.T(\'2I\',j);4 f(){3(!c.o){a.U(\'1b\',g);a.U(\'27\',h);a.U(\'2H\',f);a.U(\'P\',f);a.U(\'2I\',j);b.t.3M="3N";13("本站的背景音乐好像有问题了,希望您可以通过留言等方式通知管理员,谢谢您的帮助。")}9{a.1L=c.2G();a.1b()}}4 g(){b.19("u","1b");a.T(\'2J\',k)}4 h(){b.18("u");a.U(\'2J\',k)}4 j(){c.2i(a.1L)}4 k(){b.1G("i")[0].t.3O=(a.3P/a.3Q*3R).3S(1)+"%"}b.1H=4(){3(a.28(\'1K/3T\')!=""||a.28(\'1K/3U;2K="3V"\')!=""||a.28(\'1K/3W;2K="3X.40.5"\')!=""){3(a.3Y){3(a.P){f()}9{a.1b()}}9{a.27()}}9{13("对不起,您的浏览器不支持3Z音频播放,请升级您的浏览器。")}};b.18("u")})()}7 1c=1F;4 1V(){7 a=6.m("1d-42"),b=6.m("1d"),c=6.m("1c"),d;3(a&&!b){3(c){c=c.1G("1M")[0];d=6.29("H");d.19("G","1d");d.19("1H","2L()");d.2a(6.29("14"));c.2a(d)}9{1c=p;c=6.29("Z");c.19("G","1c");c.43=\'<1M><14>\';6.v.2a(c)}6.m("1d").1N=a.1N}3(!a&&b){1c?c.1G("1M")[0].2M(b):6.v.2M(c)}3(a&&b){b.1N=a.1N}}1V();3(1m 1n!==\'1o\'){1n.44()}45.46("\\n%c 47 48 49 %c 4a://4b.4c.4d ","R:#2N;2O:#4e;1I:2P 0","R:#2N;2O:#4f;1I:2P 0")',62,264,'|||if|function||document|var|comment|else|||||||||||||getElementById||length|false|offsetHeight|return||style|class|body|main||||ajaxload|attr|text|pjax|this|post|id|li|protected|form|find|scrollTop|parent|href|isbool|error|title|color|ap_n|addEventListener|removeEventListener|css|animate|50|on|div||location|url|alert|span||click|next|removeAttribute|setAttribute|px|play|cornertool|catalog|Shake|container|fragment|timeout|10000|submit|prepend|removeAttr|typeof|hljs|undefined|ap|html|list|reply|ajax|action|data|success|ol|replace|top|protoken|ap_btn|aps|window|rt|true|getElementsByTagName|onclick|padding|marginTop|audio|src|ul|className|left|search|header|remove|300|val|al|cl|ac|wi|match|children|red|loading|h1|aln|documentElement|totop|101|pause|canPlayType|createElement|appendChild|hasAttribute|send|bar|removeClass|secondary|block|_hmt|push|pathname|ga|num|type|serializeArray|hide|comments|h3|cancel|link|off|offset|token|word|password|addClass|apt|height|fixed|scrollTo|71|music|getAttribute|shift|ended|canplay|timeupdate|codes|Catalogswith|removeChild|fff|background|5px|in|jQuery|fn|each|position|relative|for|not|target|_blank||no|complete|setTimeout|querySelectorAll|pre|code|forEach|highlightBlock|end|_trackPageview|pageview|whisper|textarea|join|sort|pop|page|navigator|prev|append|fadeIn|parseInt|TypechoComment|cancelReply|value|Token|more|focus|blue|reload|before|getElementsByClassName|auto|scroll|onscroll|classList|contains|head|200|hidden|requestAnimationFrame|cancelAnimationFrame|sidebar|clientHeight|split|vol|volume|display|none|width|currentTime|duration|100|toFixed|mpeg|ogg|vorbis|mp4|mp4a|paused|HTML5|||col|innerHTML|initHighlightingOnLoad|console|log|Initial|By|JIElive|http|www|offodd|com|000|666'.split('|'),0,{})) -------------------------------------------------------------------------------- /page-archives.php: -------------------------------------------------------------------------------- 1 | need('header.php'); 9 | Breadcrumbs($this); ?> 10 |
    11 |

    title() ?>

    12 | widget('Widget_Contents_Post_Recent', 'pageSize='.Typecho_Widget::widget('Widget_Stat')->publishedPostsNum)->to($archives); 14 | $year=0; 15 | $output = '
    '; 16 | while($archives->next()){ 17 | $year_tmp = date('Y',$archives->created); 18 | if ($year > $year_tmp) { 19 | $output .= ''; 20 | } 21 | if ($year != $year_tmp) { 22 | $year = $year_tmp; 23 | $output .= '

    '.date('Y 年',$archives->created).'

      '; 24 | } 25 | if ($this->options->PjaxOption && $archives->hidden) { 26 | $output .= '
    • '.date('m/d:',$archives->created).''. $archives->title .'
    • '; 27 | } else { 28 | $output .= '
    • '.date('m/d:',$archives->created).''. $archives->title .'
    • '; 29 | } 30 | } 31 | $output .= '
    '; 32 | echo $output; 33 | ?> 34 |
    35 |
    36 | options->OneCOL): $this->need('sidebar.php'); endif; ?> 37 | need('footer.php'); ?> -------------------------------------------------------------------------------- /page-links.php: -------------------------------------------------------------------------------- 1 | need('header.php'); 9 | Breadcrumbs($this); ?> 10 |
    11 |

    title() ?>

    12 |
    13 | content(); ?> 14 | 20 |
    21 |
    22 | need('comments.php'); ?> 23 |
    24 | options->OneCOL): $this->need('sidebar.php'); endif; ?> 25 | need('footer.php'); ?> -------------------------------------------------------------------------------- /page-whisper.php: -------------------------------------------------------------------------------- 1 | need('header.php'); 9 | $this->options->commentsThreaded = true; 10 | $this->options->commentsMaxNestingLevels = '3'; 11 | Breadcrumbs($this); ?> 12 |
    13 |

    title() ?>

    14 |
    15 | content(); ?> 16 |
    17 |
    18 | authorId) { 21 | if ($comments->authorId == $comments->ownerId) { 22 | $commentClass .= ' comment-by-author'; 23 | } else { 24 | $commentClass .= ' comment-by-user'; 25 | } 26 | } 27 | ?> 28 |
  • 38 |
    levels > 0) { 40 | echo ' class="comment-whisper"'; 41 | } 42 | ?>> 43 | levels == 0) { ?> 44 |
    45 | gravatar('32'); ?> 46 | 47 | status == 'waiting') { ?> 48 | 内容被拦截,请前往后台-管理评论-通过审核。 49 | 50 |
    51 | 54 | 60 | 61 |
    62 | parameter->allowComment || Typecho_Widget::widget('Widget_User')->pass('editor', true)) { 64 | echo ' class="whisper-reply" title="@' . $comments->author . '" onclick="return TypechoComment.reply(\'' . $comments->theId . '\', ' . $comments->coid . ');"'; 65 | } 66 | ?>>gravatar('16'); ?> 67 | : 68 | parameter->allowComment || Typecho_Widget::widget('Widget_User')->pass('editor', true)) { 70 | echo ' class="whisper-reply" onclick="return TypechoComment.reply(\'' . $comments->theId . '\', ' . $comments->coid . ');"'; 71 | } 72 | ?>>levels > 1) {CommentAt($comments->coid);}echo strip_tags(str_replace(PHP_EOL, "
    ", $comments->text), "
    "); ?>
    73 | status == 'waiting') { ?> 74 | 您的评论正等待审核! 75 | 76 |
    77 | 78 |
    79 | children) { ?> 80 |
    81 | threadedComments($options); ?> 82 |
    83 | 84 |
  • 85 | 86 |
    87 | comments()->to($comments); ?> 88 | have()): ?> 89 | listComments(); ?> 90 | pageNav('上一页', '下一页', 0, '..'); ?> 91 | 92 | allow('comment') || $this->user->pass('editor', true)): ?> 93 |
    94 |
    95 | cancelReply('取消评论'); ?> 96 |
    97 |

    发表user->pass('editor', true) ? '轻语' : '评论' ?>

    98 |
    user->pass('editor', true)): ?> action="commentUrl() ?>" id="comment-form"user->hasLogin()): ?> class="comment-form clearfix"> 99 |

    user->hasLogin()): ?>class="textarea"> 100 | 101 |

    102 |

    user->hasLogin()): ?>class="textbutton"> 103 | user->hasLogin()): ?> 104 | 105 | options->commentsRequireMail): ?> required /> 106 | options->commentsRequireURL): ?> required /> 107 | 108 | 109 |

    110 |
    111 |
    112 | 113 | 114 |
    115 | 116 | options->OneCOL): $this->need('sidebar.php'); endif; ?> 117 | need('footer.php'); ?> -------------------------------------------------------------------------------- /page.php: -------------------------------------------------------------------------------- 1 | need('header.php'); 3 | Breadcrumbs($this); ?> 4 | 10 | need('comments.php'); ?> 11 | 12 | options->OneCOL): $this->need('sidebar.php'); endif; ?> 13 | need('footer.php'); ?> -------------------------------------------------------------------------------- /post.php: -------------------------------------------------------------------------------- 1 | need('header.php'); 3 | if (!empty($this->options->Breadcrumbs) && in_array('Postshow', $this->options->Breadcrumbs)): ?> 4 | 7 | 8 |
    9 |

    title() ?>

    10 | 16 |
    17 | content(); ?> 18 |
    19 | options->WeChat || $this->options->Alipay): ?> 20 |

    打赏: options->WeChat): ?> 21 | 微信收款二维码微信options->WeChat && $this->options->Alipay): ?>, options->Alipay): ?> 22 | 支付宝收款二维码支付宝 23 |

    24 | 25 |

    标签: tags(', ', true, 'none'); ?>

    26 | options->LicenseInfo !== '0'): ?> 27 |

    options->LicenseInfo ? $this->options->LicenseInfo : '本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。' ?>

    28 | 29 |
    30 | need('comments.php'); ?> 31 |
      32 |
    • 上一篇: thePrev('%s','没有了'); ?>
    • 33 |
    • 下一篇: theNext('%s','没有了'); ?>
    • 34 |
    35 | 36 | options->OneCOL): $this->need('sidebar.php'); endif; ?> 37 | need('footer.php'); ?> -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jielive/initial/1c68cb95199e16c4b933dfdf2922e1fae27fc1c4/screenshot.png -------------------------------------------------------------------------------- /sidebar.php: -------------------------------------------------------------------------------- 1 | 2 |
    options->SidebarFixed): ?> sidebar-fixed> 3 | options->ShowWhisper) && in_array('sidebar', $this->options->ShowWhisper)): ?> 4 |
    5 | 6 |
    7 | 8 | options->sidebarBlock) && in_array('ShowHotPosts', $this->options->sidebarBlock)): ?> 9 |
    10 |

    热门文章

    11 |
      12 | options->postsListSize, 'commentsNum'); ?> 13 |
    14 |
    15 | 16 | options->sidebarBlock) && in_array('ShowRecentPosts', $this->options->sidebarBlock)): ?> 17 |
    18 |

    最新文章

    19 |
      20 | options->postsListSize); ?> 21 |
    22 |
    23 | 24 | options->sidebarBlock) && in_array('ShowRecentComments', $this->options->sidebarBlock)): ?> 25 |
    26 |

    最近回复

    27 | 37 |
    38 | 39 | options->sidebarBlock) && in_array('ShowCategory', $this->options->sidebarBlock)): ?> 40 |
    41 |

    分类

    42 |
      43 | widget('Widget_Metas_Category_List') 44 | ->parse('
    • {name}
    • '); ?> 45 |
    46 |
    47 | 48 | options->sidebarBlock) && in_array('ShowTag', $this->options->sidebarBlock)): ?> 49 |
    50 |

    标签

    51 |
      52 | widget('Widget_Metas_Tag_Cloud', 'ignoreZeroCount=1&limit=30')->to($tags); ?> 53 | have()): ?> 54 | next()): ?> 55 |
    • name(); ?>
    • 56 | 57 | 58 |
    • 暂无标签
    • 59 | 60 |
    61 |
    62 | 63 | options->sidebarBlock) && in_array('ShowArchive', $this->options->sidebarBlock)): ?> 64 |
    65 |

    归档

    66 |
      67 | widget('Widget_Contents_Post_Date', 'type=month&format=Y 年 n 月') 68 | ->parse('
    • {date}
    • '); ?> 69 |
    70 |
    71 | 72 | options->ShowLinks) && in_array('sidebar', $this->options->ShowLinks)): ?> 73 |
    74 |

    链接

    75 | 81 |
    82 | 83 | options->sidebarBlock) && in_array('ShowOther', $this->options->sidebarBlock)): ?> 84 |
    85 |

    其它

    86 | 94 |
    95 | 96 |
    97 | -------------------------------------------------------------------------------- /style.min.css: -------------------------------------------------------------------------------- 1 | body{font:15px/1.2 -apple-system,BlinkMacSystemFont,Helvetica Neue,PingFang SC,Microsoft YaHei,Source Han Sans SC,Noto Sans CJK SC,WenQuanYi Micro Hei,sans-serif;margin:0;color:#444;background-color:#fff}a,.nav-menu ul a,.post-content .more a{color:#666;border:0;text-decoration:none}a:hover,.rewards a:hover,.tags a:hover,.comment-author a:hover,#footer .links a:hover,.icpnum:hover{color:#333}ul{padding-left:30px}ul li p,#footer p,.whisper .comment-author,.whisper .comment-children .comment-children{margin:0}h1,h1.post-title{font-size:1.4em}h2,#catalog-col b{font-size:1.2em}pre,code{font-family:Consolas,Inconsolata,Courier,monospace,"PingFang SC","Microsoft YaHei",sans-serif;font-size:.9em;background:#f7f3f7}code{padding:2px 4px;color:#b94a48}pre{padding:8px;overflow:auto;max-height:400px}pre code{display:block;padding:3px;color:#444}.hljs{color:#695d69}.hljs-comment,.hljs-quote{color:#776977}.hljs-variable,.hljs-template-variable,.hljs-attribute,.hljs-tag,.hljs-name,.hljs-regexp,.hljs-link,.hljs-name,.hljs-selector-id,.hljs-selector-class{color:#ca402b}.hljs-number,.hljs-meta,.hljs-built_in,.hljs-builtin-name,.hljs-literal,.hljs-type,.hljs-params{color:#a65926}.hljs-string,.hljs-symbol,.hljs-bullet{color:#918b3b}.hljs-title,.hljs-section{color:#516aec}.hljs-keyword,.hljs-selector-tag{color:#7b59c0}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}blockquote{margin:1em 0;padding-left:1.5em;background:#f9f9f9;border-left:4px solid #ddd;color:#555}table{border:1px solid #ddd;width:100%}table th,table td{padding:5px 10px;border:1px solid #eee}table th{background:#f3f3f3}input,textarea,button{font-family:inherit;font-size:100%;line-height:1.2;margin:0;outline:0;appearance:none;-webkit-appearance:none}input,textarea{padding:5px;border:1px solid #eee;width:100%;height:30px;border-radius:2px;box-shadow:none;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}textarea{height:150px;resize:vertical;overflow:auto}button,input[type=submit]{padding:0 6px;background:#ddd;border:0}button,input[type=submit],.menu-parent a,.rewards a,.whisper .whisper-reply,#cornertool li{cursor:pointer}.browsehappy{padding:8px 0;background:#fbe3e4;color:#8a1f11;text-align:center}.browsehappy a{color:#8a1f11;text-decoration:underline;font-weight:bold}.clearfix{zoom:1}.clearfix:before,.clearfix:after{content:"";display:table}.clearfix:after{clear:both}.container{max-width:1060px;margin-left:auto;margin-right:auto;padding-left:10px;padding-right:10px}.head-fixed .browsehappy{position:fixed;bottom:0;width:100%}.head-fixed #header{position:fixed;top:0;width:100%;background:rgba(255,255,255,.95);z-index:999}.head-fixed #body{padding-top:71px}#header{line-height:40px;padding:15px 0;border-bottom:1px solid #eee}.site-name,.comment-form p{float:left}.site-name .site-title{height:40px;font-size:1.6em;margin:0;font-weight:normal}.site-name .site-title,#logo{display:flex;align-items:center}#logo,.post-title a{color:#333}#logo img{display:block;max-height:30px;margin-right:5px}#nav-swith{position:relative;float:right;margin-left:5px;color:#444}#nav-swith,#search button{top:5px;right:0;width:30px;height:30px;background:0}#nav-swith:before,#search button:before{content:"";position:absolute;top:7px;left:7px;width:9px;height:9px;border:solid 2px currentColor;border-radius:50%}#nav-swith:after,#search button:after{content:"";position:absolute;top:19px;left:17px;width:6px;height:2px;background:currentColor}#nav-swith:before,#nav-swith:after,#nav-swith span,#nav,#site-search,.nav-menu,.menu-parent ul,#catalog-col,.rewards img,#cornertool li,#music span,#catalog:before,#catalog:after,#catalog span{transition:.2s;-webkit-transition:.2s}.on #nav-swith:before,.on #nav-swith:after{content:"";position:absolute;top:14px;left:6px;width:18px;height:2px;background:currentColor;border:0;border-radius:0}.on #nav-swith:before,.author-icon{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}#nav-swith:after,.on #nav-swith:after,#search button:after{transform:rotate(45deg);-webkit-transform:rotate(45deg)}#nav-swith span{display:block;width:18px;height:2px;background:currentColor;visibility:hidden}#nav,.whisper .post-title .more{position:relative;float:right}.on #site-search{top:0}.on #site-search,.menu-parent:hover>ul,#catalog-col.catalog,.rewards a:hover img,#cornertool li{visibility:visible;opacity:1}#site-search{position:absolute;top:-10px;right:0;width:200px}#site-search,.menu-parent ul,#catalog-col,.rewards img,#cornertool .hidden{visibility:hidden;opacity:0}#search,.rewards,.menu-parent,.l_logo,.loading,.whisper .comment-meta{position:relative}#search input{padding-right:30px;background:0;border:0;border-bottom:1px solid #999;border-radius:0;text-align:center}#search button{position:absolute;color:#666}.nav-menu,.comment-list,.comment-list ol{list-style:none;margin:0;padding:0}.nav-menu::-webkit-scrollbar,#catalog-col::-webkit-scrollbar{width:6px;height:6px}.nav-menu::-webkit-scrollbar-thumb,#catalog-col::-webkit-scrollbar-thumb{border-radius:3px;background-color:#ddd}.nav-menu li{display:inline-block;margin:0 10px}.nav-menu a{color:#444}.nav-menu a:hover,.page-navigator a:hover{border-bottom:1px solid #444}.menu-parent ul{position:absolute;left:50%;min-width:100px;padding:0;border-radius:5px;background:rgba(238,238,238,.95);text-align:center;list-style:none;transform:translateX(-50%);-webkit-transform:translateX(-50%)}.menu-parent ul:before{content:"";position:absolute;top:-7px;left:50%;margin-left:-7px;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid rgba(238,238,238,.95)}.menu-parent li,#cornertool li:before,.whisper .comment-list .respond,.whisper.permission .respond{display:block}.menu-parent ul a{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.menu-parent .menu-parent .menu-child{background:rgba(221,221,221,.95)}#bar,.loading:after{position:fixed;top:0;height:3px;background:#333;animation:loading 1s infinite;-webkit-animation:loading 1s infinite}@keyframes loading{0%{right:50%;left:50%}30%{right:0;left:0}100%{right:50%;left:50%}}@-webkit-keyframes loading{0%{right:50%;left:50%}30%{right:0;left:0}100%{right:50%;left:50%}}#main{float:left;width:70%}.one-col #main{float:none;margin:0 auto;width:750px}#main>*:not(.breadcrumbs){animation:pin .3s;-webkit-animation:pin .3s}@keyframes pin{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes pin{0%{opacity:0}100%{opacity:1}}.breadcrumbs{margin:15px 0 -15px;color:#666}.post{padding:20px 0}.post-title{margin:.83em 0;font-size:1.25em}.post-meta{margin-top:-0.5em;padding:0;color:#666;font-size:.8em}.post-meta li{display:inline-block;margin:0 .5em .5em 0;padding-left:.6em;border-left:1px solid #eee}.post-meta li:first-child{padding:0;border:0}#catalog-col,#cornertool{position:fixed;bottom:5px;z-index:999}#catalog-col{right:50%;margin-right:-515px;min-width:150px;max-width:50%;max-height:50%;color:#eee;background:rgba(0,0,0,.7);border:1em solid transparent;border-right-width:.3em;overflow:auto}#catalog-col.catalog{margin-right:-535px}#catalog-col>ul{margin:1em .5em 0 0}#catalog-col ul{padding-left:20px}#catalog-col a{color:#eee;border:0}#catalog-col a:hover{border-bottom:1px solid #eee}.post-content .cl-offset{position:relative;display:block;top:-10px;height:0;border:0}.head-fixed .cl-offset{top:-51px}.one-col .post{border-bottom:1px solid #eee}.one-col .post:last-of-type,.whisper .whisper-body:last-child{border:0}.post.whisper{min-height:40px;margin:2.2em 0 15px;padding:0 1em;text-align:center;border:1px solid #444;border-radius:2px}.whisper .post-title{font-size:1em;line-height:1.5;font-weight:normal;margin:0 -1em}.whisper.post .post-title a{display:block;padding:2px 1em;color:#fff;background:#444}.whisper .post-title a,.post-content .links a{transition:.3s;-webkit-transition:.3s}.whisper .post-title a:hover{background:#000}.whisper .post-content pre{text-align:left}.whisper .notice{display:block;font-size:.9em;padding:5px;color:#f44336;border:1px solid;border-radius:2px}.post-content,.comment-content{line-height:1.6;word-wrap:break-word}.post-content a,.comment-content a{color:#3354aa;border-bottom:1px solid #eee}.post-content a:hover,.comment-content a:hover,.nav-menu ul a:hover{color:#333;border:0}.post-content img,.post-content video,.comment-content img,.comment-content video,.whisper img,.whisper video{max-width:100%}.post-content hr,.comment-content hr{margin:2em auto;width:100px;border:1px solid #ddd;border-width:2px 0 0 0}.post-content .word{display:inline}.post-content .thumb,.post-content .more{text-align:center}.protected input{width:auto}.rewards,.post .tags{clear:both}.rewards a,.tags a,.comment-author a{color:#3354aa;border:0}.rewards img{position:absolute;top:0;left:50%;margin:-15% 0 0 -15%;padding:5px;max-width:30%;background:#eee}.license{font-size:.8em;color:#999;margin:0}.post-near{list-style:none;margin:30px 0;padding:0;color:#999}.post-near li{margin:10px 0}.page-navigator{list-style:none;margin:25px 0;padding:0;text-align:center}.page-navigator li{display:inline-block;margin:0 5px;height:24px;line-height:24px}.page-navigator a{padding:0 2px}.page-navigator .current a{color:#444;border-bottom:1px solid #444}.ajaxload li,.whisper .respond{display:none}.ajaxload .next{display:block;color:#666}.ajaxload a{padding:5px 20px;border:1px solid #666;border-radius:2px}.ajaxload a:hover{border-color:#333}.ajaxload .loading,.ajaxload .loading:hover,.word.loading{padding:5px;color:#333;border:0}.loading:after{content:"";display:block;position:absolute;top:auto;bottom:0;height:1px}#comments{margin-bottom:30px;border-top:1px solid #eee}.whisper .whisper-body{padding:20px 10px;background:0;border:0;border-bottom:1px solid #eee}.whisper .whisper-body>div>.comment-content,.whisper .comment-meta,.whisper .comment-children{margin:1em 0 0 42px}.comment-meta .whisper-reply{position:absolute;right:0;bottom:0;font-size:.9em}.whisper .comment-body,.comment-parent>.comment-whisper{font-size:.94em;margin:0;padding:0;background:0;border:0}.whisper .comment-parent,.comment-whisper{margin-top:2px;padding:2px 5px;background:#e6e6e6;border:0;border-radius:2px}.whisper .comment-body .comment-content{line-height:20px}.whisper .comment-body .avatar{margin:2px 5px 0 0}.whisper .comment-parent>.comment-children{margin-left:5px}.comment-list li{margin-top:10px;padding:10px;border:1px solid #eee}.comment-level-odd,.comment-whisper{background:#f6f6f6}.comment-level-even{background:#fff}.comment-by-author,.whisper .comment-parent.comment-by-author,.comment-by-author>.comment-whisper{position:relative;background:#f2f7fc}.author-icon{font-size:.8em;display:block;position:absolute;top:8px;left:-15px;width:60px;height:15px;line-height:15px;text-align:center;background:linear-gradient(135deg,transparent 30%,rgba(230,230,230,.8) 0) left,linear-gradient(-135deg,transparent 30%,rgba(230,230,230,.8) 0) right;background-size:50% 100%;background-repeat:no-repeat}.comment-list li .comment-reply{text-align:right;font-size:.9em}.comment-meta time{color:#999;font-size:.8em}.comment-author{display:block;color:#444}.comment-author .avatar{float:left;margin-right:10px}.comment-at{font-size:.8em;margin-right:5px;font-weight:bold}.comment-list .respond{margin-top:15px;border-top:1px solid #eee}.respond .cancel-comment-reply{float:right;margin-top:15px;font-size:.9em}.comment-form input{margin-bottom:10px}.comment-form .textarea{width:68%;margin:0 2% 0 0}.comment-form .textbutton{width:30%;margin:0}#comment-form button{width:100%;height:30px;border-radius:2px}#secondary{margin-left:74%;padding-top:15px;word-wrap:break-word}#secondary .more{display:block;font-size:.8em}.widget{margin-bottom:30px}.widget-list,.widget-tile,.links,#cornertool ul{list-style:none;padding:0}.widget-list li,#catalog-col li{margin:5px 0;line-height:1.6}.widget-list li ul{margin-left:15px}.widget-tile{margin-left:-5px;margin-right:-5px}.widget-tile li{display:inline-block;margin:5px;line-height:1.6;color:#666}#footer{font-size:.8em;padding:2em 0;line-height:1.5;text-align:center;border-top:1px solid #eee}#footer,#footer .links a,.icpnum{color:#999}.post-content .links{letter-spacing:-9em}.post-content .links li{display:inline-block;width:25%;letter-spacing:0}.post-content .links a{display:block;height:20px;line-height:20px;margin:5px 10px;padding:5px 10px;text-align:center;color:#444;background:#fcfcfc;border:0;border-radius:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;box-shadow:0 1px 5px rgba(0,0,0,.1);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.1)}.post-content .links a:hover{box-shadow:0 2px 5px rgba(0,0,0,.3);-webkit-box-shadow:0 2px 5px rgba(0,0,0,.3)}.post-content .links .l_logo{padding-left:40px}.l_logo img,.l_logo i{position:absolute;top:0;left:0;width:16px;height:16px;padding:7px;background:#ccc;overflow:hidden}.l_logo i{font:16px/1 Segoe UI Symbol}#footer .links,#cornertool ul{margin:0;text-align:center}#footer .links li{display:inline-block;margin:0 3px 2px}#cornertool{right:50%;margin-right:-580px}#cornertool .hidden{left:20px}#cornertool li{position:relative;display:block;left:0;width:40px;height:40px;line-height:40px;margin-top:5px;color:#fff;background:rgba(0,0,0,.7)}#top:before{content:"\25b2"}#top:hover:before{content:"Top"}#music:before{content:"\266b"}#music:hover:before{content:"\25b2"}#music:hover:before,#catalog.catalog span{transform:rotate(90deg);-webkit-transform:rotate(90deg)}#music.play:hover:before{content:"\3013";animation:0;-webkit-animation:0}.play:before{animation:play 5s linear infinite;-webkit-animation:play 5s linear infinite}@keyframes play{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@-webkit-keyframes play{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg)}}#music span{position:absolute;display:block;bottom:0;height:5px;width:0;background:#666;opacity:.7}#music.play span{width:100%}#music.play span i{display:block;height:100%;width:0;background:#eee}#catalog span,#catalog:before,#catalog:after{position:absolute;display:block;top:50%;left:50%;margin:-1px 0 0 -6px;width:12px;height:1px;background:currentColor}#catalog:before{content:"";margin-top:-5px}#catalog:after{content:"";margin-top:3px}#catalog.catalog{left:-5px}#catalog.catalog:before{margin:-4px 0 0 -11px;transform:rotate(-30deg);-webkit-transform:rotate(-30deg)}#catalog.catalog:after{margin:2px 0 0 -11px;transform:rotate(30deg);-webkit-transform:rotate(30deg)}.error-page{margin:100px 0;text-align:center}#archives li{margin:5px 0}@media(min-width:601px){.on .nav-menu{visibility:hidden;opacity:0}.menu-parent .menu-parent .menu-child{top:5px;left:-30px;transform:translateX(-100%);-webkit-transform:translateX(-100%)}.menu-parent .menu-parent:hover>.menu-child{left:-7px}.menu-parent .menu-parent .menu-child:before{top:7px;left:100%;margin:0;border-top:7px solid transparent;border-bottom:7px solid transparent;border-left:7px solid rgba(221,221,221,.95)}}@media(max-width:1170px){#catalog-col{right:65px;margin:0}#catalog-col.catalog{right:50px;margin:0}#cornertool{right:5px;margin:0}}@media(max-width:990px){#catalog-col.catalog{right:45px}#secondary{margin-left:72%}#cornertool li{width:35px;height:35px;line-height:35px}}@media(max-width:768px){#main,.one-col #main{width:100%}#secondary{display:none}.post-title,.post-meta,.protected .post-content{text-align:center}}@media(max-width:600px){#nav-swith{margin:0}#nav-swith:before,#nav-swith:after{left:6px;width:18px;height:2px;background:currentColor;border:0;border-radius:0;transform:none;-ms-transform:none;-webkit-transform:none}#nav-swith:after{top:21px}#nav-swith span{visibility:visible}.on #nav-swith span{visibility:hidden;opacity:0}#nav{width:100%;max-height:0;overflow:hidden;text-align:center}.on #nav{max-height:240px}.head-fixed .on #nav{margin-bottom:5px}.nav-menu{max-height:200px;overflow:auto}.nav-menu li,.nav-menu a{display:block}.nav-menu a:hover{font-weight:bold;border:0}.menu-parent ul{position:relative;left:0;margin:0 auto;width:75%;visibility:visible;opacity:1;transform:none;-webkit-transform:none}.menu-parent .menu-parent .menu-child:before{border-bottom:7px solid rgba(221,221,221,.95)}#site-search{position:static;width:50%;margin:0 auto}.post-content .links li{width:33.33333%}.comment-form .textarea{width:58%}.comment-form .textbutton{width:40%}}@media(max-width:420px){.post-content .links li{width:50%}} --------------------------------------------------------------------------------