web/_posts/2019-08-08-write-a-new-post.md

167 lines
5.7 KiB
Markdown
Raw Normal View History

2019-09-30 15:38:58 +03:00
---
2020-04-06 21:11:50 +03:00
title: Writing a New Post
author: Cotes Chung
2019-09-30 15:38:58 +03:00
date: 2019-08-08 14:10:00 +0800
categories: [Blogging, Tutorial]
2019-12-30 22:52:49 +03:00
tags: [writing]
2019-09-30 15:38:58 +03:00
---
## Naming and Path
2020-03-01 22:56:32 +03:00
Create a new file named with the format `YYYY-MM-DD-title.md` then put it into `_post` of the root directory.
2019-09-30 15:38:58 +03:00
## Front Matter
Basically, you need to fill the [Front Matter](https://jekyllrb.com/docs/front-matter/) as below at the top of the post:
```yaml
---
title: TITLE
date: YYYY-MM-DD HH:MM:SS +/-TTTT
categories: [TOP_CATEGORIE, SUB_CATEGORIE]
2020-03-01 22:56:32 +03:00
tags: [TAG] # TAG names should always be lowercase
2019-09-30 15:38:58 +03:00
---
```
> **Note**: The posts' ***layout*** has been set to `post` by default, so there is no need to add the variable ***layout*** in Front Matter block.
2020-04-12 19:38:56 +03:00
### Timezone of date
2020-03-01 22:56:32 +03:00
2020-04-12 19:38:56 +03:00
In order to accurately record the release date of a post, you should not only setup the `timezone` of `_config.yml` but also provide the the post's timezone in field `date` of its Front Matter block. Format: `+/-TTTT`, e.g. `+0800`.
2020-03-01 22:56:32 +03:00
2020-04-12 19:38:56 +03:00
### Categories and Tags
2019-09-30 15:38:58 +03:00
2020-04-12 19:38:56 +03:00
The `categories` of each post is designed to contain up to two elements, and the number of elements in `tags` can be zero to infinity.
2020-03-01 22:56:32 +03:00
2020-04-12 19:38:56 +03:00
The list of posts belonging to the same category/tag is recorded on a separate page. The number of such *category*/*tag* type pages is equal to the number of `categories`/`tags` for all posts, they must match perfectly.
2020-03-01 22:56:32 +03:00
2020-04-12 19:38:56 +03:00
let's say there is a post with front matter:
2020-03-01 22:56:32 +03:00
```yaml
categories: [Animal, Insect]
tags: bee
```
2020-04-12 19:38:56 +03:00
then we should have two *category* type pages placed in folder `categories` of root and one *tag* type page placed in folder `tags` of root:
2020-03-01 22:56:32 +03:00
```terminal
jekyll-theme-chirpy
├── categories
│   ├── animal.html
2020-04-12 19:38:56 +03:00
│   └── insect.html
├── tags
  └── bee.html
...
2020-03-01 22:56:32 +03:00
```
2020-04-12 19:38:56 +03:00
and the content of a *category* type page is
2020-03-01 22:56:32 +03:00
```yaml
---
layout: category
title: CATEGORY_NAME # e.g. Insect
category: CATEGORY_NAME # e.g. Insect
---
```
2020-04-12 19:38:56 +03:00
the content of a *tag* type page is
2020-03-01 22:56:32 +03:00
```yaml
---
layout: tag
title: TAG_NAME # e.g. bee
2020-03-30 02:34:39 +03:00
tag: TAG_NAME # e.g. bee
2020-03-01 22:56:32 +03:00
---
```
2020-04-12 19:38:56 +03:00
With the increasing number of posts, the number of categories and tags will increase several times! If we still manually create these *category*/*tag* type files, it will obviously be a super time-consuming job, and it is very likely to miss some of them(i.e. when you click on the missing `category` or `tag` link from a post or somewhere, it will complain to you '404'). The good news is that we got a lovely script tool `_scripts/sh/create_pages.sh` to finish the boring task. Basically we will use it via `tools/init.sh` instead of running it separately. Check out its use case [here]({{ "/posts/getting-started/#option-1-built-by-github-pages" | relative_url }}).
2020-03-30 02:34:39 +03:00
2020-04-12 19:38:56 +03:00
## Last modified date
2020-03-30 02:34:39 +03:00
2020-04-12 19:38:56 +03:00
The last modified date of a post is obtained according to its latest git commit date, and all the modified date of the posts should be stored in `_data/updates.yml`. For example:
2020-03-30 02:34:39 +03:00
```yaml
2020-04-12 19:38:56 +03:00
-
filename: getting-started # the post filename without date and extension
lastmod: 2020-04-13 00:38:56 +0800 # the post last modified date
-
...
2020-03-30 02:34:39 +03:00
```
2020-04-12 19:38:56 +03:00
You can choose to create this file manually, but as you may notice, the better approach is to let it be automatically generated by a tool script. And `_scripts/sh/dump_lastmod.py` was born for this! Similar to the another script `_scripts/sh/create_pages.sh` mentioned above, it is also be called from `tools/init.sh`, so it doesn't have to be used separately.
When some posts have been modified since their published date and also the file `_data/updates.yml` was created correctly, a list with the label **Recent Updates** will be displayed in the right panel of the desktop view, which records the five most recently modified articles.
2019-09-30 15:38:58 +03:00
## Table of Contents
By default, the **T**able **o**f **C**ontents (TOC) is displayed on the right panel of the post. If you want to turn it off globally, go to `_config.yml` and set the variable `toc` to `false`. If you want to turn off TOC for specific post, add the following to post's [Front Matter](https://jekyllrb.com/docs/front-matter/):
```yaml
---
toc: false
---
```
## Comments
Similar to TOC, the [Disqus](https://disqus.com/) comments is loaded by default in each post, and the global switch is defined by variable `comments` in file `_config.yml` . If you want to close the comment for specific post, add the following to the **Front Matter** of the post:
```yaml
---
comments: false
---
```
## Mathematics
For website performance reasons, the mathematical feature won't be loaded by default. But it can be enabled by:
```yaml
---
math: true
---
```
2019-09-30 15:38:58 +03:00
## Code Block
Markdown symbols <code class="highlighter-rouge">```</code> can easily create a code block as following examples.
```
This is a common code snippet, without syntax highlight and line number.
```
## Specific Language
Using <code class="highlighter-rouge">```Language</code> you will get code snippets with line Numbers and syntax highlight.
> **Note**: The Jekyll style `{% raw %}{%{% endraw %} highlight LANGUAGE {% raw %}%}{% endraw %}` or `{% raw %}{%{% endraw %} highlight LANGUAGE linenos {% raw %}%}{% endraw %}` are not allowed to be used in this theme !
```yaml
# Yaml code snippet
items:
- part_no: A4786
descrip: Water Bucket (Filled)
price: 1.47
quantity: 4
```
#### Liquid Codes
2019-09-30 15:38:58 +03:00
If you want to display the **Liquid** snippet, surround the liquid code with `{% raw %}{%{% endraw %} raw {%raw%}%}{%endraw%}` and `{% raw %}{%{% endraw %} endraw {%raw%}%}{%endraw%}` .
{% raw %}
```liquid
{% if product.title contains 'Pack' %}
This product's title contains the word Pack.
{% endif %}
```
{% endraw %}
2019-09-30 15:38:58 +03:00
## Learn More
2019-09-30 15:38:58 +03:00
For more knowledge about Jekyll posts, visit the [Jekyll Docs: Posts](https://jekyllrb.com/docs/posts/).