背景

在之前,纸壳CMS的主题仅仅只是CSS样式,并不支持在主题下使用模板来构建不同的HTML结构。现在我们对主题功能做了增强,可以在主题下添加各自的模板,这样在制作主题时,就会更加自由。不仅如此,新的主题引擎还允许替换系统中所有Action对应的视图。

所以新的主题引擎可以修改包括后端在内的系统中的所有界面风格。

主题模板

纸壳CMS的所有组件、板块都有对应的默认模板。在制作主题的过程中,难免会遇到HTML结构不一至的情况,这时候就可以在对应的主题下添加显示模板来替换默认的模板。将组件的模板放入主题目录下的Views目录即可:

例如,如果覆盖文章列表模板,可以在Views目录下放入Widget.ArticleList.cshtml或者Widget.ArticleList.fluid,这样当选用该主题时,文章列表将会优先使用主题目录下的视图模板:

模板优先级

模板优先级最高的是主题目录下的模板,其次才是默认模板,查找模板的顺序如下:

  1. ~/{CurrentTheme}/Views/{Module}/{Controller}/{Action}
  2. ~/{CurrentTheme}/Views/{Controller}/{Action}
  3. ~/{CurrentTheme}/Views/{ViewName}
  4. 默认

{CurrentTheme}当前主题,{Module}路由中的定义值,例如后端所有页面的Module值为admin

所以主题模板不仅能替换组件的视图,还可以替换Action对应的视图。

我们对系统中的组件模板做了一些整理,可以使用以下链接下载包含所有默认组件模板的主题,可以使用Razor或者Fluid

注意事项

  1. 主题中仅包含需要修改的模板文件即可。
  2. 当把其它插件中的视图模板复制到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

纸壳CMS主题增强,支持主题中加入模板的更多相关文章

  1. 使用VS Code开发纸壳CMS自动编译主题压缩CSS,JS

    Visual Studio Code (简称 VS Code / VSC) 是一款免费开源的现代化轻量级代码编辑器,支持语法高亮.智能代码补全.自定义热键.括号匹配.代码片段.代码对比 Diff.GI ...

  2. 纸壳CMS现已支持自定义扩展字段

    简介 纸壳CMS是开源免费的可视化内容管理系统. GitHub https://github.com/SeriaWei/ZKEACMS 自定义字段 纸壳CMS现已支持自定义字段,在不修改代码的情况下, ...

  3. 在Docker中运行纸壳CMS并配置使用MySql

    纸壳CMS是基于ASP.Net Core开发的可视化内容管理系统,可以跨平台部署,可以在容器中运行.接下来看看如何在docker中运行纸壳CMS. GitHub:https://github.com/ ...

  4. 纸壳CMS(ZKEACMS)体验升级,快速创建页面,直接在页面中修改内容

    关于纸壳CMS 纸壳CMS又名 ZKEACMS Core 是ZKEACMS的 .net core 版本,可运行在 .net core 1.1 平台上.是一个开源的CMS. 纸壳CMS对于 ZKEACM ...

  5. 使用vs code开发纸壳CMS并启用Razor智能提示

    关于纸壳CMS 纸壳CMS是一个开源免费的,可视化设计,在线编辑的内容管理系统.基于ASP .Net Core开发,插件式设计: 下载代码 GitHub:https://github.com/Seri ...

  6. 纸壳CMS可视化建站系统搭建多语言网站

    纸壳CMS是可视化建站系统,现已经从架构上支持多语言.但是多语言功能默认是没有开启的.您可以从设置中开启多语言,或者随时关闭它,您可以随时进行切换. 开启多语言 如果您没有在系统设置中看到多语言设置菜 ...

  7. 纸壳CMS 3.0升级.Net Core 2.1性能大提升

    微软发布了.Net Core 2.1正式版,纸壳CMS也在第一时间做了升级,并做了一系列的优化和调整,性能大幅提升,并解决了一些历史遗留问题,添加了一些新功能. Github https://gith ...

  8. 纸壳CMS替换默认实现

    简介 纸壳CMS是一个开源免费的可视化内容管理建站系统,拖拽就可以轻松建网站. GitHub: http://github.com/SeriaWei/ZKEACMS 纸壳CMS在设计上使用的是ASP. ...

  9. ASP .Net Core路由(Route) - 纸壳CMS的关键

    关于纸壳CMS 纸壳CMS是一个开源免费的,可视化设计,在线编辑的内容管理系统.基于ASP .Net Core开发,插件式设计: GitHub:https://github.com/SeriaWei/ ...

随机推荐

  1. Hadoop知识点

    1.小文件合并:如果文件有一定的规律或者是在同一个文件夹下,可以采用获取文件夹下所有的文件,通过流进行合并,然后再存到hdfs上. 2.mapreduce的优点:1.离线计算.2.高容错性,一个节点挂 ...

  2. .NET获取城市信息(将三字代码转换成城市名)

    整理代码,发现有一个从两张表里读取城市列表,然后linq和lambda表达式来获取城市名的函数,代码如下: public static string GetCityHotelText(string c ...

  3. .NET发送邮件的方法

    整理一下,在.NET中发送邮件的一个方法,代码如下: public static string Net_Email(string strSendto, string strCC, string str ...

  4. linux和普通文本的换行问题

    情景一: 普通文本 vim操作换行   :%s#xxx#\n#g 情景二: linux环境换行 vim   :%s#xxx#\r#g

  5. GUI的最终选择Tkinter模块初级篇

    一.Tkinter模块的基本使用 1)实例化窗口程序 import tkinter as tk app = tk.Tk() app.title("FishC Demo") app. ...

  6. linux代码笔记

    sudo passwd root更新root密码 软件包管理及shell命令_deb软件包管理一_笔记:dpkj -i 安装dpkj -r 移除dpkj -P 全部移除dpkj -L 列出安装清单dj ...

  7. kbmmw 的HTTPSmartService 上传文件到服务器端

    前面我写过了 HTTPSmartService 使用介绍,可以参见以前的文章. 前一向有同学问如何在http 页面表单上上传文件.一直没有时间回答,自己简单做了例子, 发现无法实现功能,今天花了一天时 ...

  8. 3、iOS Xcode创建protocol(代理).h文件

  9. 2019.01.16 bzoj3526: [Poi2014]Card(线段树)

    传送门 线段树菜题. 题意:有一些卡牌,正反各有一个数,你可以任意翻转,每次操作会将两张卡牌的位置调换,你需要在每次操作后回答以现在的卡牌顺序能否通过反转形成一个单调不降的序列. 思路: 对于一个线段 ...

  10. 2018.10.25 bzoj4517: [Sdoi2016]排列计数(组合数学)

    传送门 组合数学简单题. Ans=(nm)∗1Ans=\binom {n} {m}*1Ans=(mn​)∗1~(n−m)(n-m)(n−m)的错排数. 前面的直接线性筛逆元求. 后面的错排数递推式本蒟 ...