/** * 查找页面中分页标签中出现的size的值 * * @param htmlContent * @param column * @param curPageNo * @return */ public int getPageSize(AppEntity website, String htmlContent, ColumnEntity column) { this.app = website; // 页面总数,默认为1 int pageSize = 1; // 当前列表标签中属性的集合------------------- Map<String, String> property = ListParser.listProperty(htmlContent, true); // 没有找到分页标签标签 if (property == null) { return pageSize; } String isPaging = property.get(ListParser.LIST_ISPAGING); if (!StringUtil.isBlank(isPaging) && isPaging.equals("true")) { List<Integer> columnIds = new ArrayList<Integer>(); if (column != null) { // 取出当前栏目下的子栏目Id if (column.getCategoryId() != 0) { columnIds = columnBiz.queryChildIdsByColumnId(column.getCategoryId(), app.getAppId()); columnIds.add(column.getCategoryId()); } } // 列表每页显示的数量 int size = StringUtil.string2Int(property.get(ListParser.LIST_SIZE)); // 显示文章的形式flag属性 String flag = property.get(ListParser.LIST_FLAG); // 显示文章的形式noflag属性 String noFlag = property.get(ListParser.LIST_NOFLAG); // 数据库中该栏目下文章的总数 int articleCount = articleBiz.getCountByColumnId(website.getAppId(), columnIds, flag, noFlag); // 当用户知道的显示数量小于0或大于文章实际总数时 if (size <= 0 || size > articleCount) { size = articleCount; } // 如果文章总数为0则分页数量为1 if (size == 0) { pageSize = 1; return pageSize; } pageSize = articleCount % size >= 1 ? articleCount / size + 1 : articleCount / size; } return pageSize; }
/** * 解析分页列表标签 * * @param htmlContent 模版内容 * @param column 栏目编号 * @param curPageNo 当前页码 * @return 替换好的内容 */ private String parseList() { // 替换完分页标签后的HTML代码 // 当前列表标签中属性的集合------------------- Map<String, String> property = ListParser.listProperty(htmlContent, true); if (property == null) { // 没有找到分页标签标签 return htmlContent; } String isPaging = property.get(ListParser.LIST_ISPAGING); if (isPaging != null && isPaging.equals("true")) { List<Integer> columnIds = new ArrayList<Integer>(); if (column != null) { this.curColumnId = column.getCategoryId(); columnIds = columnBiz.queryChildrenCategoryIds(curColumnId, app.getAppId(), modelId); // 取出当前栏目下的子栏目Id // 列表每页显示的数量 int size = StringUtil.string2Int(property.get(ListParser.LIST_SIZE)); // 显示文章的形式flag属性 String flag = property.get(ListParser.LIST_FLAG); // 显示文章的形式noflag属性 String noFlag = property.get(ListParser.LIST_NOFLAG); // 排序 String orderBy = property.get(ListParser.LIST_ORDERBY); String order = property.get(ListParser.LIST_ORDER); columnIds.add(curColumnId); // 数据库中该栏目下文章的总数 int articleCount = articleBiz.getCountByColumnId(app.getAppId(), columnIds, flag, noFlag); // 如果没有指定文章每页显示数量则显示所有数量 if (size <= 0 || size > articleCount) { size = articleCount; } // 当数据库中该栏目下没有该文章时不取数据 if (articleCount != 0) { if (page == null) { page = new PageUtilHtml(curPageNo, size, articleCount, listLinkPath); } /** 判断文章列表的orderby属性 */ if (StringUtil.isBlank(order)) { order = "desc"; } // 从数据库取出文章列表数组 List<ArticleEntity> listArticles = articleBiz.queryList( this.app.getAppId(), columnIds, flag, noFlag, (page.getPageNo() * page.getPageSize()), page.getPageSize(), orderBy, order.equals("desc") ? true : false); // 替换列表标签 htmlContent = new com.mingsoft.cms.parser.impl.ListParser( htmlContent, listArticles, this.getWebsiteUrl(), property, true, fieldBiz, contentBiz) .parse(); } else { htmlContent = new com.mingsoft.cms.parser.impl.ListParser( htmlContent, null, this.getWebsiteUrl(), property, true, fieldBiz, contentBiz) .parse(); } } } return htmlContent; }
/** * 解析分类标签 * * @param htmlContent 原始html内容 * @param column * @param websiteUrl 网站连接地址 * @return */ private String parseChannel() { // 替换完文章标签后的HTML模版 // 当只存在栏目ID时,解析相关的文章中的栏目标签 if (column != null) { ColumnEntity tmp = null; String columnTitle = column.getCategoryTitle(); int columnId = column.getCategoryId(); // 解析当前栏目信息 htmlContent = new ColumnParser(htmlContent, column, this.getWebsiteUrl()).parse(); // 解析当前栏目id// 替换文章所在栏目标签:{ms:field.typeid/} ArticleTypeIdParser atId = new ArticleTypeIdParser(htmlContent, columnId + ""); if (atId.isTop()) { if (column.getCategoryCategoryId() > 0) { tmp = (ColumnEntity) columnBiz.getEntity(column.getCategoryCategoryId()); columnId = tmp.getCategoryId(); } } htmlContent = new ArticleTypeIdParser(htmlContent, column.getCategoryId() + "").parse(); // 替换文章所在栏目标签:{ms:field.typetitle/} ArticleTypeTitleParser attp = new ArticleTypeTitleParser(htmlContent, columnTitle); if (attp.isTop()) { if (column.getCategoryCategoryId() > 0) { tmp = (ColumnEntity) columnBiz.getEntity(column.getCategoryCategoryId()); columnTitle = tmp.getCategoryTitle(); } } attp.setNewCotent(columnTitle); htmlContent = attp.parse(); // 替换文章栏目链接标签{ms:filed.typelink/} ArticleTypeLinkParser atlp = new ArticleTypeLinkParser( htmlContent, this.getWebsiteUrl() + column.getColumnPath() + File.separator + IParserRegexConstant.HTML_INDEX); if (atlp.isTop()) { if (column.getCategoryCategoryId() > 0) { // 如果用户写分类名称标签的时候没有使用top属性,而在使用连接标签的时候使用就再次查询分类 tmp = (ColumnEntity) columnBiz.getEntity(column.getCategoryCategoryId()); atlp.setNewCotent( this.getWebsiteUrl() + tmp.getColumnPath() + File.separator + IParserRegexConstant.HTML_INDEX); } else { atlp.setNewCotent( this.getWebsiteUrl() + column.getColumnPath() + File.separator + IParserRegexConstant.HTML_INDEX); } } htmlContent = atlp.parse(); } // //----------------------------解析栏目标签---------------------------- // //替换完列表标签后的HTML文件 String channel = htmlContent; // 查找当前模版页面拥有多少个栏目列表标签 int strNumType = ChannelParser.channelNum(channel); for (int i = 0; i < strNumType; i++) { // 当前列表栏目中属性的集合 Map<String, String> mapProperty = ChannelParser.channelProperty(channel); // 取当前标签下的栏目ID int tempColumnId = StringUtil.string2Int(mapProperty.get(ChannelParser.CHANNEL_TYPEID)); if (tempColumnId == 0 && column != null) { tempColumnId = column.getCategoryId(); } List<ColumnEntity> categoryList = null; // 指定要显示的栏目数量 String size = mapProperty.get(ChannelParser.CHANNEL_TYPE_SIZE); Integer _size = null; if (!StringUtil.isBlank(size) && StringUtil.isInteger(size)) { if (StringUtil.string2Int(size) > 0) { _size = StringUtil.string2Int(size); } } if (tempColumnId != 0) { // 取出栏目的取值范围 String type = mapProperty.get(ChannelParser.CHANNEL_TYPE); // 同级栏目是否显示属性 String childType = mapProperty.get(ChannelParser.CHANNEL_TYP_SIBLING); // 根据范围在BIZ中取出不同的栏目信息 // 判断用户填写的栏目属性,如果未填写那么取当前栏目的下级栏目,如果但前栏目没有下级栏目那么晚取本级栏目 // 如果填写:son,那么取下级栏目,没有下级栏目则取本级栏目 // 如果为:top,那么取上级栏目,如果没有上级栏目则取本级栏目 // 如果为:level,则取本级栏目 if (type == null) { categoryList = columnBiz.queryChildListByColumnId(tempColumnId, _size); // 当值为true表示不存在子级分类时,显示他的同级分类 if (childType != null && childType.equals("true") && categoryList.size() <= 0) { categoryList = columnBiz.querySibling(tempColumnId, _size); } } else if (type.equals(ChannelParser.CHANNEL_TYPE_SON)) { categoryList = columnBiz.queryChildListByColumnId(tempColumnId, _size); } else if (type.equals(ChannelParser.CHANNEL_TYPE_TOP)) { categoryList = columnBiz.queryTopSiblingListByColumnId(tempColumnId, _size); } else if (type.equals(ChannelParser.CHANNEL_TYPE_LEVEL)) { categoryList = columnBiz.querySibling(tempColumnId, _size); } // 替换栏目标签 htmlContent = new ChannelParser( channel, categoryList, this.getWebsiteUrl(), column != null ? column.getCategoryId() : 0, mapProperty.get(ChannelParser.CHANNEL_CLASS)) .parse(); // 替换完栏目标签后的HTML代码 channel = htmlContent; } else { categoryList = columnBiz.queryChild(tempColumnId, app.getAppId(), modelId, _size); // 替换栏目标签 htmlContent = new ChannelParser(channel, categoryList, this.getWebsiteUrl()).parse(); // 替换完栏目标签后的HTML代码 channel = htmlContent; } } // 替换完封面标签后的TML文件 String channelContHtml = channel; // 查找当前模版页面拥有多少个封面列表标签 int channelConNum = ChannelContParser.channelContNum(channelContHtml); for (int i = 0; i < channelConNum; i++) { // 取出当前封面标签中的封面ID int channelTypeId = ChannelContParser.channelContTypeId(channelContHtml); if (channelTypeId == 0 && column != null) { channelTypeId = column.getCategoryId(); } String channelCont = ""; // 取出当前封面的内容 if (channelTypeId != 0) { List<ArticleEntity> arctile = articleBiz.queryListByColumnId(channelTypeId); if (arctile != null) { if (arctile.size() > 0) { channelCont = arctile.get(arctile.size() - 1).getArticleContent(); } else { channelCont = arctile.get(arctile.size()).getArticleContent(); } } } // 替换封面标签 htmlContent = new ChannelContParser(channelContHtml, channelCont).parse(); channelContHtml = htmlContent; } return htmlContent; }
/** * 解析列表标签 * * @param htmlContent 模版内容 * @param linkColumnId 栏目编号 * @return 替换好的内容 */ private String parseArclist() { // 查找当前模版页面拥有多少个列表标签 int listNum = ListParser.countArcList(super.htmlContent); // List<String> noParserHtml = new ArrayList<String>(); // 替换完分页标签后的HTML代码 for (int i = 0; i < listNum; i++) { // 当前列表标签中属性的集合------------------- Map<String, String> property = ListParser.listProperty(super.htmlContent, false); // 取当前标签下的栏目ID int columnId = StringUtil.string2Int(property.get(ListParser.LIST_TYPEID)); List<Integer> columnIds = new ArrayList<Integer>(); // 列表每页显示的数量 int size = StringUtil.string2Int(property.get(ListParser.LIST_SIZE)); // 显示文章的形式flag属性 String flag = property.get(ListParser.LIST_FLAG); // 显示文章的形式noflag属性 String noFlag = property.get(ListParser.LIST_NOFLAG); // 排序 String orderBy = property.get(ListParser.LIST_ORDERBY); String order = property.get(ListParser.LIST_ORDER); // 取出当前栏目下的子栏目Id if (columnId != 0) { columnIds = columnBiz.queryChildIdsByColumnId(columnId, app.getAppId()); columnIds.add(columnId); } else { columnId = this.curColumnId; columnIds = columnBiz.queryChildrenCategoryIds(columnId, app.getAppId(), modelId); } // 数据库中该栏目下文章的总数 int articleCount = articleBiz.getCountByColumnId(app.getAppId(), columnIds, flag, noFlag); // 如果没有指定文章每页显示数量则显示所有数量 if (size <= 0 || size > articleCount) { size = articleCount; } // 当数据库中该栏目下没有该文章时不取数据 if (articleCount != 0) { /** 判断文章列表的orderby属性 */ if (StringUtil.isBlank(order)) { order = "desc"; } // 从数据库取出文章列表数组 List<ArticleEntity> listArticles = articleBiz.queryList( app.getAppId(), columnIds, flag, noFlag, 0, size, orderBy, order.equals("desc") ? true : false); // 替换列表标签 htmlContent = new com.mingsoft.cms.parser.impl.ListParser( htmlContent, listArticles, this.getWebsiteUrl(), property, false, fieldBiz, contentBiz) .parse(); } else { htmlContent = new com.mingsoft.cms.parser.impl.ListParser( htmlContent, null, this.getWebsiteUrl(), property, false, fieldBiz, contentBiz) .parse(); } } return htmlContent; }