用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: true
  permalink: /:collection/:title
 ui:
  output: true
  permalink: /: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增加不完美的分页和文章摘要

时间: 2024-10-20 04:52:24

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

企业仿站 个人仿站 定制网站制作 phpcms插件开发 网站二次开发 phpcms二次开发

团队擅长项目 1.客客威客系系统系模版制作.仿站.二次开发程序 2.ecshop商城系统系模版制作.模版制作.程序二次开发.插件开发 3.phpcms系统模版制作.插件开发.程序二次开发 4.帝国cms系统模版制作.插件开发.程序二次开发 5.dedecms系统模版制作.插件开发.程序二次开发 6.Wordpress博客社区系统模版制作.插件开发.主题定制 7.Discuz论坛社区系统.模版制作.插件开发.仿站定制 网站运维: 3.liunx  环境安装  win2003 –win2012 环境

利用循环栏目导航标签及自定义页面制作帝国CMS网站地图

网站地图,又称站点地图,它就是一个页面,上面放置了网站上所有页面的链接.也简洁地表现了网站栏目关系,一般就包含顶级栏目和二级栏目.搜索引擎蜘蛛非常喜欢网站地图.在帝国CMS中没有生成网站地图的功能,所以嗨分享今天就给大家介绍一种方法生成它的网站地图. 主要用到帝国CMS中的两个重要知识点: 一.循环栏目导航标签(listshowclass) 二.自定义页面 第一步:增加标签模板 帝国CMS网站后台--[模板]-左侧[标签模板]-[管理标签模板] 可以增加一个标签模板,也可以直接使用 ID为1,模

如何制作响应式网站?12个优秀案例参考

响应的网页设计方法让你的网站对移动设备更加友好.网站开发者们采用最新的 HTML5 和 CSS3 技术以及最新的编码标准来制作响应式网站.响应式设计使网页设计更加强大,更具互动性和更美观.响应网站的设计有许多特色,使开发人员和设计人员能够创建速度快,性能优越的应用程序和网站,并适合于所有设备. 您可能感兴趣的相关文章 15款帮助创建响应式布局的优秀前端框架 经典网页设计:无缝过渡的响应式设计案例 让你的网站瞬间变成响应式的3个简单步骤 经典网页设计:响应式设计的国外购物网站 推荐35个新鲜出炉的

新手如何掌握制作和提交网站地图?

新手如何掌握制作和提交网站地图? 网站地图作为根据网站的结构,框架,内容生成的导航网页文件. 大多数人都知道网站地图对于提高用户体验有好处:它们为网站访问者指明方向,并帮助迷失的访问者找到他们想看的页面. 那么什么是网站地图呢? 在开始介绍网站地图的制作与提交之前,我们有必要先了解一下什么是网站地图. 网站地图也就是sitemap,是一个网站所有链接的容器.很多网站的链接层次比较深,蜘蛛是很难抓取到的,网站地图可以方便搜索引擎蜘蛛抓取网站页面,通过抓取网站页面,可以清晰的了解网站的架构.网站地图

swiper 、css3制作移动端网站,折叠导航

swiper .css3制作移动端网站,折叠导航 前几天公司要更新改版移动端的官网,由于网站本身没有多少内容,所以设计师就做成了整屏滑动的样子,起初我并没有看设计稿就一口答应了,拿到手后发现了几个问题让我不知道选用fullpage还是选择swiper来写这个项目.下图就是这个项目完成的效果. 问题1:整屏滑动两个插件都可以用,但是移动端用swiper偏多的 问题2:网站的导航要随着页面更新跳转 这里fullage还是很实用的 问题3:我想用swiper却不是很熟悉swiper怎么制作导航(平时不

实现网站二维码扫描登录

实现网站二维码扫描登录 分类: 架构设计2014-03-31 10:33 14613人阅读 评论(6) 收藏 举报 在尝试使用网页版微信时,发现微信的登录方式比较酷.区别与常用的用户名和密码的登录方式,网页微信登录只需要轻轻一扫,即可方便的实现登录功能. 下面尝试根据个人的理解对其可能的架构猜测一番.总体来看,扫描二维码实现网站的登录并不是太困难的事情.首先来看一下二维码登录的整体架构: 在整个架构中,主要包含了几个模块:手机App.浏览器.Web服务器以及存储服务(session服务).整个方

Django搭建博客网站(二)

Django搭建自己的博客网站(二) 这里主要讲构建系统数据库Model. Django搭建博客网站(一) model 目前就只提供一个文章model和一个文章分类标签model,在post/models.py中做如下修改: # models.py from django.db import models class PostTag(models.Model): tag_name = models.CharField(max_length=50) def __str__(self): retur

在github pages网站下用jekyll制作博客教程

https://www.jekyll.com.cn/ https://github.com/onevcat/vno-jekyll https://help.github.com/articles/using-a-custom-domain-with-github-pages/ http://kresnik.wang/works/tech/2015/06/07/%E5%9C%A8github-pages%E7%BD%91%E7%AB%99%E4%B8%8B%E7%94%A8jekyll%E5%88

使用Dreamweaver制作简单网站(二)

继续上周没完成的 一.新建iframe.css 1.点击文件-选择新建-css 2.ctrl+s保存为iframe.css 在style文件夹下. 3.回到main.html 右键选择-附加样式表,选择iframe.css 4.新建css规则. 5.背景设置为白色 {{uploading-image-977402.png(uploading...)}} 原文地址:https://www.cnblogs.com/gongcheng-/p/11997488.html