internal static string ParseStlElement(string stlElement, PageInfo pageInfo, ContextInfo contextInfo) { string parsedContent = null; var xmlDocument = StlParserUtility.GetXmlDocument(stlElement, contextInfo.IsInnerElement); XmlNode node = xmlDocument.DocumentElement; if (node != null) { node = node.FirstChild; if (node?.Name != null) { var elementName = node.Name.ToLower(); if (ElementsToTranslateDic.ContainsKey(elementName)) { Func <string, string> func; if (ElementsToTranslateDic.TryGetValue(elementName, out func)) { parsedContent = func(stlElement); } } else if (ElementsToParseDic.ContainsKey(elementName)) { Func <string, XmlNode, PageInfo, ContextInfo, string> func; if (ElementsToParseDic.TryGetValue(elementName, out func)) { parsedContent = func(stlElement, node, pageInfo, contextInfo); } } } } if (parsedContent == null) { return(stlElement); } return(contextInfo.IsInnerElement ? parsedContent : StlParserUtility.GetBackHtml(parsedContent, pageInfo)); }
public string Parse(int totalNum, int currentPageIndex, int pageCount, bool isStatic) { if (isStatic) { var maxPage = ListInfo.MaxPage; if (maxPage == 0) { maxPage = _pageInfo.SiteInfo.Additional.CreateStaticMaxPage; } if (maxPage > 0 && currentPageIndex + 1 > maxPage) { return(ParseDynamic(totalNum, currentPageIndex, pageCount)); } } var parsedContent = string.Empty; _contextInfo.PageItemIndex = currentPageIndex * ListInfo.PageNum; try { if (_node != null) { if (!string.IsNullOrEmpty(SqlString)) { //var pageSqlString = DataProvider.DatabaseDao.GetPageSqlString(SqlString, ListInfo.OrderByString, totalNum, ListInfo.PageNum, currentPageIndex); var pageSqlString = Database.GetStlPageSqlString(SqlString, ListInfo.OrderByString, totalNum, ListInfo.PageNum, currentPageIndex); var datasource = DataProvider.DatabaseDao.GetDataSource(pageSqlString); if (ListInfo.Layout == ELayout.None) { var rptContents = new Repeater(); if (!string.IsNullOrEmpty(ListInfo.HeaderTemplate)) { rptContents.HeaderTemplate = new SeparatorTemplate(ListInfo.HeaderTemplate); } if (!string.IsNullOrEmpty(ListInfo.FooterTemplate)) { rptContents.FooterTemplate = new SeparatorTemplate(ListInfo.FooterTemplate); } if (!string.IsNullOrEmpty(ListInfo.SeparatorTemplate)) { rptContents.SeparatorTemplate = new SeparatorTemplate(ListInfo.SeparatorTemplate); } if (!string.IsNullOrEmpty(ListInfo.AlternatingItemTemplate)) { rptContents.AlternatingItemTemplate = new RepeaterTemplate(ListInfo.AlternatingItemTemplate, ListInfo.SelectedItems, ListInfo.SelectedValues, ListInfo.SeparatorRepeatTemplate, ListInfo.SeparatorRepeat, _pageInfo, EContextType.Content, _contextInfo); } rptContents.ItemTemplate = new RepeaterTemplate(ListInfo.ItemTemplate, ListInfo.SelectedItems, ListInfo.SelectedValues, ListInfo.SeparatorRepeatTemplate, ListInfo.SeparatorRepeat, _pageInfo, EContextType.Content, _contextInfo); rptContents.DataSource = datasource; rptContents.DataBind(); if (rptContents.Items.Count > 0) { parsedContent = ControlUtils.GetControlRenderHtml(rptContents); } } else { var pdlContents = new ParsedDataList(); //设置显示属性 TemplateUtility.PutListInfoToMyDataList(pdlContents, ListInfo); pdlContents.ItemTemplate = new DataListTemplate(ListInfo.ItemTemplate, ListInfo.SelectedItems, ListInfo.SelectedValues, ListInfo.SeparatorRepeatTemplate, ListInfo.SeparatorRepeat, _pageInfo, EContextType.Content, _contextInfo); if (!string.IsNullOrEmpty(ListInfo.HeaderTemplate)) { pdlContents.HeaderTemplate = new SeparatorTemplate(ListInfo.HeaderTemplate); } if (!string.IsNullOrEmpty(ListInfo.FooterTemplate)) { pdlContents.FooterTemplate = new SeparatorTemplate(ListInfo.FooterTemplate); } if (!string.IsNullOrEmpty(ListInfo.SeparatorTemplate)) { pdlContents.SeparatorTemplate = new SeparatorTemplate(ListInfo.SeparatorTemplate); } if (!string.IsNullOrEmpty(ListInfo.AlternatingItemTemplate)) { pdlContents.AlternatingItemTemplate = new DataListTemplate(ListInfo.AlternatingItemTemplate, ListInfo.SelectedItems, ListInfo.SelectedValues, ListInfo.SeparatorRepeatTemplate, ListInfo.SeparatorRepeat, _pageInfo, EContextType.Content, _contextInfo); } pdlContents.DataSource = datasource; pdlContents.DataKeyField = ContentAttribute.Id; pdlContents.DataBind(); if (pdlContents.Items.Count > 0) { parsedContent = ControlUtils.GetControlRenderHtml(pdlContents); } } } } } catch (Exception ex) { parsedContent = StlParserUtility.GetStlErrorMessage(ElementName, _stlPageContentsElement, ex); } parsedContent = StlParserUtility.GetBackHtml(parsedContent, _pageInfo); //还原翻页为0,使得其他列表能够正确解析ItemIndex _contextInfo.PageItemIndex = 0; return(parsedContent); }
public string Parse(int currentPageIndex, int pageCount) { var parsedContent = string.Empty; _contextInfo.PageItemIndex = currentPageIndex * DisplayInfo.PageNum; try { if (_node != null) { if (_dataSet != null) { var objPage = new PagedDataSource { DataSource = _dataSet.Tables[0].DefaultView }; //分页类 if (pageCount > 1) { objPage.AllowPaging = true; objPage.PageSize = DisplayInfo.PageNum;//每页显示的项数 } else { objPage.AllowPaging = false; } objPage.CurrentPageIndex = currentPageIndex;//当前页的索引 if (DisplayInfo.Layout == ELayout.None) { var rptContents = new Repeater { ItemTemplate = new RepeaterTemplate(DisplayInfo.ItemTemplate, DisplayInfo.SelectedItems, DisplayInfo.SelectedValues, DisplayInfo.SeparatorRepeatTemplate, DisplayInfo.SeparatorRepeat, _pageInfo, EContextType.Channel, _contextInfo) }; if (!string.IsNullOrEmpty(DisplayInfo.HeaderTemplate)) { rptContents.HeaderTemplate = new SeparatorTemplate(DisplayInfo.HeaderTemplate); } if (!string.IsNullOrEmpty(DisplayInfo.FooterTemplate)) { rptContents.FooterTemplate = new SeparatorTemplate(DisplayInfo.FooterTemplate); } if (!string.IsNullOrEmpty(DisplayInfo.SeparatorTemplate)) { rptContents.SeparatorTemplate = new SeparatorTemplate(DisplayInfo.SeparatorTemplate); } if (!string.IsNullOrEmpty(DisplayInfo.AlternatingItemTemplate)) { rptContents.AlternatingItemTemplate = new RepeaterTemplate(DisplayInfo.AlternatingItemTemplate, DisplayInfo.SelectedItems, DisplayInfo.SelectedValues, DisplayInfo.SeparatorRepeatTemplate, DisplayInfo.SeparatorRepeat, _pageInfo, EContextType.Channel, _contextInfo); } rptContents.DataSource = objPage; rptContents.DataBind(); if (rptContents.Items.Count > 0) { parsedContent = ControlUtils.GetControlRenderHtml(rptContents); } } else { var pdlContents = new ParsedDataList(); //设置显示属性 TemplateUtility.PutListInfoToMyDataList(pdlContents, DisplayInfo); //设置列表模板 pdlContents.ItemTemplate = new DataListTemplate(DisplayInfo.ItemTemplate, DisplayInfo.SelectedItems, DisplayInfo.SelectedValues, DisplayInfo.SeparatorRepeatTemplate, DisplayInfo.SeparatorRepeat, _pageInfo, EContextType.Channel, _contextInfo); if (!string.IsNullOrEmpty(DisplayInfo.HeaderTemplate)) { pdlContents.HeaderTemplate = new SeparatorTemplate(DisplayInfo.HeaderTemplate); } if (!string.IsNullOrEmpty(DisplayInfo.FooterTemplate)) { pdlContents.FooterTemplate = new SeparatorTemplate(DisplayInfo.FooterTemplate); } if (!string.IsNullOrEmpty(DisplayInfo.SeparatorTemplate)) { pdlContents.SeparatorTemplate = new SeparatorTemplate(DisplayInfo.SeparatorTemplate); } if (!string.IsNullOrEmpty(DisplayInfo.AlternatingItemTemplate)) { pdlContents.AlternatingItemTemplate = new DataListTemplate(DisplayInfo.AlternatingItemTemplate, DisplayInfo.SelectedItems, DisplayInfo.SelectedValues, DisplayInfo.SeparatorRepeatTemplate, DisplayInfo.SeparatorRepeat, _pageInfo, EContextType.Channel, _contextInfo); } pdlContents.DataSource = objPage; pdlContents.DataKeyField = ChannelAttribute.Id; pdlContents.DataBind(); if (pdlContents.Items.Count > 0) { parsedContent = ControlUtils.GetControlRenderHtml(pdlContents); } } } } } catch (Exception ex) { parsedContent = StlParserUtility.GetStlErrorMessage(ElementName, _stlPageChannelsElement, ex); } //还原翻页为0,使得其他列表能够正确解析ItemIndex _contextInfo.PageItemIndex = 0; return(StlParserUtility.GetBackHtml(parsedContent, _pageInfo)); }
public static string ParseDynamicContent(int siteId, int channelId, int contentId, int templateId, bool isPageRefresh, string templateContent, string pageUrl, int pageIndex, string ajaxDivId, NameValueCollection queryString, IUserInfo userInfo) { var templateInfo = TemplateManager.GetTemplateInfo(siteId, templateId); //TemplateManager.GetTemplateInfo(siteID, channelID, templateType); var siteInfo = SiteManager.GetSiteInfo(siteId); var pageInfo = new PageInfo(channelId, contentId, siteInfo, templateInfo, new Dictionary <string, object>()) { UniqueId = 1000, UserInfo = userInfo }; var contextInfo = new ContextInfo(pageInfo); templateContent = StlRequestEntities.ParseRequestEntities(queryString, templateContent); var contentBuilder = new StringBuilder(templateContent); var stlElementList = StlParserUtility.GetStlElementList(contentBuilder.ToString()); //如果标签中存在<stl:pageContents> if (StlParserUtility.IsStlElementExists(StlPageContents.ElementName, stlElementList)) { var stlElement = StlParserUtility.GetStlElement(StlPageContents.ElementName, stlElementList); var stlPageContentsElement = stlElement; var stlPageContentsElementReplaceString = stlElement; var pageContentsElementParser = new StlPageContents(stlPageContentsElement, pageInfo, contextInfo, true); int totalNum; var pageCount = pageContentsElementParser.GetPageCount(out totalNum); for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++) { if (currentPageIndex == pageIndex) { var pageHtml = pageContentsElementParser.Parse(totalNum, currentPageIndex, pageCount, false); contentBuilder.Replace(stlPageContentsElementReplaceString, pageHtml); StlParserManager.ReplacePageElementsInDynamicPage(contentBuilder, pageInfo, stlElementList, pageUrl, pageInfo.PageChannelId, currentPageIndex, pageCount, totalNum, isPageRefresh, ajaxDivId); break; } } } //如果标签中存在<stl:pageChannels> else if (StlParserUtility.IsStlElementExists(StlPageChannels.ElementName, stlElementList)) { var stlElement = StlParserUtility.GetStlElement(StlPageChannels.ElementName, stlElementList); var stlPageChannelsElement = stlElement; var stlPageChannelsElementReplaceString = stlElement; var pageChannelsElementParser = new StlPageChannels(stlPageChannelsElement, pageInfo, contextInfo, true); int totalNum; var pageCount = pageChannelsElementParser.GetPageCount(out totalNum); for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++) { if (currentPageIndex == pageIndex) { var pageHtml = pageChannelsElementParser.Parse(currentPageIndex, pageCount); contentBuilder.Replace(stlPageChannelsElementReplaceString, pageHtml); StlParserManager.ReplacePageElementsInDynamicPage(contentBuilder, pageInfo, stlElementList, pageUrl, pageInfo.PageChannelId, currentPageIndex, pageCount, totalNum, isPageRefresh, ajaxDivId); break; } } } //如果标签中存在<stl:pageSqlContents> else if (StlParserUtility.IsStlElementExists(StlPageSqlContents.ElementName, stlElementList)) { var stlElement = StlParserUtility.GetStlElement(StlPageSqlContents.ElementName, stlElementList); var stlPageSqlContentsElement = stlElement; var stlPageSqlContentsElementReplaceString = stlElement; var pageSqlContentsElementParser = new StlPageSqlContents(stlPageSqlContentsElement, pageInfo, contextInfo, true); int totalNum; var pageCount = pageSqlContentsElementParser.GetPageCount(out totalNum); for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++) { if (currentPageIndex == pageIndex) { var pageHtml = pageSqlContentsElementParser.Parse(currentPageIndex, pageCount); contentBuilder.Replace(stlPageSqlContentsElementReplaceString, pageHtml); StlParserManager.ReplacePageElementsInDynamicPage(contentBuilder, pageInfo, stlElementList, pageUrl, pageInfo.PageChannelId, currentPageIndex, pageCount, totalNum, isPageRefresh, ajaxDivId); break; } } } else if (StlParserUtility.IsStlElementExists(StlPageItems.ElementName, stlElementList)) { var pageCount = TranslateUtils.ToInt(queryString["pageCount"]); var totalNum = TranslateUtils.ToInt(queryString["totalNum"]); var pageContentsAjaxDivId = queryString["pageContentsAjaxDivId"]; for (var currentPageIndex = 0; currentPageIndex < pageCount; currentPageIndex++) { if (currentPageIndex == pageIndex) { StlParserManager.ReplacePageElementsInDynamicPage(contentBuilder, pageInfo, stlElementList, pageUrl, pageInfo.PageChannelId, currentPageIndex, pageCount, totalNum, isPageRefresh, pageContentsAjaxDivId); break; } } } StlParserManager.ParseInnerContent(contentBuilder, pageInfo, contextInfo); //var parsedContent = StlParserUtility.GetBackHtml(contentBuilder.ToString(), pageInfo); //return pageInfo.HeadCodesHtml + pageInfo.BodyCodesHtml + parsedContent + pageInfo.FootCodesHtml; return(StlParserUtility.GetBackHtml(contentBuilder.ToString(), pageInfo)); }
internal static string ParseStlElement(string stlElement, PageInfo pageInfo, ContextInfo contextInfo) { string parsedContent = null; //var parsedContent = StlCacheManager.ParsedContent.GetParsedContent(stlElement, pageInfo, contextInfo); //if (parsedContent != null) return parsedContent; var xmlDocument = StlParserUtility.GetXmlDocument(stlElement, contextInfo.IsInnerElement); XmlNode node = xmlDocument.DocumentElement; if (node != null) { node = node.FirstChild; if (node?.Name != null) { var elementName = node.Name.ToLower(); if (ElementsToTranslateDic.ContainsKey(elementName)) { Func <string, string> func; if (ElementsToTranslateDic.TryGetValue(elementName, out func)) { parsedContent = func(stlElement); } } else if (ElementsToParseDic.ContainsKey(elementName)) { var isDynamic = false; var attributes = new Dictionary <string, string>(); var innerXml = StringUtils.Trim(node.InnerXml); var childNodes = node.ChildNodes; var ie = node.Attributes?.GetEnumerator(); if (ie != null) { while (ie.MoveNext()) { var attr = (XmlAttribute)ie.Current; if (StringUtils.EqualsIgnoreCase(attr.Name, "isDynamic")) { isDynamic = TranslateUtils.ToBool(attr.Value, false); } else { var key = attr.Name; if (!string.IsNullOrEmpty(key)) { var value = attr.Value; if (string.IsNullOrEmpty(StringUtils.Trim(value))) { value = string.Empty; } attributes[key] = value; } } } } if (isDynamic) { parsedContent = StlDynamic.ParseDynamicElement(stlElement, pageInfo, contextInfo); } else { try { Func <PageInfo, ContextInfo, string> func; if (ElementsToParseDic.TryGetValue(elementName, out func)) { parsedContent = func(pageInfo, contextInfo.Clone(stlElement, attributes, innerXml, childNodes)); } } catch (Exception ex) { parsedContent = StlParserUtility.GetStlErrorMessage(elementName, stlElement, ex); } } } else { var parsers = PluginStlParserContentManager.GetParses(); if (parsers.ContainsKey(elementName)) { var isDynamic = false; var attributes = new Dictionary <string, string>(); var innerXml = StringUtils.Trim(node.InnerXml); var ie = node.Attributes?.GetEnumerator(); if (ie != null) { while (ie.MoveNext()) { var attr = (XmlAttribute)ie.Current; if (StringUtils.EqualsIgnoreCase(attr.Name, "isDynamic")) { isDynamic = TranslateUtils.ToBool(attr.Value, false); } else { var key = attr.Name; if (!string.IsNullOrEmpty(key)) { var value = attr.Value; if (string.IsNullOrEmpty(StringUtils.Trim(value))) { value = string.Empty; } attributes[key] = value; } } } } if (isDynamic) { parsedContent = StlDynamic.ParseDynamicElement(stlElement, pageInfo, contextInfo); } else { try { Func <PluginParseContext, string> func; if (parsers.TryGetValue(elementName, out func)) { var context = new PluginParseContext(attributes, innerXml, pageInfo, contextInfo); parsedContent = func(context); } } catch (Exception ex) { parsedContent = StlParserUtility.GetStlErrorMessage(elementName, stlElement, ex); } } } } } } if (parsedContent == null) { parsedContent = stlElement; } else { parsedContent = contextInfo.IsInnerElement ? parsedContent : StlParserUtility.GetBackHtml(parsedContent, pageInfo); } //StlCacheManager.ParsedContent.SetParsedContent(stlElement, pageInfo, contextInfo, parsedContent); return(parsedContent); }