public static async Task <string> ParseInDynamicPageAsync(IParseManager parseManager, string stlElement, int currentPageIndex, int pageCount, int totalNum, bool isPageRefresh, string ajaxDivId) { string parsedContent; try { var stlElementInfo = StlParserUtility.ParseStlElement(stlElement); if (pageCount <= 1) { return(string.Empty); } var index = stlElement.IndexOf(">", StringComparison.Ordinal) + 1; var length = stlElement.LastIndexOf("<", StringComparison.Ordinal) - index; if (index <= 0 || length <= 0) { stlElement = stlElementInfo.InnerHtml; } else { stlElement = stlElement.Substring(index, length); } parsedContent = await parseManager.ParseStlPageItemsInDynamicPageAsync(stlElement, currentPageIndex, pageCount, totalNum, isPageRefresh, ajaxDivId); } catch (Exception ex) { parsedContent = await parseManager.AddStlErrorLogAsync(ElementName, stlElement, ex); } return(parsedContent); }
//private readonly DataSet _dataSet; public static async Task <StlPageSqlContents> GetAsync(string stlPageSqlContentsElement, IParseManager parseManager) { var stlPageSqlContents = new StlPageSqlContents { StlPageSqlContentsElement = stlPageSqlContentsElement, ParseManager = parseManager }; try { var stlElementInfo = StlParserUtility.ParseStlElement(stlPageSqlContentsElement, -1); parseManager.ContextInfo = parseManager.ContextInfo.Clone(ElementName, stlPageSqlContentsElement, stlElementInfo.InnerHtml, stlElementInfo.Attributes, stlElementInfo.StartIndex); stlPageSqlContents.ListInfo = await ListInfo.GetListInfoAsync(parseManager, ParseType.SqlContent); var sqlString = stlPageSqlContents.ListInfo.QueryString; if (sqlString.IndexOf(" ORDER BY", StringComparison.OrdinalIgnoreCase) == -1 && !string.IsNullOrEmpty(stlPageSqlContents.ListInfo.Order)) { if (stlPageSqlContents.ListInfo.Order.IndexOf(" ORDER BY", StringComparison.OrdinalIgnoreCase) == -1) { sqlString += $" ORDER BY {stlPageSqlContents.ListInfo.Order}"; } else { sqlString += $" {stlPageSqlContents.ListInfo.Order}"; } } stlPageSqlContents.SqlString = sqlString; // stlPageSqlContents.SqlString = stlPageSqlContents.ListInfo.QueryString; // if (string.IsNullOrWhiteSpace(stlPageSqlContents.ListInfo.Order)) // { // var pos = stlPageSqlContents.SqlString.LastIndexOf(" ORDER BY ", StringComparison.OrdinalIgnoreCase); // if (pos > -1) // { // stlPageSqlContents.SqlString = stlPageSqlContents.SqlString.Substring(0, pos); // stlPageSqlContents.ListInfo.Order = stlPageSqlContents.SqlString.Substring(pos); // } // } // else // { // if (stlPageSqlContents.ListInfo.Order.IndexOf("ORDER BY", StringComparison.OrdinalIgnoreCase) == -1) // { // stlPageSqlContents.ListInfo.Order = $"ORDER BY {stlPageSqlContents.ListInfo.Order}"; // } // } //_dataSet = StlDataUtility.GetPageSqlContentsDataSet(_listInfo.ConnectionString, _listInfo.QueryString, _listInfo.StartNum, _listInfo.PageNum, _listInfo.OrderByString); } catch (Exception ex) { await parseManager.AddStlErrorLogAsync(ElementName, stlPageSqlContentsElement, ex); stlPageSqlContents.ListInfo = new ListInfo(); } return(stlPageSqlContents); }
//对“翻页项容器”(stl:pageItems)元素进行解析,此元素在生成页面时单独解析,不包含在ParseStlElement方法中。 public static async Task <string> ParseAsync(IParseManager parseManager, string stlElement, int channelId, int contentId, int currentPageIndex, int pageCount, int totalNum, ParseType contextType) { var pageInfo = parseManager.PageInfo; await pageInfo.AddPageHeadCodeIfNotExistsAsync(ParsePage.Const.Jquery); string parsedContent; try { var stlElementInfo = StlParserUtility.ParseStlElement(stlElement); if (stlElementInfo.Attributes[Context] != null) { contextType = TranslateUtils.ToEnum(stlElementInfo.Attributes[Context], ParseType.Undefined); } if (pageCount <= 1) { return(string.Empty); } bool isXmlContent; var index = stlElement.IndexOf(">", StringComparison.Ordinal) + 1; var length = stlElement.LastIndexOf("<", StringComparison.Ordinal) - index; if (index <= 0 || length <= 0) { stlElement = stlElementInfo.InnerHtml; isXmlContent = true; } else { stlElement = stlElement.Substring(index, length); isXmlContent = false; } parsedContent = await parseManager.ParseStlPageItemsAsync(stlElement, channelId, contentId, currentPageIndex, pageCount, totalNum, isXmlContent, contextType); var innerBuilder = new StringBuilder(parsedContent); await parseManager.ParseInnerContentAsync(innerBuilder); parsedContent = innerBuilder.ToString(); } catch (Exception ex) { parsedContent = await parseManager.AddStlErrorLogAsync(ElementName, stlElement, ex); } return(parsedContent); }
public async Task <ActionResult <StringResult> > Submit([FromBody] StlSearch.SearchRequest request) { var template = string.Empty; try { var form = GetPostCollection(request); template = _settingsManager.Decrypt(request.Template); var pageIndex = request.Page - 1; if (pageIndex < 0) { pageIndex = 0; } var templateInfo = new Template { Id = 0, SiteId = request.SiteId, TemplateName = string.Empty, TemplateType = TemplateType.FileTemplate, RelatedFileName = string.Empty, CreatedFileFullName = string.Empty, CreatedFileExtName = string.Empty, DefaultTemplate = false }; var site = await _siteRepository.GetAsync(request.SiteId); await _parseManager.InitAsync(site, request.SiteId, 0, templateInfo); _parseManager.PageInfo.User = await _authManager.GetUserAsync(); var contentBuilder = new StringBuilder(StlRequestEntities.ParseRequestEntities(form, template)); var stlLabelList = StlParserUtility.GetStlLabelList(contentBuilder.ToString()); if (StlParserUtility.IsStlElementExists(StlPageContents.ElementName, stlLabelList)) { var stlElement = StlParserUtility.GetStlElement(StlPageContents.ElementName, stlLabelList); var stlPageContentsElement = stlElement; var stlPageContentsElementReplaceString = stlElement; var whereString = await _contentRepository.GetWhereStringByStlSearchAsync(_databaseManager, request.IsAllSites, request.SiteName, request.SiteDir, request.SiteIds, request.ChannelIndex, request.ChannelName, request.ChannelIds, request.Type, request.Word, request.DateAttribute, request.DateFrom, request.DateTo, request.Since, request.SiteId, StlSearch.GetSearchExcludeAttributeNames, form); var stlPageContents = await StlPageContents.GetAsync(stlPageContentsElement, _parseManager, request.PageNum, whereString); var(pageCount, totalNum) = stlPageContents.GetPageCount(); if (totalNum == 0) { return(NotFound()); } for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++) { if (currentPageIndex != pageIndex) { continue; } var pageHtml = await stlPageContents.ParseAsync(totalNum, currentPageIndex, pageCount, false); var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlPageContentsElementReplaceString, pageHtml)); await _parseManager.ReplacePageElementsInSearchPageAsync(pagedBuilder, stlLabelList, request.AjaxDivId, currentPageIndex, pageCount, totalNum); if (request.IsHighlight && !string.IsNullOrEmpty(request.Word)) { var pagedContents = pagedBuilder.ToString(); pagedBuilder = new StringBuilder(); pagedBuilder.Append(RegexUtils.Replace( $"({request.Word.Replace(" ", "\\s")})(?!</a>)(?![^><]*>)", pagedContents, $"<span style='color:#cc0000'>{request.Word}</span>")); } await _parseManager.ParseAsync(pagedBuilder, string.Empty, false); return(new StringResult { Value = pagedBuilder.ToString() }); } } else if (StlParserUtility.IsStlElementExists(StlPageSqlContents.ElementName, stlLabelList)) { var stlElement = StlParserUtility.GetStlElement(StlPageSqlContents.ElementName, stlLabelList); var stlPageSqlContents = await StlPageSqlContents.GetAsync(stlElement, _parseManager); var pageCount = stlPageSqlContents.GetPageCount(out var totalNum); if (totalNum == 0) { return(NotFound()); } for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++) { if (currentPageIndex != pageIndex) { continue; } var pageHtml = await stlPageSqlContents.ParseAsync(totalNum, currentPageIndex, pageCount, false); var pagedBuilder = new StringBuilder(contentBuilder.ToString().Replace(stlElement, pageHtml)); await _parseManager.ReplacePageElementsInSearchPageAsync(pagedBuilder, stlLabelList, request.AjaxDivId, currentPageIndex, pageCount, totalNum); if (request.IsHighlight && !string.IsNullOrEmpty(request.Word)) { var pagedContents = pagedBuilder.ToString(); pagedBuilder = new StringBuilder(); pagedBuilder.Append(RegexUtils.Replace( $"({request.Word.Replace(" ", "\\s")})(?!</a>)(?![^><]*>)", pagedContents, $"<span style='color:#cc0000'>{request.Word}</span>")); } await _parseManager.ParseAsync(pagedBuilder, string.Empty, false); return(new StringResult { Value = pagedBuilder.ToString() }); } } await _parseManager.ParseAsync(contentBuilder, string.Empty, false); return(new StringResult { Value = contentBuilder.ToString() }); } catch (Exception ex) { var message = await _parseManager.AddStlErrorLogAsync(StlSearch.ElementName, template, ex); return(this.Error(message)); } }