用jekyll制作高大上的网站(二)——实际应用

最近公司要制作个文档库,直接就可以将jekyll应用到实际中。

模版使用了Jekyll Clean,这么模版相对内部简单一点,学习成本不会很大,而复杂的Minimal Mistakes就当作参考。

模版使用的CSS是Bootstrap v3.2.0版本的。为了省时点,我就直接将Bootstrap官网中的CSS和JS拉了下来。

 

一、全局配置

_config.yml文件中可以有多种设置,包括全局配置、编译选项等。

#网站根目录
baseurl: /docs# 生成的文件路径
destination: ../../dist/docs# 分页
permalink: /:year/:month/:day/:title.html
paginate: 1
paginate_path: "article/:num"# 转换
markdown: kramdown
highlighter: rouge
excerpt_separator: <!--excerpt-->gems: ['jekyll-paginate']exclude: ['open.bat','Gemfile','Gemfile.lock','Guardfile', 'gulpfile.js']# Collections
collections:common:output: truepermalink: /:collection/:titleui:output: truepermalink: /:collection/:title

1)你网站可能会放在域名的某个文件夹下面,那么根目录就要带着那个文件夹,有了“baseurl”的配置,就能方便拼接了。

2)生成的文件路径“destination”,默认是在_site文件夹中,现在放到了我自定义的文件夹下面。

3)分页中为了方便演示,每页仅显示1条记录,文章保存方式是年月日+标题,分页的目录会在“article”,分页比较特殊,下面会详解。

4)markdown就是文章编辑语言,使用了kramdown,kramdown是markdown的超级。highlighter就是代码高亮的方式,使用了rouge

5)excerpt_separator与文章摘要相关,后面也会详解。

6)collections就是定义一种新的文档类型,例如上面定义了“common”,那么在最终生成的文件中,会专门有一个文件夹,这个后面也会说明下。

  

 

 

二、集合(Collections)

1)与文章的区别

在结构中有一个_post文件夹,这个文件夹内放的就是文章列表,文件名就是按年月日+标题的方式起的,最终生成的将是年月日的文件夹。

  

如果把所有各种类型的文章都放在这个里面,管理会比较混乱,例如我有随笔、UI库、工具库等要放在网站展示。

随笔的话就可以都放在_post文件夹里,但是UI库等其他类型的文章展示的格式与其不一样、展示的方式也与其不一样。

下图是一张UI库的页面,左边放的是分类,右边放的内容。如果单独放在文件夹中,那么就可以很方便的编辑分类链接。

<h1>基础样式</h1>
<ul><li><a href="{{ site.baseurl }}/ui/typeface.html">文本</a></li><li><a href="{{ site.baseurl }}/ui/icon.html">图标</a></li><li><a href="{{ site.baseurl }}/ui/grid.html">网格</a></li><li><a href="{{ site.baseurl }}/ui/border.html">边框</a></li><li><a href="{{ site.baseurl }}/ui/layout.html">布局</a></li>
</ul>

 

2)_data

在上图的右边,还有个页面内容导航,顺便说明下:

kramdown会给h1等自动加上ID,上图中的“h1-h6”就被自动加了ID,里面有英文就用此英文,如果没有就自动生成。

原先我是将这些内容放在_include文件夹下面,_include内放的都是些页面通用部分,后面发现页面越来越多,但是内容都差不多,仅仅是数据不一样,每次都是在复制黏贴。

 

后面发现jekyll提供了个_data,可以将数据放入此处,再用for循环来输出,此文件夹内可以使用 .yml、.yaml、.json、csv 扩展名。

- id: "const"name: "普通常量"children:- id: "cookie"name: "cookie"- id: "menu"name: "menu"- id: "to"name: "分享回调中设置的TO"- id: "jsbridge"name: "JSBridge"

在sidenav.html中输出:

<nav class="bs-docs-sidebar hidden-print hidden-xs hidden-sm affix-top"><ul class="nav bs-docs-sidenav">{% for data in site.data[page.sidebar][page.sidenav] %}{% if forloop.first %}<li class="active">{% else %}<li>{% endif %}<a href="#{{ data.id }}">{{ data.name }}</a>{% if data.children %}<ul class="nav">{% for sub in data.children %}<li><a href="#{{ sub.id }}">{{ sub.name }}</a></li>{% endfor %}</ul>{% endif %}</li>{% endfor %}</ul><a href="#top" class="back-to-top">返回顶部</a>
</nav>

jekyll用的是liquid模版引擎,有自己的语法,基本常规的都有。

 

三、文章

1)分类

现在的文章都会有分类,做了区分后,文章能更有调理,下图是博客园的自定义文章分类。

jekyll的文章中要做分类,可以在头信息中设置category或categories。

---
layout: article-detail
title: demo
date: 2016-05-09 08:25:06
sidebar: article
category: tool
author: strick
---

在上图中会显示这个分类的名字,并且会输出这个分类下面文章的个数,点击这个分类名,能够跳转到相应的分类下的文章列表。

要实现这几个功能,可以通过categories的相关属性获取。

<h1>随笔分类</h1>
{% for category in site.categories %}
<ul><li><a href="{{ site.baseurl}}/category/{{ category.first }}.html">{{category.first}}({{category.last.size}})</a></li>
</ul>
{% endfor %}

 

2)文章列表

上面的分类文章列表中,会多个判断:

{% for category in site.categories %}{% if category.first == page.category %}{% for post in category.last %}
<div class="article"><div class="well"><h1 class="none"><a href="{{ site.baseurl}}{{ post.url }}">{{ post.title }} {{ post.date | date: "(%Y年%m月%d日)" }}</a></h1><div class="content">{{ post.excerpt | strip_html }}</div></div>
</div>{% endfor %}{% endif %}
{% endfor %}

“{{ post.excerpt | strip_html }}”就是在做文章摘要,strip_html是将HTML标签去除。

“{{ post.date | date: "(%Y年%m月%d日)" }}”是在做格式化时间,上面的头信息中设置了“date: 2016-05-09 08:25:06”。

 

3)分页

jekyll的分页只能在index.html中执行,只能这个文件,其他文件是不能执行,“paginator”对象中的属性都将为空。

在上面的_config.yml中设置了两个关于分页的属性,一个是每页显示的数量,一个是分页文件输出的方式。

paginate: 1
paginate_path: "article/:num"

没有把页码1给输出,我在做分页的时候,就每次都得多做个判断。

页面的样式就直接用了Bootstrap的分页

<ul class="pagination"><li><a href="{{ site.baseurl}}/article/"><span>首页</span></a></li><li>{% if paginator.page == 1 %}<span>&laquo;</span>{% else %}{% if paginator.previous_page == 1 %}<a href="{{ site.baseurl}}/article/">{% else %}<a href="{{ site.baseurl}}/article/{{ paginator.previous_page }}">{% endif %}<span>&laquo;</span></a>{% endif %}</li>{% for i in (1..paginator.total_pages) limit:9 offset:{{paginator.page-1}} %}{% if paginator.page == i %}<li class="active">{% else %}<li>{% endif %}{% if i == 1 %}<a href="{{site.baseurl}}/article">{{i}}</a>{% else %}<a href="{{site.baseurl}}/article/{{i}}">{{i}}</a>{% endif %}</li>{% endfor %}<li>{% if paginator.page == paginator.total_pages %}<span>&raquo;</span>{% else %}<a href="{{ site.baseurl}}/article/{{ paginator.next_page }}"><span>&raquo;</span></a>{% endif %}</li><li><a href="{{ site.baseurl}}/article/{{paginator.total_pages}}"><span>末页</span></a></li><li class="disabled"><span>第{{paginator.page}}页 / 共{{paginator.total_pages}}页</span></li>
</ul>

 

demo下载:

http://download.csdn.net/download/loneleaf1/9518315

 

参考资料:

Syntax Highlighting in Jekyll With Rouge 

Rouge支持的语言

kramdown语法

Kramdown 语法文档翻译

文章分类索引

为Jekyll增加不完美的分页和文章摘要



    本文转自 咖啡机(K.F.J)   博客园博客,原文链接:http://www.cnblogs.com/strick/p/5484779.html,如需转载请自行联系原作者



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/285339.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言试题129之求一个 3乘3 矩阵对角线元素之和

✅作者简介:大家好我是码莎拉蒂,CSDN博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 1、题目 题目:求一个 3乘3 矩阵对角线元素之和 分析:利用双重 for 循环控制输入二维数组,再将 a[…

ssh key生成

Mac电脑用终端生成SSH key 访问自己的Github 字数684 阅读427 评论4 喜欢15前言&#xff1a;最近有不少刚刚使用github管理代码的开发者或者新手码农在网上 问我如何关联自己的github&#xff0c;今天就写篇文章仅供参考。一、首先你要检测自己电脑是否存在 SSH key 在终端输出…

[转]小白都能看懂的softmax详解

1.softmax初探 在机器学习尤其是深度学习中&#xff0c;softmax是个非常常用而且比较重要的函数&#xff0c;尤其在多分类的场景中使用广泛。他把一些输入映射为0-1之间的实数&#xff0c;并且归一化保证和为1&#xff0c;因此多分类的概率之和也刚好为1。 首先我们简单来看看s…

MAUI 入门教程系列(5.XAML及页面介绍)

前言作为微软的UI框架&#xff0c;除了Winform以外&#xff0c;多数是以创建XAML文件的方式来编写前端的页面&#xff0c;尽管你也可以通过C#代码来编写你的用户界面&#xff0c;与Xamarin.Forms相同&#xff0c;在MAUI上编写XAML的声明方式与其相同&#xff0c;重构了底层部分…

蓝牙mesh网络基础

蓝牙mesh网络基础转载于:https://blog.51cto.com/11534544/2044130

Linux系统开机自启流程

第一步&#xff1a;POST&#xff08;Power On Safe Test&#xff09;加电自检当按下电源键以后&#xff0c;CPU因为有电流通过便开始对自身、I/O设备、内存等硬件进行检验。那么CPU如何得知这些自检指令&#xff1f;我们知道指令存在于内存当中&#xff0c;寻找内存也需要指令。…

ArcGIS空间数据:矢量和栅格数据结构详解

文章目录 矢量数据结构矢量数据简介Shapefile矢量格式栅格数据结构地理数据库中的栅格栅格管理策略栅格数据的地理属性栅格的地理属性通常包括地理数据集中的栅格块表实体栅格表示矢量数据结构 矢量数据简介 基于矢量数据模型的数据结构简称矢量数据结构,是通过记录实体坐标…

C语言试题130之有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中

✅作者简介:大家好我是码莎拉蒂,CSDN博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 1、题目 题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中 分析:先判…

[转]一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/kwame211/article/details/88016151 一、目标检测常见算法 object detection&#xff0c;就是在给定的图片中精确找到物体所在位置&#xff0c;并标注出物体的类别。所以&a…

在代码中使用度量单位,从而生活更美好

在我们的应用软件中&#xff0c;涉及到物理化学计算时&#xff0c;只有 Frink 、F#、Modelica 少数语言变量是自带单位的&#xff0c;大部分语言变量仅包含数值&#xff0c;单位转换需要在变量进行公式计算之前完成&#xff0c;计算后再把结果单位转换为输出单位&#xff0c;单…

C#(Sharp)进阶篇:文件操作

文章目录 8.1 文件系统概述8.2 驱动器、目录和文件8.2.1 与IO操作相关的枚举8.2.2 驱动器8.2.3 目录8.2.4 文件8.3 文件流和数据流8.3.1 抽象类Stream8.3.2 文件流FileStream8.3.3 流的文本读写器8.3.4 流的二进制读写器8.3.5 常用的其他流对象8.4 应用实例8.1 文件系统概述

shell中字符串操作【转】

转自&#xff1a;http://blog.chinaunix.net/uid-29091195-id-3974751.html 我们所遇到的编程语言中(汇编除外)都少不了字符串处理函数吧&#xff0c; 当然shell编程也不例外咯&#xff0c;那么下面我们一起来看下shell中字符串 处理的相关操作吧。大概下面的字符串操作可以分为…

[转]神经网络框架

Pytorch上手使用 近期学习了另一个深度学习框架库Pytorch&#xff0c;对学习进行一些总结&#xff0c;方便自己回顾。 Pytorch是torch的python版本&#xff0c;是由Facebook开源的神经网络框架。与Tensorflow的静态计算图不同&#xff0c;pytorch的计算图是动态的&#xff0c;可…

10分钟实现dotnet程序在linux下的持续部署

背景 一直以来&#xff0c;程序署都是非常麻烦且无聊的事情&#xff0c;在公司一般都会有 devops 方案&#xff0c;整个 cicd 过程涉及的工具还是挺多的&#xff0c;搭建起来比较麻烦。那么对于一些自己的小型项目&#xff0c;又不想搭建一套这样的环境&#xff0c;怎么办呢。。…

C语言试题131之将一个数组逆序输出。

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目:将一个数组逆序输出。 分析:…

【错误异常大全】:无法加载 DLL“ArcGISVersion.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。

文章目录 错误异常解决方案错误异常 无法加载 DLL“ArcGISVersion.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。 解决方案 将目标平台改为x86,具体步骤如下: 点击【配置管理器】。 下拉活动解决方案平台,点击【新建】。 选择x86,点击【确定】。

博客即简历

本文转载自&#xff1a;http://www.cnblogs.com/stoneniqiu/p/5271248.html。 我个人也是在一直坚持写博客&#xff0c;每月至少一篇&#xff0c;并慢慢地将其变成了自己的习惯。一些想法与本文不谋而合&#xff0c;所以决定转载此文。 --------------------------------------…

C语言试题132之取一个整数 a 从右端开始的 4~7 位。

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目:取一个整数 a 从右端开始的 …

【错误异常大全】:ArcGIS version not specified. You must call RuntimeManager.Bind before creating any ArcGIS

文章目录 问题描述解决方法问题描述 ArcGIS version not specified. You must call RuntimeManager.Bind before creating any ArcGIS components. 解决方法 打开program.cs,把ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop); 放到Application…

统一建模语言 UML

目录 统一建模语言 UMLUML定义了5类10种模型图一用例图用于建立需求模型二静态图主要描述系统的静态表示和关系包括类图包图对象图三行为图描述系统动态模型和对象组成的交换关系包括状态图和活动图四交互图用于描述对象间的交互关系由一组对象和它们之间的关系组成包含它们之间…