个人博客 地址: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 Studio实战 快速、高效地构建Android应用》--Android Studio操作

    前言 摩尔定律:CPU的处理能力大约18个月翻一倍 Android&Java:想要在Android Studio中开发Android App,必须以充分了解Java为前提(Java流行的原因: ...

  2. js笔记(4)--关于在window.onload()里面定义函数,调用函数无法执行~

    由于本人学习js学不久,所以,今天刚好遇到了一个关于在window.onload里面定义函数,然后在html里面调用函数时出现错误.具体见下面: <!DOCTYPE html> <h ...

  3. 【WPF学习】第四十一章 变换

    通过使用变换(transform),许多绘图任务将更趋简单:变换是通过不加通告地切换形状或元素使用的坐标系统来改变形状或元素绘制方式的对象.在WPF中,变换由继承自System.Windows.Med ...

  4. Codeforces_731_A

    http://codeforces.com/problemset/problem/731/A 每次操作总共4种情况,判断一下就好了. #include<iostream> #include ...

  5. Deeplab

    Deeplab系列是谷歌团队的分割网络. DeepLab V1 CNN处理图像分割的两个问题 下采样导致信息丢失 maxpool造成feature map尺寸减小,细节信息丢失. 空间不变性 所谓空间 ...

  6. yum仓库配置与内网源部署记录

    使用yum的好处主要就是在于能够自动解决软件包之间的依赖.这使得维护更加容易.这篇文章主要就是记录部署内网源的操作过程以及yum工具如何使用 因为需要.数据库要从Oracle迁移至MySQL.在部署M ...

  7. MySql Docker的一些操作方法

    偶尔有需求,涉及到数据库的改动,那一定要表结构改动.程序调试都先在测试环境淬炼千百遍. 现在流行微服务.docker部署,很容易拉起一整套环境. Compose File Demo mysql: im ...

  8. 阿里云服务器ECS Ubuntu18.04 初次使用配置教程(图形界面安装)

    最近由于工作需要,要使用服务器测试,就先自已买了个服务器,就在阿里云买了一个,先买了那个叫虚拟主机的,后来发现不是我需要的,所以退了,就先了这个ECS主机.3年.如果购买就上图了.下面直接进入正题. ...

  9. js将已有数组重新分组(将数组每10项分成一组)

    项目中碰到的一个小需求:分页请求数据,一次请求60条,需要将后台返回的数组每10条分成一组渲染一个表格(表格使用的是ant-design-vue的table) 实现逻辑: var chunk = 10 ...

  10. 使用C#的计时器加观察者模式完成报警推送需求

    前言 这两天面试了一个物联网公司高级研发,面试题是下面这样子 公司领导,部门主管,小组组长,组成员4级,假如有个 疫情预警,先通知组人员(对个人,主要有一个处理就算处理了) 如果3分钟没处理,就往组长 ...