配置环境
Hexo是用node-js写的,hexo生成静态页面的速度要比较快,hexo是本地生成html再上传。
官网:https://hexo.io/zh-cn/docs/
安装Node.js
官网下载对应平台安装包安装:https://nodejs.org
详见:Node.js开发环境搭建
安装Git
参考教程:Git教程
安装Hexo
npm install -g hexo-cli #Mac下安装sudo -i切换到root权限。
hexo init blog #blog文件夹要先建好,这一步自动生成网站。
cd blog
npm install #安装依赖的插件。
hexo server #运行服务
这时可以在浏览器打开网页。hexo server
的简化命令为hexo s
;指定端口:-p xxxx
和jekyll一样是通过修改**_config.yml文件来配置站点信息的。(在Hexo中,根目录下的_config.yml文件是用来配置网站信息的;主题目录下的_config.yml**文件是用来配置文章主题,页面等等的)
如果是在另一台电脑上配置环境(远程仓库中有项目文件)只需要安装Node.js、Git、Markdown编辑器,之后npm install -g hexo-cli
安装hexo后配置Git
git config --global user.name "leolan"
git config --global user.email "842632422@qq.com"
ssh-keygen -t rsa -C "842632422@qq.com"
cat ~/.ssh/id_rsa.pub
把密钥添加到Coding和Github上,再git clone 仓库地址(建议用ssh地址)
就直接可以正常使用了。
默认的目录结构如下:
├── .deploy #执行hexo deploy命令部署到GitHub上的内容目录
├── public #执行hexo generate命令,输出的静态网页内容目录
├── scaffolds #layout模板文件目录,其中的md文件可以添加编辑
├── scripts #扩展脚本目录,这里可以自定义一些javascript脚本
├── source #文章源码目录,该目录下的markdown和html文件均会被hexo处理。404文件,CNAME文件等都应该放这里。
| ├── _drafts #草稿文章
| └── _posts #发布的文章
├── themes #主题文件目录
├── _config.yml #全局配置文件,大多数的设置都在这里
└── package.json #应用程序数据,指明hexo的版本等信息。在push到github时提示*.json错误,删掉这个文件或删掉db.json就行。
配置优化、定制站点
Next官方设置说明:http://theme-next.iissnan.com/getting-started.html
站点配置
以下是我的配置文件:
# Hexo Configuration
## Docs: https://hexo.io/docs/configuration.html
## Source: https://github.com/hexojs/hexo/
# Site
title: LeoLan's Blog
subtitle: 有时候正是不报期望的人做出了人们不敢期望之事!
description: Better late than never
author: LeoLan
language: zh-Hans
timezone: Asia/Shanghai
# URL
## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/'
url: https://www.leolan.top
coding_url: https://www.leolan.top
root: /
permalink: posts/:abbrlink/
permalink_defaults:
# Directory
source_dir: source
public_dir: public
tag_dir: tags
archive_dir: archives
category_dir: categories
code_dir: downloads/code
i18n_dir: :lang
#禁止编译README.md文件,也可以在文件中增加yml文件头layout: false,---结尾
skip_render:
- baidu_verify_dc4dBM4StW.html
- googled7e43f3624e0f703.html
- CNAME
- README.md
- .nojekyll
- Staticfile
- 'love/**'
- love/**
- 'love/*.html'
- love/*.html
#强制包含.nojekyll文件(放在source下),这样hexo g时,.开头的文件具不会被忽略,适用于5.0以下版本的next主题(github屏蔽了一些文件夹)
include:
- .nojekyll
# abbrlink config 生成文章永久链接(利于SEO)需要安装插件
abbrlink:
alg: crc16 # 算法:crc16(default) and crc32
rep: dec # 进制:dec(default) and hex
baidu_url_submit: #百度链接推送,推送刚刚生成的永久链接
count: 5 ## 比如3,代表提交最新的三个链接
host: www.leolan.top ## 在百度站长平台中注册的域名
token: kZ5xboXBFPxQ0g7N ## 请注意这是您的秘钥, 请不要发布在公众仓库里!
path: /baidu_urls.txt ## 文本文档的地址, 新链接会保存在此文本文档里
# Writing 官网:https://hexo.io/zh-cn/docs/writing.html
new_post_name: :year-:month-:day-:title.md # File name of new posts
default_layout: post
titlecase: false # Transform title into titlecase
external_link: true # Open external links in new tab
filename_case: 0
render_drafts: false
post_asset_folder: false #新建文章时自动生成本地存放图片等资源的文件夹
relative_link: false
future: true
highlight:
enable: true
line_number: true
auto_detect: true
tab_replace:
# Category & Tag
default_category: uncategorized
category_map:
tag_map:
# Date / Time format
## Hexo uses Moment.js to parse and display date
## You can customize the date format as defined in
## http://momentjs.com/docs/#/displaying/format/
date_format: YYYY-MM-DD
time_format: HH:mm:ss
# Pagination 单独页面文章数目,需要安装以下3个插件
#npm install --save hexo-generator-index
#npm install --save hexo-generator-archive
#npm install --save hexo-generator-tag
## Set per_page to 0 to disable pagination
index_generator:
per_page: 5
archive_generator:
per_page: 20
yearly: true
monthly: true
tag_generator:
per_page: 10
pagination_dir: page
# Extensions 主题选择
## Plugins: https://hexo.io/plugins/
## Themes: https://hexo.io/themes/
theme: next5.0.1
#theme: material
# Deployment 自动部署到仓库
## 官方文档Docs: https://hexo.io/docs/deployment.html 有部署到各种服务器的方法
## 参考:http://www.lxway.com/240950852.htm
#不管是github还是coding,type都填写git
deploy:
- type: git
repo: git@git.coding.net:leolan/blog.git,master
message: 'LeoLan updated:{{now("YYYY-MM-DD HH:mm:ss")}}' #这个是commit的说明,因为是发布站点,方便看到发布时间。
- type: git
repo: git@github.com:MyLeoLan/blog.git,master
message: 'LeoLan updated:{{now("YYYY-MM-DD HH:mm:ss")}}'
#- type: git
# repo: git@git.oschina.net:leolan/leolan.git,master
# message: 'LeoLan updated:{{now("YYYY-MM-DD HH:mm:ss")}}'
#deploy:
#- type: git
# repo:
#- type: heroku(另一种云平台)
# repo:
# Disqus #Disqus评论系统
disqus_shortname: leolan
#plugins: #插件,例如生成 RSS 和站点地图的
#hexo-generator-sitemap
#- hexo-generator-baidu-sitemap
plugins:
hexo-generator-feed
hexo-generator-baidu-sitemap
sitemap:
path: sitemap.xml
baidusitemap:
path: baidusitemap.xml
# Social links 社交链接
social:
GitHub: https://github.com/myleolan
Coding: https://coding.net/u/leolan
Cloud1: http://quickconnect.to/myleolan
OSchina: https://git.oschina.net/leolan
Cloud2: http://842632422-abc.eicp.net
Links: https://www.leolan.top/posts/44568/
#Twitter: https://twitter.com/lmintlcx
#Zhihu: http://www.zhihu.com/people/lmintlcx
#Douban: http://www.douban.com/people/lmintlcx
#Weibo: http://weibo.com/u/3233729080
duoshuo_shortname: leolan
# 多说热评文章 true 或者 false
duoshuo_hotartical: true
# 多说分享服务
duoshuo_share: true
# 百度分享服务
baidushare: true
#打赏功能
reward_comment: 您的支持将鼓励我继续创作,非常感谢!
alipay: https://image.leolan.top//pay/alipay.jpg
wechatpay: https://image.leolan.top//pay/weixinpay.png
#站点建立时间
since: 2016
#百度分析(可能会影响网页加载速度)
#baidu_analytics: c91eae7f335d73f093d1499eff4b45a7
#本地搜索
search:
path: search.xml
field: post
format: html
limit: 10000
主题配置
Material主题:https://material.viosey.com/start/#install-material
Material项目地址:https://github.com/viosey/hexo-theme-material
推荐Next主题,简单简洁,官网:http://theme-next.iissnan.com/
安装最新版:
cd your-hexo-site
git clone https://github.com/iissnan/hexo-theme-next themes/next
在主题目录下可以看到next文件夹,修改站点配置文件_config.yml中的theme: next
hexo clean && hexo s
就可以看到新主题生效啦!
接下来修改主题配置文件_config.yml,以下是我的配置。
# ---------------------------------------------------------------
# Site Information Settings
# ---------------------------------------------------------------
# Put your favicon.ico into `hexo-site/source/` directory.
favicon: /200.png
# Set default keywords (Use a comma to separate) 站点关键词,利于SEO
keywords: "Hexo, NexT, Leo Lan, leolan, Blog, myleolan, lan, coding"
# Set rss to false to disable feed link.
# Leave rss as empty to use site's feed link.
# Set rss to specific value if you have burned your feed already.
rss: https://www.leolan.top/atom.xml
# Specify the date when the site was setup
#since: 2015
# Canonical, set a canonical link tag in your hexo, you could use it for your SEO of blog.
# See: https://support.google.com/webmasters/answer/139066
# Tips: Before you open this tag, remeber set up your URL in hexo _config.yml ( ex. url: http://yourdomain.com )
canonical: true
# ---------------------------------------------------------------
# Menu Settings
# ---------------------------------------------------------------
# When running the site in a subdirectory (e.g. domain.tld/blog), remove the leading slash (/archives -> archives)
menu:
home: /
categories: /categories
tags: /tags
archives: /archives
about: /about
guestbook: /guestbook
# schedule: /schedule
#commonweal: /404.html
# Enable/Disable menu icons. 菜单图标
# Icon Mapping:
# Map a menu item to a specific FontAwesome icon name.
# Key is the name of menu item and value is the name of FontAwsome icon. Key is case-senstive.
# When an question mask icon presenting up means that the item has no mapping icon.
menu_icons: #http://fontawesome.io/icons/
enable: true
#KeyMapsToMenuItemKey: NameOfTheIconFromFontAwesome
home: home
about: user
categories: th
schedule: calendar
tags: tags
archives: archive
commonweal: heartbeat
guestbook: commenting
# ---------------------------------------------------------------
# Scheme Settings
# ---------------------------------------------------------------
# Schemes
#scheme: Muse
#scheme: Mist
scheme: Pisces
# ---------------------------------------------------------------
# Font Settings
# - Find fonts on Google Fonts (https://www.google.com/fonts)
# - All fonts set here will have the following styles:
# light, light italic, normal, normal intalic, bold, bold italic
# - Be aware that setting too much fonts will cause site running slowly
# - Introduce in 5.0.1
# ---------------------------------------------------------------
font:
enable: true
# Uri of fonts host. E.g. //fonts.googleapis.com (Default) 慢的话搜索fonts.googleapis.com即可找到替换地址
host:
#fonts.css.network
# Global font settings used on <body> element.
global:
# external: true will load this font family from host.
external: true
family: Lato
#Monda
# Font settings for Headlines (h1, h2, h3, h4, h5, h6)
# Fallback to `global` font settings.
headings:
external: true
family:
# Font settings for posts
# Fallback to `global` font settings.
posts:
external: true
family: Roboto
# Font settings for Logo
# Fallback to `global` font settings.
# The `size` option use `px` as unit
logo:
external: true
family: Georgia
size: 24
# Font settings for <code> and code blocks.
codes:
external: true
family:
size: 14
#"Source Code Pro", "PT Mono", "DejaVu Sans Mono",
# ---------------------------------------------------------------
# Sidebar Settings
# ---------------------------------------------------------------
# Social Links 社交链接
# Key is the link label showing to end users.
# Value is the target link (E.g. GitHub: https://github.com/iissnan)
#social:
#LinkLabel: Link
# Social Links Icons
# Icon Mapping:
# Map a menu item to a specific FontAwesome icon name.
# Key is the name of the item and value is the name of FontAwsome icon. Key is case-senstive.
# When an globe mask icon presenting up means that the item has no mapping icon.
social_icons: #http://fontawesome.io/icons/
enable: true
# Icon Mappings.
# KeyMapsToSocalItemKey: NameOfTheIconFromFontAwesome
GitHub: github
Coding: github-alt
Cloud1: cloud
Cloud2: cloud
OSchina: git-square
#松松视频: video-camera
#Twitter: twitter
#Weibo: weibo
# Sidebar Avatar
# in theme directory(source/images): /images/avatar.jpg
# in site directory(source/uploads): /uploads/avatar.jpg
avatar: /images/avatar.jpg #博客侧边栏显示的头像
# Table Of Contents in the Sidebar
toc:
enable: true
# Automatically add list number to toc.
number: true
# Creative Commons 4.0 International License.
# http://creativecommons.org/
# Available: by | by-nc | by-nc-nd | by-nc-sa | by-nd | by-sa | zero
#creative_commons: by-nc-sa
#creative_commons:
sidebar:
# Sidebar Position, available value: left | right
position: left
#position: right
# Sidebar Display, available value: 侧边栏显示
# - post expand on posts automatically. Default.
# - always expand for all pages automatically
# - hide expand only when click on the sidebar toggle icon.
# - remove Totally remove sidebar including sidebar toggler.
display: post
#display: always
#display: hide
#display: remove
# Blogrolls 友情链接
links_title: 友链
#links_layout: block
links_icon: heartbeat
#links_layout: inline
links:
Jerry Locke: https://jerry.hk/
Raintons: http://login926.top
DIYgod: https://www.anotherhome.net
小黑: http://mblack.cn/
Jing's Blog: http://www.iamlj.com/
cyang's blog: http://cyang.tech/
一路向北: http://www.showerlee.com/
卢松松的博客: http://lusongsong.com/
松松视频: http://v.lusongsong.com/
# ---------------------------------------------------------------
# Misc Theme Settings
# ---------------------------------------------------------------
# Custom Logo.
# !!Only available for Default Scheme currently.
# Options:
# enabled: [true/false] - Replace with specific image
# image: url-of-image - Images's url
custom_logo:
enabled: false
image:
# Code Highlight theme 代码高亮主题
# Available value:
# normal | night | night eighties | night blue | night bright
# https://github.com/chriskempson/tomorrow-theme
highlight_theme: night eighties
# Automatically scroll page to section which is under <!-- more --> mark.
scroll_to_more: true
# Automatically Excerpt. Not recommand.
# Please use <!-- more --> in the post to control excerpt accurately.
auto_excerpt:
enable: true
length: 150
# Wechat Subscriber 微信打赏
#wechat_subscriber:
#enabled: true
#qcode: /path/to/your/wechatqcode ex. /uploads/wechat-qcode.jpg
#description: ex. subscribe to my blog by scanning my public wechat account
# ---------------------------------------------------------------
# Third Party Services Settings
# ---------------------------------------------------------------
# MathJax Support 数学公式
mathjax:
enable: true
cdn: //cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML
#各种第三方服务
# Swiftype Search API Key
#swiftype_key:
# Baidu Analytics ID
#baidu_analytics:
# Duoshuo ShortName
#duoshuo_shortname:
# Disqus
#disqus_shortname:
# Baidu Share
# Available value:
# button | slide
# Warning: Baidu Share does not support https.
#baidushare:
## type: button
# Share
jiathis: false
# Warning: JiaThis does not support https.
#add_this_id:
# Share
duoshuo_share: true
# Google Webmaster tools verification setting
# See: https://www.google.com/webmasters/
#google_site_verification:
# Google Analytics
#google_analytics:
# CNZZ count
#cnzz_siteid:
# Make duoshuo show UA
# user_id must NOT be null when admin_enable is true!
# you can visit http://dev.duoshuo.com get duoshuo user id.
duoshuo_info:
ua_enable: true
admin_enable: ture
user_id: 6343395544286626562
admin_nickname: 博主
# Facebook SDK Support.
# https://github.com/iissnan/hexo-theme-next/pull/410
facebook_sdk:
enable: false
app_id: #<app_id>
fb_admin: #<user_id>
like_button: #true
webmaster: #true
# Facebook comments plugin
# This plugin depends on Facebook SDK.
# If facebook_sdk.enable is false, Facebook comments plugin is unavailable.
facebook_comments_plugin:
enable: false
num_of_posts: 10 # min posts num is 1
width: 100% # default width is 550px
scheme: light # default scheme is light (light or dark)
# Show number of visitors to each article.
# You can visit https://leancloud.cn get AppID and AppKey.
leancloud_visitors:
enable: true
app_id: zieuxKa4IjAP6VgxxXXXXXXXXXXXXXX
app_key: MHGN54IEuofFNXXXXXXXXXXXXX
#这里的id和key请用自己的
# Show PV/UV of the website/page with busuanzi. 不算子网站访问量统计
# Get more information on http://ibruce.info/2015/04/04/busuanzi/
#busuanzi_count:
# count values only if the other configs are false
# enable: true
# custom uv span for the whole site
# site_uv: true
# site_uv_header: 你是第
# site_uv_footer: 个小伙伴
# custom pv span for the whole site
# site_pv: true
# site_pv_header: 本站总浏览
# site_pv_footer: 次
# custom pv span for one page only
# page_pv: true
# page_pv_header: 热度
# page_pv_footer: ℃
# Tencent analytics ID
# tencent_analytics:
# Enable baidu push so that the blog will push the url to baidu automatically which is very helpful for SEO
baidu_push: true
# Google Calendar
# Share your recent schedule to others via calendar page
#
# API Documentation:
# https://developers.google.com/google-apps/calendar/v3/reference/events/list
calendar:
enable: false
calendar_id: <required>
api_key: <required>
orderBy: startTime
offsetMax: 24
offsetMin: 4
timeZone:
showDeleted: false
singleEvents: true
maxResults: 250
#! ---------------------------------------------------------------
#! DO NOT EDIT THE FOLLOWING SETTINGS
#! UNLESS YOU KNOW WHAT YOU ARE DOING
#! ---------------------------------------------------------------
# Motion
use_motion: true
# Fancybox
fancybox: true
# Script Vendors.
# Set a CDN address for the vendor you want to customize.
# For example
# jquery: https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js
# Be aware that you should use the same version as internal ones to avoid potential problems.
# Please use the https protocol of CDN files when you enable https on your site.
vendors:
# Internal path prefix. Please do not edit it. 5.0以下版本如果打开网页空白,就把vendors文件夹改名为lib,这里对应改。
_internal: lib
# Internal version: 2.1.3
jquery:
# Internal version: 2.1.5
# See: http://fancyapps.com/fancybox/
fancybox:
fancybox_css:
# Internal version: 1.0.6
# See: https://github.com/ftlabs/fastclick
fastclick:
# Internal version: 1.9.7
# See: https://github.com/tuupola/jquery_lazyload
lazyload:
# Internal version: 1.2.1
# See: http://VelocityJS.org
velocity:
# Internal version: 1.2.1
# See: http://VelocityJS.org
velocity_ui:
# Internal version: 0.7.9
# See: https://faisalman.github.io/ua-parser-js/
ua_parser:
# Internal version: 4.4.0
# See: http://fontawesome.io/
fontawesome:
# 多说热评文章 true 或者 false
duoshuo_hotartical: true
# Assets
css: css
js: js
images: images
# Theme version
version: 5.1.0
安装插件
hexo支持插件,可以直接通过命令行安装即可:npm install **plugin-name** --save
更新插件
npm update
卸载插件
npm uninstall **plugin-name**
下面推荐几个常用的插件:
feed插件:npm install hexo-generator-feed --save
站点地图:npm install hexo-generator-sitemap --save
百度站点地图:npm install hexo-generator-baidu-sitemap --save
自由定制
文章字数、阅读时长统计
修改post.swig模板
模板位置:themes\next\layout\_macro\post.swig
安装hexo-wordcount插件
npm install hexo-wordcount --save
通过以上安装后,你可以在你的模板文件后者.md文件加入以下相关的标签实现本插件的功能
字数统计:WordCount
<span class="post-count">{{ wordcount(post.content) }}</span>
阅读时长预计:Min2Read
<span class="post-count">{{ min2read(post.content) }}</span>
总字数统计: TotalCount
<span class="post-count">{{ totalcount(site, '0,0.0a') }}</span>
插入的代码以下:
{% if not is_index and theme.facebook_sdk.enable and theme.facebook_sdk.like_button %}
|
<div class="fb-like" data-layout="button_count" data-share="true"></div>
{% endif %}
<!--从这里插入代码,上边是Facebook的代码-->
<!--leancloud文章阅读量统计(主题默认已经添加)参考:http://www.joryhe.com/2016-05-29-how_to_create_leancloud_read_Counter.html-->
{# LeanCould PageView #}
{% if theme.leancloud_visitors.enable %}
<span id="{{ url_for(post.path) }}" class="leancloud_visitors" data-flag-title="{{ post.title }}">
|
<span class="post-meta-item-icon">
<i class="fa fa-eye"></i>
</span>
<span class="post-meta-item-text">{{__('post.visitors')}} </span>
<span class="leancloud-visitors-count"></span>
</span>
{% endif %}
<!--字数、阅读时长统计-->
<span class="post-time">
|
<span class="post-meta-item-icon">
<i class="fa fa-calendar-o"></i>
</span>
<span class="post-meta-item-text">字数统计:</span>
<span class="post-count">{{ wordcount(post.content) }}(字)</span>
</span>
<span class="post-time">
|
<span class="post-meta-item-icon">
<i class="fa fa-calendar-o"></i>
</span>
<span class="post-meta-item-text">阅读时长:</span>
<span class="post-count">{{ min2read(post.content) }}(分)</span>
</span>
<!--不蒜子网站访问量统计(主题默认已经添加),如果出现排班错位请忽略,下面用官网的方法实现-->
{% if not is_index and theme.busuanzi_count.enable and theme.busuanzi_count.page_pv %}
|
<span class="page-pv">{{ theme.busuanzi_count.page_pv_header }}
<span class="busuanzi-value" id="busuanzi_value_page_pv" ></span>{{ theme.busuanzi_count.page_pv_footer }}
</span>
{% endif %}
文章结语
修改post.swig模板
模板位置:themes\next\layout\_macro\post.swig
{% if post.type === 'picture' %}
<a href="{{ url_for(post.path) }}">{{ post.content }}</a>
{% else %}
{{ post.content }}
{% endif %}
{% endif %}
{% else %}
{{ post.content }}
<!--这里是每篇文章的尾巴,从这里开始插入代码-->
<html>
<body>
<h2 id="结语"><a href="#结语" class="headerlink" title="结语"></a>结语</h2>
<blockquote><p>如果您觉得本博客还不错,欢迎继续关注本博客,欢迎多提宝贵意见,非常感谢!</p></blockquote></div>
<div style="text-align:center;color:#ccc;font-size:14px;">------本文结束<i class="fa fa-paw"></i>感谢阅读------</div>
</body>
</html>
<!--下面这部分左边有框,但位置不够就会排班错乱
<html>
<body>
<h1>结语</h1>
<p><h5><a href="#" onclick="go_my_site()" rel="external">Leo Lan Blog Share For you!</a></h5></p>
<p>如果您觉得本博客还不错,欢迎继续关注Leo Lan的博客,欢迎多提宝贵意见,非常感谢!</p>
</body>
</html>
<html>
<body>
<h2 id="结语"><a href="#结语" class="headerlink" title="结语"></a>结语</h2>
<blockquote><p>如果您觉得本博客还不错,欢迎收藏书签,欢迎多提宝贵意见,非常感谢!</p>
<footer><strong>Welcome to LeoLan'S BLOG</strong>
<cite><a href="#" onclick="go_my_site()" rel="external">Leo Lan Blog Share For you!</a></cite></footer></blockquote></div>
</body>
</html>
-->
文章底部的标签云锚点
修改post.swig模板
模板位置:themes\next\layout\_macro\post.swig
<!--这是文章底部标签云锚点,不喜欢就注释掉
<footer class="post-footer">
{% if post.tags and post.tags.length and not is_index %}
<div class="post-tags">
{% for tag in post.tags %}
<a href="{{ url_for(tag.path) }}" rel="tag"># {{ tag.name }}</a>
{% endfor %}
</div>
{% endif %}
-->
不蒜子网站访问量统计、删除NEXT主题自带尾巴
修改footer.swig模板
模板位置:themes\next\layout\_partials\footer.swig
官网:http://service.ibruce.info
http://ibruce.info/2015/04/04/busuanzi/
把代码改成这个样子,busuanzi_value_site_uv
中,uv和pv功能是不一样的。
<div class="powered-by">
{{ __('footer.powered', '') }}
</div>
<div class="theme-info">
{{ __('footer.theme') }}<span id="busuanzi_value_site_uv"></span>位小伙伴
</div>
<script async src="//dn-lbstatics.qbox.me/busuanzi/2.3/busuanzi.pure.mini.js">
</script>
同时更改语言文件中对应的名称
编辑:themes\languages\zh_Hans.yml
footer:
powered: 本站总访问量<span id="busuanzi_value_site_pv"></span>
theme: 您是第
#<a target="_blank" href="http://www.miitbeian.gov.cn/">粤ICP备16026009号-2</a>
开源许可
知识共享署名4.0 国际许可协议:https://creativecommons.org/choose
居中模块
把要居中的模块、代码、文字、插件、外链等,放在下面代码的中间即可居中显示。
<!-- HTML方式: 直接在 Markdown 文件中编写 HTML 来调用 -->
<!-- 其中 class="blockquote-center" 是必须的 -->
<blockquote class="blockquote-center">优秀的人,不是不合群,而是他们合群的人里面没有你</blockquote>
或者
<!-- 标签 方式,要求版本在0.4.5或以上 -->
{% centerquote %}优秀的人,不是不合群,而是他们合群的人里面没有你{% endcenterquote %}
或者
<!-- 标签别名 -->
{% cq %} 优秀的人,不是不合群,而是他们合群的人里面没有你 {% endcq %}
留言板
编辑:themes\languages\zh_Hans.yml
title: #这里增加
guestbook: 留言板
menu: #这里增加
guestbook: 给我留言
在站点source目录下新建guestbook文件夹,里面新建index.md文件,内容如下(其中调用HTML代码,插入了一个播放器):
---
title: 留言板
date: 2016-11-14 17:21:10
---
<blockquote class="blockquote-center">
<!--网易云音乐的http地址,改为https,用https加载http资源会被屏蔽-->
<h2>Stay Hungry,Stay Foolish</h2>
<!--
<embed src="https://music.163.com/style/swf/widget.swf?sid=34971711&type=1&auto=1&width=310&height=90" width="330" height="110" allowNetworking="all"></embed>
<iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=330 height=110 src="https://music.163.com/outchain/player?type=1&id=34971711&auto=1&height=90"></iframe>
<embed src="https://music.163.com/style/swf/widget.swf?sid=32507038&type=2&auto=1&width=320&height=66" width="340" height="86" allowNetworking="all"></embed>
-->
<!--这里是插入视频的方法
<iframe src="//www.youtube.com/embed/JMl8cQjBfqk" width="560" height="315" frameborder="0" allowfullscreen></iframe>-->
</blockquote>
<br/>
<span id="yu-2">最近访客</span>
<div class="ds-recent-visitors" data-num-items="39" data-avatar-size="40" id="ds-recent-visitors"></div>
<br/>
编辑主题配置文件:_config.yml
menu: #在这里加上
guestbook: /guestbook
文章置顶
修改 **hexo-generator-index **插件
修改文件前先备份文件:node_modules/hexo-generator-index/lib/generator.js
把里面的内容替换为:
'use strict';
var pagination = require('hexo-pagination');
module.exports = function(locals){
var config = this.config;
var posts = locals.posts;
posts.data = posts.data.sort(function(a, b) {
if(a.top && b.top) { // 两篇文章top都有定义
if(a.top == b.top) return b.date - a.date; // 若top值一样则按照文章日期降序排
else return b.top - a.top; // 否则按照top值降序排
}
else if(a.top && !b.top) { // 以下是只有一篇文章top有定义,那么将有top的排在前面(这里用异或操作居然不行233)
return -1;
}
else if(!a.top && b.top) {
return 1;
}
else return b.date - a.date; // 都没定义按照文章日期降序排
});
var paginationDir = config.pagination_dir || 'page';
return pagination('', posts, {
perPage: config.index_generator.per_page,
layout: ['index', 'archive'],
format: paginationDir + '/%d/',
data: {
__index: true
}
});
};
然后再每篇文章的yum头信息中增加top: XXX即可,值越大越靠前。
如果只置顶一两篇文章可以用简单的方法,把日期2016年改为2116年或其他远大于2016的数字,数字太小的话如2018年,到了2018年就不置顶了。
字体
关于字体的修改开始时遇到很多问题,到后来才找到了原因,是因为引用的字体在www.google.com/fonts(默认是Google字体库)里找不到,或者是付费的字体。修改为免费的字体就正常使用了。打开Google Fonts,右上角查找你要的字体,能搜索到的话把全名复制下来,填写在配置文件中。
修改**\themes\next_config.yml找到Font Settings**
# Font Settings
# - Find fonts on Google Fonts (https://www.google.com/fonts)
# - All fonts set here will have the following styles:
# light, light italic, normal, normal intalic, bold, bold italic
# - Be aware that setting too much fonts will cause site running slowly
# - Introduce in 5.0.1
# ---------------------------------------------------------------
font:
enable: true
# Uri of fonts host. E.g. //fonts.googleapis.com (Default)
# 外链字体库地址,例如 //fonts.googleapis.com (默认值)
加载慢的话搜索fonts.googleapis.com即可找到替换地址,这里注意使用的地址中包含了下面设置的字体,没有的话是默认字体。
host:
#fonts.css.network
# Global font settings used on <body> element.
# 全局字体,应用在 <body> 元素上
global:
# external: true will load this font family from host.
external: true
family: Lato
#Monda
# Font settings for Headlines (h1, h2, h3, h4, h5, h6)
# Fallback to `global` font settings.
# 标题字体 (h1, h2, h3, h4, h5, h6)
headings:
external: true
family:
# Font settings for posts
# Fallback to `global` font settings.
# 文章字体
posts:
external: true
family: Roboto
# Font settings for Logo
# Fallback to `global` font settings.
# The `size` option use `px` as unit
# Logo 字体
logo:
external: true
family: Georgia
size: 24
# Font settings for <code> and code blocks.
# 代码字体,应用于 <code> 以及代码块
codes:
external: true
family:
size: 14
#字体大小直接加个size: 写就行,单位是px,不填写则为默认大小。
#"Source Code Pro", "PT Mono", "DejaVu Sans Mono",
参考:
Next主题设置字体 | 如何引用google字体
如果要在文章中临时引用特殊的字体格式,可以直接在 Markdown 文档中使用 html 语法
<font size=4 > 这里输入文字,自定义大小 </font>
<font color="#FF0000"> 这里输入文字,自定义颜色的字体 </font>
404页面
404页面可以自己写,也可以引用腾讯公益404页面。
这是嵌入到主题中的404页面而不是新开一个页面;在站点目录source目录下新建404.html文件,粘贴以下代码:
<!DOCTYPE HTML>
<html>
<head>
<title>404 - arao'blog</title>
<meta name="description" content="404错误,页面不存在!">
<meta http-equiv="content-type" content="text/html;charset=utf-8;"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="robots" content="all" />
<meta name="robots" content="index,follow"/>
</head>
<body>
<script type="text/javascript" src="http://qzonestyle.gtimg.cn/qzone_v6/lostchild/search_children.js" charset="utf-8"></script>
</body>
</html>
打赏
修改reward.swig模板
模板位置:themes\next\layout\_macro\reward.swig
直接全部替换代码,这段代码是圆形的打赏按钮,二维码左右排列。
{% if theme.alipay or theme.wechatpay %}
<div style="padding: 10px 0; margin: 20px auto; width: 90%; text-align: center">
<div style="margin-bottom: 10px;font-size: 16px;font-weight: 600;">您的支持将鼓励我继续创作,非常感谢!</div>
<button id="rewardButton", disable="enable", onclick="var qr = document.getElementById('QR'); if (qr.style.display === 'none') {qr.style.display='block';} else {qr.style.display='none'}", style="cursor: pointer; border: 0; outline: 0; border-radius: 100%; padding: 0; margin: 0; letter-spacing: normal; text-transform: none; text-indent: 0px; text-shadow: none">
<span onmouseover="this.style.color='rgb(236,96,0)';this.style.background='rgb(204,204,204)'" onMouseOut="this.style.color='#fff';this.style.background='rgb(236,96,0)'" style="display: inline-block; width: 70px; height: 70px; border-radius: 100%; line-height: 81px; color: #fff; font: 400 35px/75px 'microsofty'; background: rgb(236,96,0)">赏</span>
</button>
<div id="QR" style="display: none;">
{% if theme.alipay %}
<div id="alipay" style="display: inline-block">
<img id="alipay_qr" src="{{ theme.alipay }}" alt="{{ theme.author }} Alipay" style="width: 200px; max-width: 100%; display: inline-block"/>
<p>支付宝打赏</p>
</div>
{% endif %}
{% if theme.wechatpay %}
<div id="wechat" style="display: inline-block">
<img id="wechat_qr" src="{{ theme.wechatpay }}" alt="{{ theme.author }} WeChat Pay" style="width: 200px; max-width: 100%; display: inline-block"/>
<p>微信打赏</p>
</div>
{% endif %}
</div>
</div>
{% endif %}
最近访客
模板位置:themes\next\layout\_macro\reward.swig
在最后换行加上这段代码。
<h3 id="最近访客"><a href="#最近访客" class="headerlink" title="最近访客"></a>最近访客</h3><div class="ds-recent-visitors" data-num-items="28" data-avatar-size="42" id="ds-recent-visitors"></div>
class=“ds-recent-visitors” //指定显示最近访客容器
data-num-items=“28” //显示最近访客的数量
data-avatar-size=“42” //显示最近访客头像尺寸大小
id=“ds-recent-visitors” //为了调节最近访客样式加的
这样,每个页面都有最近访客了(只能看到注册了多说账户的用户)
SEO
网站地图
安装hexo的sitemap网站地图生成插件
npm install hexo-generator-sitemap --save
npm install hexo-generator-baidu-sitemap --save
在你的hexo站点的_config.yml添加下面的代码
# hexo sitemap网站地图
sitemap:
path: sitemap.xml
baidusitemap:
path: baidusitemap.xml #如果报path错误就把前面增加baidu
配置成功后,hexo编译时会在hexo站点根目录生成sitemap.xml和baidusitemap.xml
其中sitemap.xml适合提交给谷歌搜素引擎,baidusitemap.xml适合提交百度搜索引擎。
蜘蛛协议
在robots.txt中添加站点地图文件,如下(没有robots.txt就在站点目录source下新建):
# hexo robots.txt
User-agent: *
Allow: /
Allow: /archives/
Disallow: /lib/
Disallow: /js/
Disallow: /css/
Disallow: /fonts/
Disallow: /fancybox/
Sitemap: http://www.leolan.top/sitemap.xml
Sitemap: http://www.leolan.top/baidusitemap.xml
NexT主题,首页title的优化
感谢arao的教程
修改\themes\next\layout\index.swig文件,将下面代码
{% block title %} {{ config.title }} {% endblock %}
改为
{% block title %} {{ config.title }} - {{ theme.description }} {% endblock %}
这时候你的首页标题会更符合网站名称 - 网站描述这习惯。
把关键词(在主题配置文件**_config.yml中设置keywords:**)也显示在Title标题里,可改成:
{% block title %} {{ theme.keywords }} - {{ config.title }} - {{ theme.description }} {% endblock %}
或(排列顺序看自己喜欢)
{% block title %} {{ config.title }} - {{ theme.keywords }} {% endblock %}
注意:别堆砌关键字,整个标题一般不超过80个字符,可以通过chinaz的seo综合查询检查。
限制出站链接
网络爬虫会在当前页面搜索所有的链接,故有可能跳到别的网站。nofollow 标签是由谷歌领头创新的一个 “反垃圾链接” 的标签,并被各大搜索引擎广泛支持,引用 nofollow 标签的目的是:用于指示搜索引擎不要追踪(即抓取)网页上的带有 nofollow 属性的任何出站链接,以减少垃圾链接的分散网站权重。
npm install hexo-autonofollow --save
在 **站点配置文件 **中添加如下代码。
nofollow:
enable: true
exclude: # 例外的链接,可将友情链接放置此处
- exclude1.com
- exclude2.com
文章链接唯一化
也许你会数次更改文章题目或者变更文章发布时间,在默认设置下,文章链接都会改变,不利于搜索引擎收录,也不利于分享。唯一永久链接才是更好的选择。安装此插件后,不要在 hexo s
模式下更改文章文件名,否则文章将成空白,需要重新hexo s
才行。
npm install hexo-abbrlink --save
在 站点配置文件 中查找代码 permalink:,将其更改为:
permalink: posts/:abbrlink/ # “posts/” 可自行更换
在 站点配置文件 中添加如下代码:
# abbrlink config
abbrlink:
alg: crc32 # 算法:crc16(default) and crc32
rep: hex # 进制:dec(default) and hex
永久链接有下面4种组合
crc16 & hex
https://post.zz173.com/posts/66c8.html
crc16 & dec
https://post.zz173.com/posts/65535.html
crc32 & hex
https://post.zz173.com/posts/8ddf18fb.html
crc32 & dec
https://post.zz173.com/posts/1690090958.html
百度网址推送
修改baidu-push.swig模板
模板位置:themes\next\layout\_scripts\baidu-push.swig
没有此文件就新建
{% if theme.baidu_push %}
<script>
(function(){
var bp = document.createElement('script');
var curProtocol = window.location.protocol.split(':')[0];
if (curProtocol === 'https') {
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
}
else {
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
}
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(bp, s);
})();
</script>
{% endif %}
编辑站点配置文件:_config.yml
加上以下代码:
baidu_url_submit: #百度链接推送,推送刚刚生成的永久链接
count: 5 ## 比如3,代表提交最新的三个链接
host: www.leolan.top ## 在百度站长平台中注册的域名
token: kZ5xboXBFPxQ0g7N ## 请注意这是您的秘钥, 请不要发布在公众仓库里!
path: /baidu_urls.txt ## 文本文档的地址, 新链接会保存在此文本文档里
主动推送新链接
解决百度爬虫被禁止访问的问题,提升网站收录质量和速度。
npm install hexo-baidu-url-submit --save
在 站点配置文件 中添加如下代码。
baidu_url_submit:
count: 5 ## 比如3,代表提交最新的三个链接
host: blog.tangxiaozhu.com ## 在百度站长平台中注册的域名
token: ## 请注意这是您的秘钥, 请不要发布在公众仓库里!
path: baidu_urls.txt ## 文本文档的地址, 新链接会保存在此文本文档里
向百度提交所有链接
这是LoveNight的脚本,先本地安装Python。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: LoveNight
# @Date: 2015-11-16 20:45:59
# @Last Modified by: lulee007
# @Last Modified time: 2016-01-16 21:06:50
import os
import sys
import json
from bs4 import BeautifulSoup as BS
import requests
import codecs
"""
hexo 博客专用,向百度站长平台提交所有网址
本脚本必须放在 hexo 博客的根目录下执行!需要已安装生成百度站点地图的插件。
百度站长平台提交链接:http://zhanzhang.baidu.com/linksubmit/index
主动推送:最为快速的提交方式,推荐您将站点当天新产出链接立即通过此方式推送给百度,以保证新链接可以及时被百度收录。
从中找到自己的接口调用地址
"""
url = 'http://data.zz.baidu.com/urls?site=leolan.top&token=kZ5xboXBFPxQ0g7N' #这里是你的百度推送地址。
baidu_sitemap = os.path.join(sys.path[0], 'public', 'baidusitemap.xml')
google_sitemap = os.path.join(sys.path[0], 'public', 'baidusitemap_zhanwei.xml')
# sitemap = [baidu_sitemap, google_sitemap]
sitemap = [baidu_sitemap]
# assert (os.path.exists(baidu_sitemap) or os.path.exists(
# google_sitemap)), "没找到任何网站地图,请检查!"
assert os.path.exists(baidu_sitemap) , "没找到任何网站地图,请检查!"
# 从站点地图中读取网址列表
def getUrls():
urls = []
for _ in sitemap:
if os.path.exists(_):
with codecs.open(_, "r", "utf-8") as f:
xml = f.read()
soup = BS(xml, "xml")
tags = soup.find_all("loc")
urls += [x.string for x in tags]
if _ == baidu_sitemap:
tags = soup.find_all("breadCrumb", url=True)
print("")
urls += [x["url"] for x in tags]
return urls
# POST提交网址列表
def postUrls(urls):
urls = set(urls) # 先去重
print("一共提取出 %s 个网址" % len(urls))
data = "\n".join(urls)
return requests.post(url, data=data).text
if __name__ == '__main__':
urls = getUrls()
result = postUrls(urls)
print("提交结果:")
print(result)
语法优化
默认的语法无法添加角标(footnotes)以注明引用,这种可来回跳转的引用还是挺有用处的。
npm install hexo-footnotes --save
安装完毕请确认是否生效,如不生效,在 站点配置文件 中添加如下代码以手动启用:
plugins:
- hexo-footnotes
页面留白(扩大显示范围)
浏览器留白太多,代码块看起来比较麻烦,想让更多空间显示文章。
NexT 对于内容的宽度的设定如下:
700px,当屏幕宽度 < 1600px
900px,当屏幕宽度 >= 1600px
移动设备下,宽度自适应
如果你需要修改内容的宽度,同样需要编辑样式文件。 编辑主题的 source/css/_variables/custom.styl 文件,新增变量:
// 修改成你期望的宽度,默认700px
$content-desktop = 700px
// 当视窗超过 1600px 后的宽度,默认900px
$content-desktop-large = 900px
如果主题风格选择的是Pisces;那么同时还要修改header 的宽度、**.main-inner **的宽度以及 **.content-wrap **的宽度(如果没什么问题可以不修改custom.styl文件)。
编辑文件:source/css/_schemes/Picses/_layout.styl
//可以使用百分比,也可以是像素,80%是比较合适的。
//开头header中修改为80%
header{ width: 80%; }
//.container中系应该为80%
.main-inner { width: 80%; }
//最后修改.content-wrap
.content-wrap { width: calc(100% - 260px); }
多说评论框自定义css
感谢arao的代码
进入多说管理后台
把下面代码粘贴进去保存
#ds-reset .ds-avatar img,
#ds-recent-visitors .ds-avatar img {
width: 54px;
height: 54px; /*设置图像的长和宽,这里要根据自己的评论框情况更改*/
border-radius: 27px; /*设置图像圆角效果,在这里我直接设置了超过width/2的像素,即为圆形了*/
-webkit-border-radius: 27px; /*圆角效果:兼容webkit浏览器*/
-moz-border-radius: 27px;
box-shadow: inset 0 -1px 0 #3333sf; /*设置图像阴影效果*/
-webkit-box-shadow: inset 0 -1px 0 #3333sf;
-webkit-transition: 0.4s;
-webkit-transition: -webkit-transform 0.4s ease-out;
transition: transform 0.4s ease-out; /*变化时间设置为0.4秒(变化动作即为下面的图像旋转360读)*/
-moz-transition: -moz-transform 0.4s ease-out;
}
#ds-reset .ds-avatar img:hover,
#ds-recent-visitors .ds-avatar img:hover {
/*设置鼠标悬浮在头像时的CSS样式*/ box-shadow: 0 0 10px #fff;
rgba(255, 255, 255, .6), inset 0 0 20px rgba(255, 255, 255, 1);
-webkit-box-shadow: 0 0 10px #fff;
rgba(255, 255, 255, .6), inset 0 0 20px rgba(255, 255, 255, 1);
transform: rotateZ(360deg); /*图像旋转360度*/
-webkit-transform: rotateZ(360deg);
-moz-transform: rotateZ(360deg);
}
#ds-thread #ds-reset .ds-textarea-wrapper textarea {
background: url(http://ww4.sinaimg.cn/small/649a4735gw1et7gnhy5fej20zk0m8q3q.jpg) right no-repeat;
}
#ds-recent-visitors .ds-avatar {
float: left
}
/*隐藏多说底部版权*/
#ds-thread #ds-reset .ds-powered-by {
display: none;
}
解决多说评论不稳定、加载慢
把多说评论依赖的embed.js放置底部,修改
themes/next/layout/_scripts/third-party/comments/duoshuo.swig文件
将
(document.getElementsByTagName('head')[0]
修改为
(document.getElementById('footer')
多说userid
主题配置中需要用到user_id
duoshuo_info:
ua_enable: true
admin_enable: ture
user_id: 6343395544286626562
admin_nickname: 博主
动态背景
修改**_layout.swig**模板
模板位置:themes\next\layout\_layout.swig
在末尾
评论区