个人博客 地址: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,代码如下

代码

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. Android: Fragment编程指南

    本文来自于www.lanttor.org Fragment代表了Activity里的一个行为,或者Activity UI的一部分.你可以在一个activity里构造多个Fragment,也可以在多个a ...

  2. Java集合XMind与注意事项

    Java中集合使用时的几个注意事项: 1.ArrayList和HashMap都具有扩容 ArrayList初始化数组长度为10,扩容后的容量为原来的1.5倍. HashMap初始化的数组长度为16,扩 ...

  3. 形象解释各种卷积算法(Convolution animations)

    No padding, no strides Arbitrary padding, no strides Half padding, no strides Full padding, no strid ...

  4. Codeforces_712_B

    http://codeforces.com/problemset/problem/712/B 水,判断奇偶即可. #include<iostream> #include<string ...

  5. codeforces 1025B Weakened Common Divisor(质因数分解)

    题意: 给你n对数,求一个数,可以让他整除每一对数的其中一个 思路: 枚举第一对数的质因数,然后暴力 代码: #include<iostream> #include<cstdio&g ...

  6. Druid 0.17 入门(2)—— 安装与部署

    在Druid快速入门其实已经简单的介绍过最简化配置的单节点部署,本文我们将详细描述Druid的多种部署方式,对于测试开发环境可以选用轻量的单机部署方式,而生产环境我们最好选用集群部署的方式,确保系统的 ...

  7. 利用django打造自己的工作流平台(三):团队成员任务跟踪系统

    近期受疫情影响公司食堂不开放,为解决同事们的吃饭问题,部门需要在每周五统计下周的订餐情况:员工根据个人意愿选择是否从公司订下周的午餐和晚餐,一旦确定一周保持不变. 通常要完成一次部门内员工的订餐信息收 ...

  8. WebSocket协议分析

    WebSocket协议分析 1.什么是WebSocket协议 WebScoket协议是基于TCP协议建立的全双工通信,所谓的全双工通信就是双向同时通信. 2.WebSocket协议优点 WebSock ...

  9. finalshell连接工具

    FinalShell功能特点: 1.多平台支持Windows,Mac OS X,Linux2.多标签,批量服务器管理.3.支持登录Ssh和Windows远程桌面.4.漂亮的平滑字体显示,内置100多个 ...

  10. table-cell设置宽高、居中

    table-cell默认宽高由内容决定 <style type="text/css" rel="stylesheet"> .content { co ...