您的位置: 首页 >日志>动易系统>详细内容

动易系统

SA系统如何实现网站换肤功能

来源:本站原创 发布时间:2021-01-21 09:10:25 浏览次数: 【字体:

最近又接到了一个网站需要加入换色功能的需求,记得以前也做过类似的功能,,实现方式都是从后台添加一个选择字段,然后从模板里面对新增的字段进行判断,然后调用相关的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);
            }
        }
    }())
×

用户登录