在之前,紙殼CMS的主題僅僅只是CSS樣式,並不支持在主題下使用模板來構建不同的HTML結構。現在我們對主題功能做了增強,可以在主題下添加各自的模板,這樣在製作主題時,就會更加自由。不僅如此,新的主題引擎還允許替換系統中所有Action對應的視圖。 所以新的主題引擎可以修改包括後端在內的系統中的所有... ...
背景
在之前,紙殼CMS的主題僅僅只是CSS樣式,並不支持在主題下使用模板來構建不同的HTML結構。現在我們對主題功能做了增強,可以在主題下添加各自的模板,這樣在製作主題時,就會更加自由。不僅如此,新的主題引擎還允許替換系統中所有Action
對應的視圖。
所以新的主題引擎可以修改包括後端在內的系統中的所有界面風格。
主題模板
紙殼CMS的所有組件、板塊都有對應的預設模板。在製作主題的過程中,難免會遇到HTML結構不一至的情況,這時候就可以在對應的主題下添加顯示模板來替換預設的模板。將組件的模板放入主題目錄下的Views
目錄即可:
例如,如果覆蓋文章列表模板,可以在Views
目錄下放入Widget.ArticleList.cshtml
或者Widget.ArticleList.fluid
,這樣當選用該主題時,文章列表將會優先使用主題目錄下的視圖模板:
模板優先順序
模板優先順序最高的是主題目錄下的模板,其次才是預設模板,查找模板的順序如下:
- ~/
{CurrentTheme}
/Views/{Module}
/{Controller}
/{Action}
- ~/
{CurrentTheme}
/Views/{Controller}
/{Action}
- ~/
{CurrentTheme}
/Views/{ViewName}
- 預設
{CurrentTheme}
當前主題,{Module}
路由中的定義值,例如後端所有頁面的Module值為admin
。
所以主題模板不僅能替換組件的視圖,還可以替換Action
對應的視圖。
我們對系統中的組件模板做了一些整理,可以使用以下鏈接下載包含所有預設組件模板的主題,可以使用Razor
或者Fluid:
註意事項
- 主題中僅包含需要修改的模板文件即可。
- 當把其它插件中的視圖模板複製到Views目錄用vistal studio編輯時,會提示找不到類型引用的情況,可以不用管它,程式是可以正常運行的。如果為了可以更友好的輸入代碼,可以在插件目錄製作好後再複製到主題的Views目錄下。
發佈和預編譯
紙殼CMS發佈的時候會預編譯程式中的所有視圖文件以得到更好的性能。但為了主題可以更方便的替換和時時生效,我們設置了在發佈的時候阻止預編譯主題相關的視圖。如果還是希望預編譯它們,可以移除ZKEACMS.WebHost.csproj
中的下列配置:
<ItemGroup> <MvcRazorFilesToCompile Include="**\*.cshtml" Exclude="wwwroot\themes\**\*.cshtml;" /> </ItemGroup>
安全相關
由於主題是可以上傳安裝的,而Razor
幾乎無所不能,所以為了安全,防止有人在主題模板中加入危險的C#代碼,我們推薦您關閉主題的Razor
模板功能,而僅使用Fluid
模板。關閉的方式很簡單,打開ZKEACMS.Fluid
插件目錄下的appsettings.json
配置文件,將RazorViewEngine
的值改為false
即可。
原文鏈接:http://www.zkea.net/codesnippet/detail/theme-template.html
GitHub
https://github.com/SeriaWei/ZKEACMS