多客內(nèi)容管理系統(tǒng)-DKCMS-模板引擎

dkCms 模板

1.模板使用

1.1 切換模板

image

點(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

image

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末向图,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子标沪,更是在濱河造成了極大的恐慌榄攀,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,080評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谨娜,死亡現(xiàn)場(chǎng)離奇詭異航攒,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)趴梢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門漠畜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人坞靶,你說(shuō)我怎么就攤上這事憔狞。” “怎么了彰阴?”我有些...
    開封第一講書人閱讀 157,630評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵瘾敢,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我尿这,道長(zhǎng)簇抵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,554評(píng)論 1 284
  • 正文 為了忘掉前任射众,我火速辦了婚禮碟摆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘叨橱。我一直安慰自己典蜕,他們只是感情好断盛,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,662評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著愉舔,像睡著了一般钢猛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上轩缤,一...
    開封第一講書人閱讀 49,856評(píng)論 1 290
  • 那天命迈,我揣著相機(jī)與錄音,去河邊找鬼典奉。 笑死躺翻,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的卫玖。 我是一名探鬼主播,決...
    沈念sama閱讀 39,014評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼踊淳,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼假瞬!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起迂尝,我...
    開封第一講書人閱讀 37,752評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤脱茉,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后垄开,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體琴许,經(jīng)...
    沈念sama閱讀 44,212評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,541評(píng)論 2 327
  • 正文 我和宋清朗相戀三年溉躲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了榜田。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,687評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锻梳,死狀恐怖箭券,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情疑枯,我是刑警寧澤辩块,帶...
    沈念sama閱讀 34,347評(píng)論 4 331
  • 正文 年R本政府宣布,位于F島的核電站荆永,受9級(jí)特大地震影響废亭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜具钥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,973評(píng)論 3 315
  • 文/蒙蒙 一豆村、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧氓拼,春花似錦你画、人聲如沸抵碟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,777評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)拟逮。三九已至,卻和暖如春适滓,著一層夾襖步出監(jiān)牢的瞬間敦迄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,006評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工凭迹, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留罚屋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,406評(píng)論 2 360
  • 正文 我出身青樓嗅绸,卻偏偏與公主長(zhǎng)得像脾猛,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鱼鸠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,576評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容