private async Task <FileResult> GetChannelTemplateAsync(VisualInfo visualInfo, StringBuilder contentBuilder) { var nodeInfo = await _channelRepository.GetAsync(visualInfo.ChannelId); if (nodeInfo == null) { return(null); } if (nodeInfo.ParentId > 0) { if (!string.IsNullOrEmpty(nodeInfo.LinkUrl)) { HttpContext.Response.Redirect(nodeInfo.LinkUrl); return(null); } } var stlLabelList = ParseUtils.GetStlLabels(contentBuilder.ToString()); //如果标签中存在Content var stlContentElement = string.Empty; foreach (var label in stlLabelList) { if (StlParserUtility.IsStlChannelElement(label, StlParserUtility.PageContent)) { stlContentElement = label; break; } } if (!string.IsNullOrEmpty(stlContentElement)) //内容存在 { var innerBuilder = new StringBuilder(stlContentElement); await _parseManager.ParseInnerContentAsync(innerBuilder); var contentAttributeHtml = innerBuilder.ToString(); var pageCount = StringUtils.GetCount(Constants.PagePlaceHolder, contentAttributeHtml) + 1; //一共需要的页数 if (pageCount > 1) { await _parseManager.ParseAsync(contentBuilder, visualInfo.FilePath, true); for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++) { var index = contentAttributeHtml.IndexOf(Constants.PagePlaceHolder, StringComparison.Ordinal); var length = index == -1 ? contentAttributeHtml.Length : index; if (currentPageIndex == visualInfo.PageIndex) { var pagedContentAttributeHtml = contentAttributeHtml.Substring(0, length); var pagedBuilder = new StringBuilder(contentBuilder.ToString() .Replace(stlContentElement, pagedContentAttributeHtml)); await _parseManager.ReplacePageElementsInChannelPageAsync(pagedBuilder, stlLabelList, currentPageIndex, pageCount, 0); return(GetResponse(pagedBuilder.ToString())); } if (index != -1) { contentAttributeHtml = contentAttributeHtml.Substring(length + Constants.PagePlaceHolder.Length); } } return(null); } contentBuilder.Replace(stlContentElement, contentAttributeHtml); } if (ParseUtils.IsStlElementExists(StlPageContents.ElementName, stlLabelList)) //如果标签中存在<stl:pageContents> { var stlElement = ParseUtils.GetStlElement(StlPageContents.ElementName, stlLabelList); var stlElementTranslated = _parseManager.StlEncrypt(stlElement); var pageContentsElementParser = await StlPageContents.GetAsync(stlElement, _parseManager); var(pageCount, totalNum) = pageContentsElementParser.GetPageCount(); await _parseManager.ParseAsync(contentBuilder, visualInfo.FilePath, true); for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++) { if (currentPageIndex == visualInfo.PageIndex) { var pageHtml = await pageContentsElementParser.ParseAsync(totalNum, currentPageIndex, pageCount, false); var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlElementTranslated, pageHtml)); await _parseManager.ReplacePageElementsInChannelPageAsync(pagedBuilder, stlLabelList, currentPageIndex, pageCount, totalNum); return(GetResponse(pagedBuilder.ToString())); } } } else if (ParseUtils.IsStlElementExists(StlPageChannels.ElementName, stlLabelList)) //如果标签中存在<stl:pageChannels> { var stlElement = ParseUtils.GetStlElement(StlPageChannels.ElementName, stlLabelList); var stlElementTranslated = _parseManager.StlEncrypt(stlElement); var pageChannelsElementParser = await StlPageChannels.GetAsync(stlElement, _parseManager); var pageCount = pageChannelsElementParser.GetPageCount(out var totalNum); await _parseManager.ParseAsync(contentBuilder, visualInfo.FilePath, true); for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++) { if (currentPageIndex == visualInfo.PageIndex) { var pageHtml = await pageChannelsElementParser.ParseAsync(currentPageIndex, pageCount); var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlElementTranslated, pageHtml)); await _parseManager.ReplacePageElementsInChannelPageAsync(pagedBuilder, stlLabelList, currentPageIndex, pageCount, totalNum); return(GetResponse(pagedBuilder.ToString())); } } } //如果标签中存在<stl:pageSqlContents> else if (ParseUtils.IsStlElementExists(StlPageSqlContents.ElementName, stlLabelList)) { var stlElement = ParseUtils.GetStlElement(StlPageSqlContents.ElementName, stlLabelList); var stlElementTranslated = _parseManager.StlEncrypt(stlElement); var pageSqlContentsElementParser = await StlPageSqlContents.GetAsync(stlElement, _parseManager); var pageCount = pageSqlContentsElementParser.GetPageCount(out var totalNum); await _parseManager.ParseAsync(contentBuilder, visualInfo.FilePath, true); for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++) { if (currentPageIndex == visualInfo.PageIndex) { var pageHtml = await pageSqlContentsElementParser.ParseAsync(totalNum, currentPageIndex, pageCount, false); var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlElementTranslated, pageHtml)); await _parseManager.ReplacePageElementsInChannelPageAsync(pagedBuilder, stlLabelList, currentPageIndex, pageCount, totalNum); return(GetResponse(pagedBuilder.ToString())); } } } await _parseManager.ParseAsync(contentBuilder, visualInfo.FilePath, true); return(GetResponse(contentBuilder.ToString())); }