From a4b8069109bc8bbb9e3f42908c1836e63cdcef2c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=BB=93=E5=8F=91=E5=8F=97=E9=95=BF=E7=94=9F?=
Date: Wed, 9 May 2018 15:57:26 +0800
Subject: [PATCH] =?UTF-8?q?hexo=E6=90=AD=E5=BB=BA=E5=8D=9A=E5=AE=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
_config.yml | 7 +
...&函数.md => 2.2、shell编程(3)-流程控制与函数.md} | 2 +-
source/_posts/前端杂烩/Hexo搭建个人博客.md | 108 +++++++++++
.../_posts/前端杂烩/Hexo站点实现站内搜索.md | 175 ++++++++++++++++++
source/images/前端杂烩/hexo_server.png | Bin 0 -> 11331 bytes
themes/hexo-theme-xups/_config.yml | 7 -
6 files changed, 291 insertions(+), 8 deletions(-)
rename source/_posts/linux/{2.2、shell编程(3)-流程控制&函数.md => 2.2、shell编程(3)-流程控制与函数.md} (98%)
create mode 100644 source/_posts/前端杂烩/Hexo搭建个人博客.md
create mode 100644 source/_posts/前端杂烩/Hexo站点实现站内搜索.md
create mode 100644 source/images/前端杂烩/hexo_server.png
diff --git a/_config.yml b/_config.yml
index e980624..d1ae6cd 100644
--- a/_config.yml
+++ b/_config.yml
@@ -80,6 +80,13 @@ pagination_dir: page
## Themes: https://hexo.io/themes/
theme: hexo-theme-xups
+#----------------------------
+# 搜索
+#----------------------------
+search:
+ path: search.xml
+ field: all
+
# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
diff --git a/source/_posts/linux/2.2、shell编程(3)-流程控制&函数.md b/source/_posts/linux/2.2、shell编程(3)-流程控制与函数.md
similarity index 98%
rename from source/_posts/linux/2.2、shell编程(3)-流程控制&函数.md
rename to source/_posts/linux/2.2、shell编程(3)-流程控制与函数.md
index 8ea26c2..5e51434 100644
--- a/source/_posts/linux/2.2、shell编程(3)-流程控制&函数.md
+++ b/source/_posts/linux/2.2、shell编程(3)-流程控制与函数.md
@@ -1,5 +1,5 @@
---
-title: 2.2、shell编程(3)-流程控制&函数
+title: 2.2、shell编程(3)-流程控制与函数
date: 2018-5-6 00:52:22
tags:
- linux
diff --git a/source/_posts/前端杂烩/Hexo搭建个人博客.md b/source/_posts/前端杂烩/Hexo搭建个人博客.md
new file mode 100644
index 0000000..11abe2c
--- /dev/null
+++ b/source/_posts/前端杂烩/Hexo搭建个人博客.md
@@ -0,0 +1,108 @@
+---
+title: Hexo搭建个人博客
+date: 2018-5-9 09:43:01
+tags:
+ - Hexo
+categories:
+ - 前端杂烩
+---
+
+> Hexo 是一个快速、简洁且高效的博客框架,需要nodejs环境运行
+使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可生成静态网页。
+
+
+### 安装nodejs
+由于hexo是使用JavaScript编写
+所以首先需要nodejs环境 , 可以在官网下载运行包, 或者下载源代码在linux下编译
+
+### 安装脚手架工具与初始化
+```bash
+npm install -g hexo-cli
+hexo init my_blog
+```
+这是hexo官方提供的脚手架工具 , 可以实现快速生成一个博客模板
+其中的`_config.yml`是博客的基础配置文件
+
+### 启动服务
+服务默认在4000端口启动 , 如果要修改启动端口 , 需要在`config.yml`当中添加
+```yml
+server:
+ port: 6603
+ compress: true
+ header: true
+```
+启动服务
+```bash
+hexo server
+```
+
+之后就可以用浏览器访问了
+
+### 编写文章
+Hexo 有三种默认布局:post、page 和 draft,它们分别对应不同的路径
+| 布局 | 路径 |
+|-----|----|
+|post|source/_posts|
+|page|source|
+|draft|source/_drafts|
+
+博客目录初始化完成之后 , 其中的source就是文章目录
+我们可以直接在其中创建文件 , `_posts`里面就是正式提交的文章
+实际访问的路径可以在_config.yml当中的`permalink`定义
+可以有下列值
+| 变量 | 描述 |
+|----|----|
+|:title|标题(小写,空格将会被替换为短杠)|
+|:year|建立的年份,比如, 2015|
+|:month|建立的月份(有前导零),比如, 04|
+|:i_month|建立的月份(无前导零),比如, 4|
+|:day|建立的日期(有前导零),比如, 07|
+|:i_day|建立的日期(无前导零),比如, 7|
+
+创建一篇新文章
+```bash
+hexo new [layout]
+#比如
+hexo new post 测试文章
+```
+执行之后会自动在_posts下面创建一个新文件`测试文章.md`
+> 这里的操作只是创建一个文件 , 我们当然也可以手动创建文件
+
+这里实际是使用`scaffolds`里面的`post.md`模板来创建文件的
+我们可以修改这个模板的内容 , 或者创建自定义的布局模板
+
+
+#### 自定义页面
+可以在source当中创建一个目录作为自定义的目录
+比如创建一个about目录 , 其中写一个`index.md`文件
+实际访问的路径就是`http://localhost:4000/about/`
+
+#### 图片引用
+可以把图片直接放在source下面的某个目录当中
+比如有图片`source/image/test.png`
+就可以在md文件中这样引用
+```markdown
+
+```
+在实际访问的时候就能产生正确的图片访问路径
+
+#### 标签与分类
+在每篇文章开头的描述信息当中 , 除了标题 日期之外 , 可以指定该文章的分类和标签 ( 注意开头不能有空行 )
+```yml
+---
+title: 测试文章
+date: 2018-5-9 09:43:01
+tags:
+ - 标签1
+ - 标签2
+categories:
+ - 分类1
+ - 子分类
+---
+```
+hexo不支持多个同级分类 , 分类当中若有多项会被处理成子分类
+
+### 主题
+hexo支持自定义主题 , 官方有很多开源的主题
+可以直接放在`themes`目录下
+然后在_config.yml当中修改`theme`为对应的名称即可
\ No newline at end of file
diff --git a/source/_posts/前端杂烩/Hexo站点实现站内搜索.md b/source/_posts/前端杂烩/Hexo站点实现站内搜索.md
new file mode 100644
index 0000000..3298419
--- /dev/null
+++ b/source/_posts/前端杂烩/Hexo站点实现站内搜索.md
@@ -0,0 +1,175 @@
+---
+title: Hexo站点实现站内搜索
+date: 2018-5-9 14:44:53
+tags:
+ - Hexo
+categories:
+ - 前端杂烩
+---
+
+在hexo博客中 , 可以添加站内文章搜索的支持
+但是需要生成所有文章的索引
+安装hexo官方提供的插件
+```bash
+npm install hexo-generator-search --save
+```
+
+默认只索引post , 要索引所有文章 , 需要在_config.yml当中配置
+```yml
+search:
+ path: search.xml
+ field: all
+```
+
+之后访问`/search.xml`就可以获取到文章的索引了
+大致是如下结构
+```xml
+
+
+ CSS布局(4)-grid
+
+ /文章URL地址/
+
+ 这里是文章内容
+ ]]>
+
+
+ 分类1
+
+
+ 标签1
+ 标签2
+
+
+ ...
+
+```
+其中的一个entry是一篇文章的信息
+可以在JS当中使用ajax获取到这段XML文本 , 然后进行解析处理 , 从而做出站内搜索的功能
+需要注意的是content部分是html文本 , 在处理当中需要把html标签去除
+
+以下是借助Vue实现的自动渲染搜索结果列表的代码
+```javascript
+(function(){
+var articleDatas = null;
+var resultDiv = null;
+new Vue({
+ el: "#search-box",
+ data: {
+ queryText: null, //搜索的关键字文本
+ searchResult: [] //搜索结果
+ },
+ mounted: function() {
+ axios({ //调用ajax获取文章索引信息
+ url: "/search.xml"
+ }).then(function(response){
+ var xmlDoms = null
+ if(window.DOMParser) {
+ var parser = new DOMParser()
+ xmlDoms = parser.parseFromString(response.data, "application/xml")
+ } else { // IE浏览器
+ var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
+ xmlDoc.async = false;
+ xmlDoms = xmlDoc.loadXML(response.data);
+ }
+ //找出所有文章的标题 正文 URL
+ articleDatas = Array.prototype.map.call(xmlDoms.getElementsByTagName("entry"), function(item){
+ return {
+ title: item.getElementsByTagName("title")[0].innerHTML,
+ content: item.getElementsByTagName("content")[0].innerHTML,
+ url: item.getElementsByTagName("url")[0].innerHTML,
+ }
+ })
+ resultDiv = document.getElementById("search-result-box")
+ });
+ },
+ watch: {
+ queryText: function(newVal, oldVal) {
+ this.searchResult.length = 0;
+ // 控制搜索结果框的显示与隐藏
+ if(newVal && newVal.trim() && articleDatas) {
+ resultDiv.style.display = "block"
+ } else {
+ resultDiv.style.display = "none"
+ return
+ }
+ //多关键字分别匹配
+ var keywords = newVal.trim().toLowerCase().split(/[\s\-]+/);
+ var _this = this;
+ articleDatas.forEach(function(article){
+ var isMatch = true;
+ var title = article.title.trim().toLowerCase();
+ var content = article.content.trim().replace(/<[^>]+>/g,"").toLowerCase();
+ var index_title = -1;
+ var index_content = -1;
+ var first_occur = -1; //关键字在正文当中第一次出现的位置
+ if(title && content) {
+ keywords.forEach(function(keyword, i) {
+ index_title = title.indexOf(keyword);
+ index_content = content.indexOf(keyword);
+ if( index_title < 0 && index_content < 0 ){
+ isMatch = false;
+ } else {
+ if (index_content < 0) {
+ index_content = 0;
+ }
+ if (i == 0) {
+ first_occur = index_content;
+ }
+ }
+ });
+ }
+ if (isMatch) {
+ var resultItem = {};
+ resultItem.url = article.url;
+ resultItem.title = article.title;
+ if (first_occur >= 0) {
+ // 截取关键字前后的一段文字
+ var start = first_occur - 6;
+ var end = first_occur + 15;
+ if(start < 0){
+ start = 0;
+ }
+ if(start == 0){
+ end = 10;
+ }
+ if(end > content.length){
+ end = content.length;
+ }
+ var matchContent = content.substring(start, end);
+ // 高亮关键字
+ keywords.forEach(function(keyword){
+ var keywordReg = new RegExp(keyword, "gi");
+ matchContent = matchContent.replace(keywordReg, ""+keyword+"");
+ })
+ resultItem.matchContent = matchContent
+ }
+ _this.searchResult.push(resultItem)
+ }
+ })
+ }
+ }
+})
+})()
+```
+这里借助axios实现ajax请求 , 当然也可以用别的 , 或者使用原生的写法
+然后在页面的适当位置中编写搜索input与搜索结果框的html
+```html
+
+```
+之后编写相应的样式就可以了
diff --git a/source/images/前端杂烩/hexo_server.png b/source/images/前端杂烩/hexo_server.png
new file mode 100644
index 0000000000000000000000000000000000000000..283ca6560f549bff85c84fc1364feb08c728322b
GIT binary patch
literal 11331
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