template - SilverBlog/silverblog GitHub Wiki
SilverBlog 採用了 Jinja2 模板引擎來渲染頁面。關於 Jinja 的模板語言,可以通過查閱 Jinja 的文檔來了解,本知識庫僅介紹與 SilverBlog 模板有關的特定內容。
SilverBlog 的模板其實非常容易製作,只要提前寫好 HTML,套用對應的模板標記語言,一個 SilverBlog 模板就製作完成了。
在製作模版時,你只需要考慮兩個入口:
-
index.html
:博客的首頁(文章列表) -
post.html
:博客的文章頁
其餘的頁面部分(頭部和尾部等),均可使用 include
語句自由引用,但是路徑前面務必要包含 system_config.Theme
。
{# 引用了主題根目錄的 /include/header.html #}
{% include system_config.Theme+"/include/header.html" %}
為了便於開發模板,SilverBlog 會傳輸一些參數給模板引擎,這些可用的參數有:
變量名稱 | 用途 | 來源 | 適用範圍 |
---|---|---|---|
system_config{} |
SilverBlog 配置項目 | config/system.json |
全局 |
template_config{} |
主題配置項目 | templates/你的主題名稱/config.json |
全局 |
menu_list[] |
菜單列表 | config/menu.json |
全局 |
template_config{} |
主題配置項目 | templates/你的主題名稱/config.json |
全局 |
page_list[] |
文章列表(已分頁的) |
config/page.json (分頁後的列表) |
index |
now_page |
當前頁數 | 程序 | index |
page_row |
總計頁數 | 程序 | index |
page_info{} |
當前文章詳情 |
config/page.json (單一列表項) |
post |
content |
當前文章內容 | document/當前文章.md |
post |
用戶可能需要在主題的頭部和尾部插入一些自定義代碼(網站統計、網頁特效、挂件等),那麼在開發主題時需要在合適的位置進行引用。
{# 用戶自定義頭部 HTML,建議放於 </head> 之前 #}
{% include "include/head.html" ignore missing %}
{# 用戶自定義尾部 HTML,建議放於 </body> 之前 #}
{% include "include/foot.html" ignore missing %}
同樣是include
語句,但是與主題內其它頁面部分的引用不同,這裡多了ignore missing
參數,因為自定義頭部和尾部作為一項可選配置,應該在引用時考慮到它們不存在的情況。
您可以將配置檔放至於主題目錄下的i18n目錄下。SilverBlog採用 Market Codes 作為 i18n 的json文件命名標準。默認配置檔為 en-US。(system.json中未配置時)當無法找到en-US檔的時,將返回鍵名。
您可以使用 {{i18n|get_i18n_value("")}}
來獲取鍵值。i18n是一個傳入的字典變量。
{# 針對不同頁面輸出適合它們的標題和介紹,這樣就可以安心的把整個網站的 header 寫在一個單一的文件內 #}
{% if page_info.title=="index" %}
{% set title=system_config.Project_Name %}
{% set description=system_config.Project_Description %}
{% else %}
{% set title=page_info.title %}
{% set description=page_info.excerpt %}
{% endif %}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>{{ title }}</title>
<meta name="description" content="{{ description }}">
{% include "include/head.html" ignore missing %}
</head>
{# 對本頁每一篇文章信息進行渲染 #}
{% for page_info in page_list %}
<article>
{# 輸出單項的標題 #}
<h1 class="title">
<a href="/post/{{ page_info.name }}">{{ page_info.title }}</a>
</h1>
{# 輸出單項的時間 #}
<time data-date="{{ page_info.time }}">{{ page_info.time }}</time>
{# 輸出單項的文章摘要 #}
<div class="content">{{ page_info.excerpt }}</div>
</article>
{% endfor %}
<ul>
{% for item in menu_list %}
{% if "absolute" in item %}
{% set url = item.absolute %}
{% else %}
{% set url = "/post/"+item.name %}
{% endif %}
<li><a href="{{url}}">{{ item.title }}</a></li>
{% endfor %}
</ul>
<nav class="pagination" role="navigation">
{% if now_page !=1 %}
<a class="newer-posts"
href="/index/{{ now_page - 1 }}">←
上一頁</a> {% endif %}
<span class="page-number">第 {{ now_page }} 頁 ⁄ 共 {{ page_row }} 頁</span>
{% if now_page != page_row and page_row != 1 %}
<a class="older-posts"
href="/index/{{ now_page + 1 }}">下一頁 →</a> {% endif %}
</nav>
<article>
<h1 class="title">{{ page_info.title }}</h1>
<time>{{ page_info.time }}</time>
<div class="content">{{ content|safe }}</div>
<section class="comment">{% include "include/comment.html" ignore missing %}</section>
</article>
<footer>
<div class="wrap clearfix">
<span class="left">© {{ now_time|format_datetime("%Y") }} <a href="/">{{ system_config.Project_Name }}</a></span>
<span class="right">Powered by <a href="http://github.com/SilverBlogTeam/SilverBlog" target="_blank">SilverBlog</a></span>
</div>
</footer>
- 符合W3C標準,能夠在 FireFox 上正常運行。
- 引入Bplayer或者能夠兼容Bplayer標準之音樂播放器(可以選擇不引入,使用瀏覽器默認播放器。請確保播放器在無法載入資源文件時能夠使用。)
- 符合SilverBlog主題規範,能夠正確加入用戶自定義載入點的配置。
- SPA主題將不予以收錄。