SA系统如何实现网站换肤功能
最近又接到了一个网站需要加入换色功能的需求,记得以前也做过类似的功能,,实现方式都是从后台添加一个选择字段,然后从模板里面对新增的字段进行判断,然后调用相关的css文件对网站进行换色,但这种实现方式有个不足的地方,就是SA系统的缓存问题,后台设置换色后,需要清理缓存,特别是全站换色,需要等上一段时间内页的缓存才能全部更新完毕。
通常网站换色的需求都是一些节日,或某些特殊日子,平时都是用回网站默认的颜色,如果只是一个选择字段去控制,每次开启和结束用户都需要后台去操作,特别是某些特殊日子,要求当天0时0分进行换色,第二天0时0分结束,用户就要晚上加班等时间进行切换了。考虑的这种情况,除了添加网站颜色的选择字段,同时还加入了网站换色的时间限制。
1、首先,看下扩展字段的配置,分别是站点皮肤、站点换肤开始时间和站点换肤结束时间。站点皮肤是文本选择类型字段,站点换肤开始时间和站点换肤结束时间是时间日期类型字段
2、在需要换色的站点的公共布局页面header处添加一个“节日换肤”的视图引用,由于有变灰的需求,把网站变灰的代码也添加进去,这个功能SA3.2.2已经有了,如果系统已经升级到了3.2.2,这段网站变灰的代码可以去掉(注意:升级后的网站变灰需要在运维中心里面进行切换)
3、节日换肤视图的代码,这里通过视图获取到了颜色、开始时间、结束时间三个字段的参数,记录到JS代码里面,再通过JS去判断是否在指定的时间范围,然后加入换色的JS(注意:不要直接在视图里面用Razor语法去判断,否则到了切换时间还是要等页面缓存更新),这里还有个1月1日、5月1日、7月1日、10月1日自动换色的判断,客户指定添加的,无需要的同学可以把这个判断去掉。
@Power.VisualizationPartialView(new { Description = "节日换色", Parameters = new { isRed = new { DisplayName = "是否默认红色风格", Type = "Boolean", ControlType = "Boolean", DefaultValue = false } } }) @{ var isRed = Param.isRed ?? false; //是否默认红色风格 var currentSite = SiteService.CurrentSite(); currentSite.ExtendContentObject.InitExtendContent(currentSite.SiteMold.ExtendFields, currentSite.ExtendContent); } <script type="text/javascript"> var now = new Date(); var nowMonth = now.getMonth(); var nowDate = now.getDate(); var isHoliday = false; var webStyle = '@currentSite.ExtendObject.webStyle'; //指定日期换红色 if((nowMonth == 0) && (nowDate == 1) || (nowMonth == 4) && (nowDate == 1) || (nowMonth == 6) && (nowDate == 1) || (nowMonth == 9) && (nowDate == 1)){ isHoliday = true } @if(isRed){ @Power.Raw("var isRedPage = true;") }else{ @Power.Raw("var isRedPage = false;") } var webStyleStartTime =new Date(Date.parse('@currentSite.ExtendObject.webStyleStart.ToString("yyyy-MM-dd HH:mm:ss")' .replace(/-/g,"/"))); var webStyleEndTime =new Date(Date.parse('@currentSite.ExtendObject.webStyleEnd.ToString("yyyy-MM-dd HH:mm:ss")' .replace(/-/g,"/"))); if( (webStyleStartTime <= now && now <= webStyleEndTime && webStyle == "红色") || isRedPage || isHoliday){ document.write("<link href='/Content/@(CurrentSite.Instance.Identifier)/Base/css/red.css' rel='stylesheet'/>"); } </script>
4、灰色的power.loadgrayscale.js代码我们还需调整下,由于没有系统字段,需要调整下获取我们新增的扩展字段
(function () { 'use strict'; var grayscaleStyle = '<style>' + 'html{' + ' -webkit-filter: grayscale(100%);' + ' -moz-filter: grayscale(100%)!important;' + ' -ms-filter: grayscale(100%);' + ' -o-filter: grayscale(100%)!important;' + ' filter: grayscale(100%);' + ' filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale = 1) \\9;' + ' filter: gray !important;' + '}' + '</style >'; // var grayscaleConfig = window.POWER_GRAYSCALE_CONFIG; // var startDateTime = new Date(grayscaleConfig.StartDateTime); // var endDateTime = new Date(grayscaleConfig.EndDateTime); // var nowDate = new Date(); if (webStyle == '灰色' && webStyleStartTime <= now && now <= webStyleEndTime) { var navStr = navigator.userAgent.toLowerCase(); if (navStr.indexOf("msie 10.0") == -1 || navStr.indexOf("rv:11.0") == -1) { $("head").append(grayscaleStyle); } } }())
用户登录
还没有账号?
立即注册