⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clubpagetemplate.java

📁 特色: 1.今晚在线社区独有的双风格分桢形式 2.社区最多可进行3级分类
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 * Created on 2006-1-16
 * Last modified on 2006-1-24
 * Powered by GamVan.com
 */
package com.gamvan.club.file;

import java.util.List;

import org.apache.log4j.Logger;

import com.gamvan.club.ClubStringReplaces;
import com.gamvan.club.item.ClubContentItem;
import com.gamvan.club.item.ClubContentReItem;
import com.gamvan.club.item.ClubTopicItem;
import com.gamvan.club.item.ClubTopicReItem;
import com.gamvan.club.topic.ClubTopicType;
import com.gamvan.tools.EncodeString;
import com.gamvan.tools.FileOperate;
import com.gamvan.tools.TypeChange;

public class ClubPageTemplate extends ClubPageItem{

	private static final long serialVersionUID = 1L;
	private StringBuffer sb = new StringBuffer();
	private ClubTopicType ctt = new ClubTopicType();
	private ClubStringReplaces csrs = new ClubStringReplaces();
	private EncodeString es = new EncodeString();
	
	private static final Logger logger = 
		Logger.getLogger(ClubPageTemplate.class.getName());
				
				
	public ClubPageTemplate(){

	}

	/**
	 * 读取模版文件
	 * @param filepath
	 * @param filename
	 * @return
	 * com.gamvan.club.file
	 */
	protected String readTemplate(String filepath, String filename)
	{	
		FileOperate fo = new FileOperate();
		return fo.readTxt(filepath+filename, "UTF-8");
	}
	
	/**
	 * 创建首页
	 * @param template
	 * @return
	 * com.gamvan.club.file
	 */
	public String analysisTemplate_topic(String template){
		template = template.replaceAll("\n","##n");
		template = template.replaceAll("\r","##r");
		/** 开始分析模版文件循环标签 */
		String cp = "<gv:forEach(\\p{Blank}*?)id=\"([\\d]*)\"(\\p{Blank}*?)" +
				"rows=\"([\\d]*)\"(\\p{Blank}*?)var=\"(.*?)\"" +
				"(\\p{Blank}*?)>(.*?)<\\/gv:forEach>";
		List list = EncodeString.matcherList(template, cp);
		//System.out.println(list);
		for(int i=0; i<list.size(); i++){ //取出所有循环标签
			String s = TypeChange.objOfString(list.get(i));
			s = s.replace("[","").replace("]","");
			
			//取出循环标签指定的版面ID
			int id = TypeChange.stringToShort(EncodeString.ubbPattern(s,cp,"$2")
					.replace("[","").replace("]",""));
			//取出指定显示的行数
			int rows = TypeChange.stringToInt(EncodeString.ubbPattern(s,cp,"$4")
					.replace("[","").replace("]",""));
			if(rows>1){	
				//根据版面ID取内容
				ClubPageFile cpf = new ClubPageFile();
				List topiclist = cpf.classTopicList(id, rows, (short)0, (short)0);
				/** 执行替换开始 */
				String ss = analysisTemplate_loop(list, cp, "$8", s, topiclist, null);
				template = template.replaceAll(s,ss);
			}	
		}
				
		/** 开始分析模版文件 高级循环标签 */
		cp = "<gv:forEach(\\p{Blank}*?)id=\"([\\d]*)\"(\\p{Blank}*?)" +
				"rows=\"([\\d]*)\"(\\p{Blank}*?)" +
				"type=\"([\\d]*)\"(\\p{Blank}*?)" +
				"pro=\"([\\d]*)\"(\\p{Blank}*?)" +
				"var=\"(.*?)\"(\\p{Blank}*?)>" +
				"(.*?)<\\/gv:forEach>";
		list = EncodeString.matcherList(template, cp);
		for(int i=0; i<list.size(); i++){ //取出所有循环标签
			String s = TypeChange.objOfString(list.get(i));
			s = s.replace("[","").replace("]","");
			//取出循环标签指定的版面ID
			int id = TypeChange.stringToInt(EncodeString.ubbPattern(s,cp,"$2")
					.replace("[","").replace("]",""));
			//取出指定显示的行数
			int rows = TypeChange.stringToInt(EncodeString.ubbPattern(s,cp,"$4")
					.replace("[","").replace("]",""));
			//取出指定的主题型别
			short type = TypeChange.stringToShort(EncodeString.ubbPattern(s,cp,"$6")
					.replace("[","").replace("]",""));
			//取出指定主题属性
			short pro = TypeChange.stringToShort(EncodeString.ubbPattern(s,cp,"$8")
					.replace("[","").replace("]",""));
			if(rows>1){	
				//根据版面ID取内容
				ClubPageFile cpf = new ClubPageFile();
				List topiclist = cpf.classTopicList(id, rows, type, pro);
				
				/** 执行替换开始 */
				String ss = analysisTemplate_loop(list, cp, "$12", s, topiclist, null);
				template = template.replaceAll(s, ss);
			}	
		}
		template = template.replaceAll("##n","\n");
		template = template.replaceAll("##r","\r");
		return template;
	}
	
	/**
	 * 替换文章显示页内容
	 * @param template
	 * @param cpi
	 * @return
	 * com.gamvan.club.file
	 */
	public String analysisTemplate_view(String template, ClubPageItem cpi){
		template = template.replaceAll("\n","##n");
		template = template.replaceAll("\r","##r");
		template = template.replace("$","###@");
		template = templatePublic(template);
		//String cp = EncodeString.matcherStr(str, "<gv:view>(.*?)<\\/gv:view>", "");
		List list = EncodeString.matcherList(template,"<gv:view>(.*?)<\\/gv:view>");
		String s1, s2;
		for(int i=0; i<list.size(); i++){
			s1 = TypeChange.objOfString(list.get(i));
			s2 = analysisTemplate_page(s1, cpi);
			//System.out.println(template.indexOf(s1));
			template = template.replace(s1,s2);
			//System.out.println(template.indexOf(s2));
		}
		template = EncodeString.ubbPattern
			(template,"<gv:view>(.*?)<\\/gv:view>","$1");
		template = template.replace("###@","$");
		template = template.replaceAll("##n","\n");
		template = template.replaceAll("##r","\r");
		return template;
	}
		
	/**
	 * 根据传入的主题List替换循环体内标签
	 * @param template
	 * @param topiclist
	 * @param contentlist
	 * @return
	 * com.gamvan.club.file
	 */
	public String analysisTemplate_loop_topic(String template, List topiclist
			, List contentlist)
	{
		if(template ==null||template .equals("")||topiclist==null)
		{
            return "";
        }
		template = template.replaceAll("\n","##n");
		template = template.replaceAll("\r","##r");
		String cp = "<gv:forEach(\\p{Blank}*?)var=\"(.*?)\"(\\p{Blank}*?)>(.*?)<\\/gv:forEach>";
		List list = EncodeString.matcherList(template, cp);
		/** 执行替换开始 */
		template = analysisTemplate_loop(list, cp, "$4", template, topiclist, contentlist);
		
		template = templatePublic(template);
		
		template = template.replace("###@","$");
		template = template.replaceAll("##n","\n");
		template = template.replaceAll("##r","\r");
		return template;
	}
	
	/**
	 * 模版循环标签部分,根据var部分判断是回复表还是主题表,循环的次数根据List数组长度
	 * @param list 模版文件内所有匹配cp的循环标签的集合,这样可以允许一个页面内出现多个循环标签
	 * @param cp 匹配循环标签的正则表达式
	 * @param si 循环标签内正则匹配的内容 如$1、$3等
	 * @param template 模版文件数据
	 * @param topiclist 主题数组
	 * @param contentlist 内容数组
	 * @return
	 * com.gamvan.club.file
	 */
	public String analysisTemplate_loop(List list, String cp, String si
			,  String template
			, List topiclist, List contentlist)
	{
		if(template ==null || template .equals(""))
		{
            return "";
        }
		if(topiclist==null)
		{
			return EncodeString.ubbPattern(template,cp,si);
		}
		if(list.size()<1){
			return EncodeString.ubbPattern(template,cp,si);
		}
		boolean isRe = true;
		StringBuffer sb = new StringBuffer();
		String s = "";
		/**
		 * 模版里的多个循环标签一一提取出来做替换
		 */
		for(int i=0; i<list.size(); i++){
			String temp1 = TypeChange.objOfString(list.get(i));
			String temp = EncodeString.ubbPattern(temp1, cp, si);
			/**
			 * 根据var值确定是主题表内容还是回复表内容
			 */
			if(temp1.indexOf("var=\"re\"")!=-1){
				isRe = true;
			}else if(temp1.indexOf("var=\"t\"")!=-1){
				isRe = false;
			}else{
				temp1 = "";
			}
			/**
			 * List循环替换循环标签内的内容,放入到sb临时字符串内,最后一次性替换模版里的内容
			 */
			for(int i2=0; i2<topiclist.size(); i2++){
				
				if(isRe){
					try{
						ClubTopicReItem ctri = (ClubTopicReItem)topiclist.get(i2);
						topicID = ctri.getTopicID();
						topicID_re = ctri.getTopicReID();
						topic_re = ctri.getTopic();
						topicID_re = ctri.getTopicReID();
						topicAddTime_re = ctri.getTopicAddTime();
						userID_re = ctri.getUserID();
						userName_re = ctri.getUserName();
						ccID = ctri.getCcID();
						if(contentlist!=null){
							ClubContentReItem ccri = (ClubContentReItem)contentlist.get(i2);
							content_re = ccri.getContent();
							contentUrl_re = ccri.getContentUrl();
							contentImg_re = ccri.getContentImg();
						}
					}catch(Exception e){
						logger.error("提取回复表文章出错:"+e.toString());
					}
				}else{
					try{
						ClubTopicItem cti = (ClubTopicItem)topiclist.get(i2);
						ccID = cti.getCcID();
						ccID1 = cti.getCcID1();
						ccID2 = cti.getCcID2();
						topicID = cti.getTopicID();
						topic = cti.getTopic();
						topicAddTime = cti.getTopicAddTime();
						userID = cti.getUserID();
						userName = cti.getUserName();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -