dkCms 模板
1.模板使用
1.1 切換模板
點(diǎn)擊『使用此模板』提示切換成功问词,即可完成模板切換
1.2 獲取新模板
下載模板后熟史,部署在dkcms template 目中椒舵,點(diǎn)擊上圖中 『刷新列表』按鈕柜蜈,如果模板符合系統(tǒng)要求举反,即可加載成功懊直。
2.定制模板
2.1 模板的加載機(jī)制
template目錄下,每個(gè)子目錄火鼻,即可成為一個(gè)獨(dú)立的模板室囊。
同時(shí),目錄中必須包含 tpl.info 文件魁索,文件中包含如下信息:
name:dk-blog 極簡(jiǎn)1號(hào)
author: dkcms
authorInfo: dkcms 模板小組
description:參考 https://hyunseob.github.io/ 簡(jiǎn)潔模板
snapshot:
type:enjoy
tag:個(gè)人博客,blog,信息門戶
dkCms 啟動(dòng)完成后融撞,或管理員點(diǎn)擊了『刷新模板』按鈕后,系統(tǒng)會(huì)重新掃描template 目錄下子目錄粗蔚,并解析 tpl.info 文件尝偎,保存為系統(tǒng)模板清單。
同時(shí)鹏控,系統(tǒng)維持了 currentTemplate 變量致扯,保存了當(dāng)前使用模板的 模板路徑,即 模板所在目錄的 目錄名当辐。
其中抖僵,type 可選值為 thymeleaf 和 enjoy。默認(rèn)值為thymeleaf缘揪。
2.2 模板渲染引擎
當(dāng)靜態(tài)頁(yè)生成時(shí)耍群,或用戶預(yù)覽某內(nèi)容時(shí)义桂,模板引擎被實(shí)例化,并渲染對(duì)應(yīng)的模板世吨,輸出到對(duì)應(yīng)的輸出流澡刹。
- 渲染過(guò)程中,Render 根據(jù)當(dāng)前渲染對(duì)象,確定模板名稱辐马,并組裝數(shù)據(jù)妈经。
- Render 根據(jù)模板名,和currentTemplate钞螟,組裝模板文件最終路徑。
- Render 根據(jù)模板的type值,選擇實(shí)例化 thymeleaf 引擎赖临,或者 enjoy模板引擎。調(diào)用模板渲染機(jī)制灾锯,獲得渲染結(jié)果兢榨。
- Render 根據(jù)當(dāng)前任務(wù)是『預(yù)覽』還是『靜態(tài)化』,選擇將渲染結(jié)果顺饮,輸出到 HttpServletResponse.getWriter 或者 FileWriter 中吵聪。
- 渲染流程結(jié)束
- 渲染流程,統(tǒng)一封裝在DKCmsRenderWrapper 中兼雄,將兩種模板引擎吟逝,封裝為統(tǒng)一的操作流程。
- 某個(gè)單一渲染流程赦肋,由單獨(dú)一個(gè) DKCmsRenderContext 來(lái)貫穿块攒。Context 保存了當(dāng)前渲染任務(wù)的:目標(biāo)頁(yè)面、模板信息佃乘、變量信息囱井、靜態(tài)化參數(shù),保存了渲染所需全部信息趣避。
- 一個(gè) DKCmsRenderContext 實(shí)例庞呕,唯一確定了一個(gè)渲染任務(wù),為渲染全流程提供參數(shù)支撐鹅巍。
2.3 dkcms頁(yè)面類型
全部渲染頁(yè)面千扶,被抽象為一下幾種。
每種類型骆捧,對(duì)應(yīng)了
- 一組固定的模板變量
- 一組固定的模板定位方式
- 一組固定的渲染流程
public enum DkCmsRenderPageType {
SITE_HOMEPAGE,
CATEGORY_HOME,
CATEGORY_LIST,
CATEGORY_ARTICLE,
SINGLE_PAGE,
SITE_MAP,
ARTICLE_LIST_BY_TAG,
SEARCH_RESULT;
}
2.4 dkcms模板標(biāo)簽
dkcms提供了大量方便使用的模板標(biāo)簽澎羞,可以及其方便的展示內(nèi)容。標(biāo)簽在 tymeleaf 模板和 enjoy模板中的名稱保存一致敛苇,參數(shù)名保持一致妆绞。由于模板的具體限制顺呕,細(xì)節(jié)上個(gè)別不同。
標(biāo)簽詳細(xì)講解 參考:dkcms模板定制
dkcms模板標(biāo)簽清單
模板標(biāo)簽 | 用途 |
---|---|
articleList | 內(nèi)容列表 |
articleDetail | 內(nèi)容詳情 |
articleRank | 各類特定內(nèi)容列表括饶,熱門株茶,推薦,最新等 |
articleRelevant | 相關(guān)類型 |
articleUrl | 輸出某一格內(nèi)容的url图焰,能在預(yù)覽和靜態(tài)頁(yè)面中輸出正確的內(nèi)容启盛,避免模板中寫固定url |
- | - |
categoryList | 欄目列表 |
categoryDetail | 欄目詳情 |
categoryUrl | 輸出某一欄目的url,能在預(yù)覽和靜態(tài)頁(yè)面中輸出正確的內(nèi)容技羔,避免模板中寫固定url |
- | - |
tagArticle | 按標(biāo)簽拉取內(nèi)容列表 |
tagList | 標(biāo)簽列表僵闯,讀取全部標(biāo)簽 |
- | - |
pageList | 讀取全部單頁(yè)面 |
pageUrl | 輸出某一單頁(yè)面內(nèi)容url,能在預(yù)覽和靜態(tài)頁(yè)面中輸出正確的內(nèi)容藤滥,避免模板中寫固定url |
- | - |
commentList | 最新評(píng)論數(shù)據(jù) |
- | - |
getSetting | 讀取 所有設(shè)置項(xiàng) |
ad | 廣告位 |
breadcrumb | 面包屑導(dǎo)航 |
mianbaoxie | 同上 |
pageNav | 分頁(yè)鳖粟,頁(yè)面中必須調(diào)用過(guò)articleList 才有效 |
homePageUrl | 首頁(yè)地址,能在預(yù)覽和靜態(tài)頁(yè)面中輸出正確的內(nèi)容拙绊,避免模板中寫固定url |
2.4.1 enjoy 模板支持如下模板指令
ENJOY_ENGINE.addDirective("getSetting", DirectiveGetSetting.class);
//@Deprecated
ENJOY_ENGINE.addDirective("contentList", ArticleList.class);
ENJOY_ENGINE.addDirective("articleList", ArticleList.class);
ENJOY_ENGINE.addDirective("articleDetail", ArticleDetail.class);
ENJOY_ENGINE.addDirective("articleRank", ArticleRank.class);
ENJOY_ENGINE.addDirective("articleRelevant", ArticleRelevant.class);
ENJOY_ENGINE.addDirective("articleUrl", ArticleUrl.class);
ENJOY_ENGINE.addDirective("ad", Ad.class);
ENJOY_ENGINE.addDirective("breadcrumb", Breadcrumb.class);
ENJOY_ENGINE.addDirective("mianbaoxie", Breadcrumb.class);
ENJOY_ENGINE.addDirective("pageNav", PageNav.class);
ENJOY_ENGINE.addDirective("homePageUrl", HomePageUrl.class);
ENJOY_ENGINE.addDirective("categoryList", CategoryList.class);
ENJOY_ENGINE.addDirective("categoryDetail", CategoryDetail.class);
ENJOY_ENGINE.addDirective("categoryUrl", CategoryUrl.class);
ENJOY_ENGINE.addDirective("tagArticle", TagArticleList.class);
ENJOY_ENGINE.addDirective("tagList", TagList.class);
ENJOY_ENGINE.addDirective("pageList", SinglePageList.class);
ENJOY_ENGINE.addDirective("pageUrl", SinglePageUrl.class);
// map param
ENJOY_ENGINE.addDirective("commentList", CommentList.class);
2.4.1 thymeleaf 模板中支持如下模板指令
Set<IProcessor> processors = new HashSet<>();
processors.add(new StandardXmlNsTagProcessor(TemplateMode.HTML, dialectPrefix));
processors.add(new CategoryList(dialectPrefix));
processors.add(new CategoryDetail(dialectPrefix));
processors.add(new ArticleList(dialectPrefix));
processors.add(new ArticleRank(dialectPrefix));
processors.add(new ArticleDetail(dialectPrefix));
processors.add(new Navbar(dialectPrefix));
processors.add(new PageNav(dialectPrefix));
processors.add(new Tag(dialectPrefix));
processors.add(new TagList(dialectPrefix));
processors.add(new SinglePageUrl(dialectPrefix));
processors.add(new SinglePageList(dialectPrefix));
processors.add(new CategoryUrl(dialectPrefix));
processors.add(new ArticleUrl(dialectPrefix));
processors.add(new HomePageUrl(dialectPrefix));
2.5 二次開發(fā)增加標(biāo)簽
參考:dkcms模板定制
3.模板社區(qū)
3.1 下載和安裝新模板
3.2 發(fā)布新模板
3.2 模板市場(chǎng)
模板定制 二次開發(fā) 開源項(xiàng)目 技術(shù)支持 商務(wù)合作 https://dkcms.cc