背景

在之前,纸壳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中的下列配置:

  1. <ItemGroup>
  2. <MvcRazorFilesToCompile Include="**\*.cshtml" Exclude="wwwroot\themes\**\*.cshtml;" />
  3. </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. Gazebo: Could not find parameter robot_description on parameter server

    robot_state_publisher looks for the parameter "robot_description" by default. The robot_st ...

  2. 利用PHP脚本辅助MySQL数据库管理4-两个库表结构差异比较

    <?php define('DATABASE1', 'coffeetest'); $dbi1 = new DbMysql; $dbi1->dbh = 'mysql://root:mysql ...

  3. codeforces C. Functions again

    题意:给定了一个公式,让你找到一对(l,r),求解出公式给定的F值. 当时没有想到,我把(-1)^(i-l)看成(-1)^i,然后思路就完全错了.其实这道题是个简单的dp+最长连续子序列. O(n)求 ...

  4. 5. Longest Palindromic Substring - Unsolved

    https://leetcode.com/problems/longest-palindromic-substring/#/description Given a string s, find the ...

  5. jquery库google加载

    加载js库的时候可以加载google CDN,可以同时加载多个jquery库<script src="http://www.google.com/jsapi">< ...

  6. mysql 数据插入优化方法(concurrent_insert=2)

    当一个线程对一个表执行一个DELAYED语句时,如果不存在这样的处理程序,一个处理器线程被创建以处理对于该表的所有DELAYED语句.通常来说,在MyISAM里读写操作是串行的,但当对同一个表进行查询 ...

  7. Codeforces 1098 简要题解

    文章目录 前言 A题 B题 C题 D题 E题 传送门 前言 没错因为蒟蒻太菜了这场的最后一道题也咕掉了,只有AAA至EEE的题解233 A题 传送门 题意简述:给出一棵带点权的树,根节点深度为111, ...

  8. git安装项目步骤

    1.git clone git@gitee(github).com:项目地址.git 2.cd 项目根目录 3.composer install 4.如果需要数据迁移,cmd中到项目根目录 php a ...

  9. yii2自定义json格式success,error跳转

    /** * ---------------------------------------------- * 操作成功跳转的快捷方法 * @access protected * @param stri ...

  10. Echarts的使用方法

    效果图: 1. 在echarts官网下载包,解压后,将文件Echarts\echarts-2.2.7\echarts-2.2.7\doc\example\www\js\echarts.js文件拷贝,放 ...