个人博客 地址:https://www.wenhaofan.com/article/20190610145529

介绍

MCMS提供的模板大多数都使用的是4.6版本的标签,但是现在MCMS最新的已经是4.7了,然而4.7并不能向下兼容4.6,所以在4.7的MCMS中使用4.6的模板需要处理其中的旧版本标签,为了方便以及复用,想到了使用正则表达式解析、替换标签将4.6模板一键升级至4.7,代码如下

代码

  1. package live.autu.tools.mcms;
    import java.io.File;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.LinkedHashMap;
    import java.util.List;
    import java.util.Map;
    import cn.hutool.core.io.file.FileReader;
    import cn.hutool.core.io.file.FileWriter;
    import cn.hutool.core.util.ReUtil;
    public class UpgradeTag {
    private static Map<String,String> tagMatch=new LinkedHashMap<String, String>(){{

    put("\\{ms:globalskin.url/\\}", "{ms:global.host/}/{ms:global.style/}");
    put("$\\{global.host!''\\}", "{ms:global.host/}");
    put("$\\{global.style!''\\}", "{ms:global.style/}");
    put("\\[field.date fmt=yyyy\\-MM\\-dd/\\]","{ms:field.date?string(\"yyyy-MM-dd\")}");
    put("\\{ms\\:field\\.date fmt\\=yyyy\\-MM\\-dd/\\}", "{ms:field.date?string(\"yyyy-MM-dd\")}");
    put("\\[field.date fmt\\=yyyy\\-MM\\-dd hh:mm:ss/\\]}", "{ms:field.date?string(\"yyyy-MM-dd hh:mm:ss\")}");
    put("\\{ms\\:field\\.date fmt\\=yyyy\\-MM\\-dd hh:mm:ss/\\}","{ms:field.date?string(\"yyyy-MM-dd\")/}");
    put("\\{ms\\:field.date\\?string\\(\"yyyy\\-MM\\-dd\"\\)\\}", "{ms:field.date?string(\"yyyy-MM-dd\")/}");
    put("\\[field.link/\\]", "{ms:global.url/}[field.link/]");
    put("\\[field.typelink/\\]", "{ms:global.url/}[field.typelink/]");
    put("\\{ms\\:global.url/\\}\\{ms\\:global.url/\\}", "{ms:global.url/}");

    }};

    public static void main(String[] args) {

    String projectPath="D:\\work\\eclipse\\order\\mcms\\src\\main\\webapp\\templets\\1\\";

    //需要处理的路径
    List<String> templets=new ArrayList<String>() {{
    add("company1811");
    add("company1811\\m");
    }};

    for (String templet : templets) {
    renderTheme(projectPath.concat(templet));
    }
    }
     
    private static void renderTheme(String filePath) {
    File file=new File(filePath);
    File[] files=file.listFiles();

    for (File file2 : files) {
    if(!file2.isFile()) {
    continue;
    }
    String absolutePath=file2.getAbsolutePath();
    Upgrade(absolutePath);
    }
    }
    private static void Upgrade(String filePath) {
    FileReader fileReader = new FileReader(filePath);
    String content = fileReader.readString();
     
    content = UpgradeInclude(content); 
    for (String key : tagMatch.keySet()) {
    content=content.replaceAll(key,tagMatch.get(key));
    }
     

    FileWriter writer = new FileWriter(filePath);
    writer.write(content);

    System.out.println(filePath+":success");
    }
    private static String UpgradeInclude(String content) {
    String includeTagRegex="\\{ms:include[\\s]*filename=+[\\S]*.htm/\\}";
    String includeFileNameRegex="=[\\S]*/";
    Map<String,String> result=new HashMap<>();

    List<String> resultFindAll = ReUtil.findAll(includeTagRegex, content, 0, new ArrayList<String>());

    resultFindAll.forEach( tag ->{
     
       String fileName=ReUtil.get(includeFileNameRegex, tag,0);
       fileName=fileName.replaceFirst("=", "").replace("/", "");
       
       result.put(tag, "<#include \""+fileName+"\">");
     
    });

    for (String key : result.keySet()) {
    String finalKey =key.replaceAll("\\{","\\\\{");
    finalKey=finalKey.replaceAll("\\}","\\\\}");
    content=content.replaceAll(finalKey, result.get(key));
    }
    return content;
    }
    }

下载

http://qiniu.wenhaofan.com/UpgradeTag.java

铭飞MCMS将4.6模板标签升级至4.7的更多相关文章

  1. 铭飞MCMS内容管理系统完整开源版J2EE代码

    当前版本:4.6.0铭飞MS官网:http://ms.mingsoft.net官网同时提供一键运行版本下载,请步移官网....QQ交流群号1:221335098很多人说铭飞MCMS是大天朝国唯一完整开 ...

  2. linux下, 再次遇到使用thinkphp的模板标签时,报错used undefined function \Think\Template\simplexml_load_string() 是因为没有安装 php-xml包

    linux下, 使用thinkphp的模板标签,如 eq, gt, volist defined, present , empty等 标签时, 报错: used undefined function ...

  3. Discuz!X/模板标签说明

    Discuz 模板标签说明 Discuz! 的模板采用近似 PHP 表达式的语法,基本都是可识别的HTML,但涉及到变量和动态内容时,基本形式下: <!-{ 代码内容 }-> 逻辑元素包围 ...

  4. ECSHOP模板标签

    模板制作修改经常用到ecshop模板标签: 页面关键字 {$keywords }页面标题 {$page_title}产品分类父分类列表 {foreach from=$categories item=c ...

  5. PHP之ThinkPHP模板标签操作

    Action    : $User=M("user");     $list=$User->select();     $this->assign("list ...

  6. (转)ThinkPHP自定义模板标签详解

    转之--http://www.thinkphp.cn/topic/6258.html 模板标签让网站前台开发更加快速和简单,这让本该由程序猿才能完成的工作,现在只要稍懂得HTM的人也能轻易做到,这也就 ...

  7. (转)DEDECMS模板原理、模板标签学习 - .Little Hann

    本文,小瀚想和大家一起来学习一下DEDECMS中目前所使用的模板技术的原理: 什么是编译式模板.解释式模板,它们的区别是什么? 模板标签有哪些种类,它们的区别是什么,都应用在哪些场景? 学习模板的机制 ...

  8. Django模板-模板标签

    接着Django模板-基础知识继续写模板相关知识. if标签 {% if %} 标签接受 and , or 或者 not 关键字来对多个变量做判断 ,或者对变量取反( not ). 但是不允许在同一个 ...

  9. Django 学习笔记(五)模板标签

    关于Django模板标签官方网址https://docs.djangoproject.com/en/1.11/ref/templates/builtins/ 1.IF标签 Hello World/vi ...

随机推荐

  1. ubuntu 14.04 安装gvim 后报出warning

    (gvim:3572): GLib-GObject-WARNING **: Attempt to add property GnomeProgram::sm-connect after class w ...

  2. windows 使用ssh连接docker容器

    在Windows上搭建docker服务器需要在Windows模拟一个Linux平台,然后在Linux平台上搭建的docker服务器,所以在使用ssh工具连接docker容器的时候,使用的ip地址不是d ...

  3. Codeforces_849

    A.只要考虑分成一个串的情况就可以了. #include<bits/stdc++.h> using namespace std; ]; int main() { ios::sync_wit ...

  4. Golang-执行go get私有库提示”410 Gone“ 解决办法

    之前没有使用过私有库,今天正好碰到,把解决方法整理一下 错误记录 如果你在用go get 私有库碰到如下类似错误: 解决方法 $ export GO111MODULE=on $ export GOPR ...

  5. VFP获取 SQL Server 的数据表、触发器、存储过程、视图等脚本

    本文代码转载自红雨先生 *-----------------------------------------------* SqlServer 相关函数*----------------------- ...

  6. 持续化运维 DevOps

            DevOps(Development和Operations的组合词)是一组过程.方法与系统的统称,用于促进开发(应用程序/软件工程).技术运营和质量保障(QA)部门之间的沟通.协作与整 ...

  7. 搭建Samba服务器、多部门共享,互不干扰,超实用

    案例二 实现不同的用户访问同一个共享目录具有不同的权限,便于管理和维护.基本上能满足一些企业用户的需求. 一. 需求 1. 某公司有3个大部门,分别为:人事行政部(HR).财务部(FM).技术支持部( ...

  8. [Linux-CentOS7]安装Telnet

    # yum install telnet Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile Resolv ...

  9. MacBook Pro突然蓝牙突然消失

    刚才想用蓝牙,发现蓝牙居然不可用,硬件信息也无法找到,分享一个方法:

  10. display:table的用法

    目前,在大多数开发环境中,已经基本不用table元素来做网页布局了,取而代之的是div+css,那么为什么不用table系表格元素呢? 1.用DIV+CSS编写出来的文件k数比用table写出来的要小 ...