//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); }
public static async Task <string> ParseDynamicAsync(IParseManager parseManager, Dynamic dynamicInfo, string template) { var databaseManager = parseManager.DatabaseManager; if (string.IsNullOrEmpty(template)) { return(string.Empty); } var templateInfo = await databaseManager.TemplateRepository.GetAsync(dynamicInfo.TemplateId); var siteInfo = await databaseManager.SiteRepository.GetAsync(dynamicInfo.SiteId); await parseManager.InitAsync(EditMode.Default, siteInfo, dynamicInfo.ChannelId, dynamicInfo.ContentId, templateInfo); parseManager.PageInfo.User = dynamicInfo.User; var templateContent = StlRequest.ParseRequestEntities(dynamicInfo.QueryString, template); var contentBuilder = new StringBuilder(templateContent); var stlElementList = ParseUtils.GetStlElements(contentBuilder.ToString()); var pageIndex = dynamicInfo.Page - 1; //如果标签中存在<stl:pageContents> if (ParseUtils.IsStlElementExists(StlPageContents.ElementName, stlElementList)) { var stlElement = ParseUtils.GetStlElement(StlPageContents.ElementName, stlElementList); var stlPageContentsElement = stlElement; var stlPageContentsElementReplaceString = stlElement; var pageContentsElementParser = await StlPageContents.GetAsync(stlPageContentsElement, parseManager, dynamicInfo.Query); var(pageCount, totalNum) = pageContentsElementParser.GetPageCount(); for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++) { if (currentPageIndex == pageIndex) { var pageHtml = await pageContentsElementParser.ParseAsync(totalNum, currentPageIndex, pageCount, false); contentBuilder.Replace(stlPageContentsElementReplaceString, pageHtml); await parseManager.ReplacePageElementsInDynamicPageAsync(contentBuilder, stlElementList, currentPageIndex, pageCount, totalNum, false, dynamicInfo.ElementId); break; } } } //如果标签中存在<stl:pageChannels> else if (ParseUtils.IsStlElementExists(StlPageChannels.ElementName, stlElementList)) { var stlElement = ParseUtils.GetStlElement(StlPageChannels.ElementName, stlElementList); var stlPageChannelsElement = stlElement; var stlPageChannelsElementReplaceString = stlElement; var pageChannelsElementParser = await StlPageChannels.GetAsync(stlPageChannelsElement, parseManager); var pageCount = pageChannelsElementParser.GetPageCount(out var totalNum); for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++) { if (currentPageIndex != pageIndex) { continue; } var pageHtml = await pageChannelsElementParser.ParseAsync(currentPageIndex, pageCount); contentBuilder.Replace(stlPageChannelsElementReplaceString, pageHtml); await parseManager.ReplacePageElementsInDynamicPageAsync(contentBuilder, stlElementList, currentPageIndex, pageCount, totalNum, false, dynamicInfo.ElementId); break; } } //如果标签中存在<stl:pageSqlContents> else if (ParseUtils.IsStlElementExists(StlPageSqlContents.ElementName, stlElementList)) { var stlElement = ParseUtils.GetStlElement(StlPageSqlContents.ElementName, stlElementList); var stlPageSqlContentsElement = stlElement; var stlPageSqlContentsElementReplaceString = stlElement; var pageSqlContentsElementParser = await StlPageSqlContents.GetAsync(stlPageSqlContentsElement, parseManager); var pageCount = pageSqlContentsElementParser.GetPageCount(out var totalNum); for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++) { if (currentPageIndex != pageIndex) { continue; } var pageHtml = await pageSqlContentsElementParser.ParseAsync(totalNum, currentPageIndex, pageCount, false); contentBuilder.Replace(stlPageSqlContentsElementReplaceString, pageHtml); await parseManager.ReplacePageElementsInDynamicPageAsync(contentBuilder, stlElementList, currentPageIndex, pageCount, totalNum, false, dynamicInfo.ElementId); break; } } else if (ParseUtils.IsStlElementExists(StlPageItems.ElementName, stlElementList)) { var pageCount = TranslateUtils.ToInt(dynamicInfo.QueryString["pageCount"]); var totalNum = TranslateUtils.ToInt(dynamicInfo.QueryString["totalNum"]); var pageContentsAjaxDivId = dynamicInfo.QueryString["pageContentsAjaxDivId"]; for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++) { if (currentPageIndex != pageIndex) { continue; } await parseManager.ReplacePageElementsInDynamicPageAsync(contentBuilder, stlElementList, currentPageIndex, pageCount, totalNum, false, pageContentsAjaxDivId); break; } } await parseManager.ParseInnerContentAsync(contentBuilder); //var parsedContent = StlParserUtility.GetBackHtml(contentBuilder.ToString(), pageInfo); //return pageInfo.HeadCodesHtml + pageInfo.BodyCodesHtml + parsedContent + pageInfo.FootCodesHtml; return(contentBuilder.ToString()); }