public static void Parse(SiteInfo siteInfo, PageInfo pageInfo, ContextInfo contextInfo, StringBuilder contentBuilder, string filePath, bool isDynamic) { foreach (var service in PluginManager.Services) { try { service.OnBeforeStlParse(new ParseEventArgs(pageInfo.SiteId, pageInfo.PageChannelId, pageInfo.PageContentId, pageInfo.TemplateInfo.TemplateType, pageInfo.TemplateInfo.Id, filePath, contentBuilder)); } catch (Exception ex) { LogUtils.AddPluginErrorLog(service.PluginId, ex, nameof(service.OnBeforeStlParse)); } } if (contentBuilder.Length > 0) { StlParserManager.ParseTemplateContent(contentBuilder, pageInfo, contextInfo); } if (EFileSystemTypeUtils.IsHtml(PathUtils.GetExtension(filePath))) { if (isDynamic) { var pageUrl = PageUtils.AddProtocolToUrl(PageUtils.ParseNavigationUrl($"~/{PathUtils.GetPathDifference(WebConfigUtils.PhysicalApplicationPath, filePath)}")); string templateString = $@" <base href=""{pageUrl}"" />"; StringUtils.InsertAfter(new[] { "<head>", "<HEAD>" }, contentBuilder, templateString); } if (pageInfo.SiteInfo.Additional.IsCreateBrowserNoCache) { const string templateString = @" <META HTTP-EQUIV=""Pragma"" CONTENT=""no-cache""> <META HTTP-EQUIV=""Expires"" CONTENT=""-1"">"; StringUtils.InsertAfter(new[] { "<head>", "<HEAD>" }, contentBuilder, templateString); } if (pageInfo.SiteInfo.Additional.IsCreateIe8Compatible) { const string templateString = @" <META HTTP-EQUIV=""x-ua-compatible"" CONTENT=""ie=7"" />"; StringUtils.InsertAfter(new[] { "<head>", "<HEAD>" }, contentBuilder, templateString); } if (pageInfo.SiteInfo.Additional.IsCreateJsIgnoreError) { const string templateString = @" <script type=""text/javascript"">window.onerror=function(){return true;}</script>"; StringUtils.InsertAfter(new[] { "<head>", "<HEAD>" }, contentBuilder, templateString); } if (pageInfo.PageContentId > 0 && pageInfo.SiteInfo.Additional.IsCountHits && !pageInfo.BodyCodes.ContainsKey(PageInfo.Const.JsAdStlCountHits)) { if (!pageInfo.FootCodes.ContainsKey(PageInfo.Const.JsAdStlCountHits)) { pageInfo.FootCodes.Add(PageInfo.Const.JsAdStlCountHits, $@" <script src=""{ApiRouteActionsAddContentHits.GetUrl(pageInfo.ApiUrl, pageInfo.SiteId, pageInfo.PageChannelId, pageInfo.PageContentId)}"" type=""text/javascript""></script>"); } } var isShowPageInfo = pageInfo.SiteInfo.Additional.IsCreateShowPageInfo; if (!pageInfo.IsLocal) { if (pageInfo.SiteInfo.Additional.IsCreateDoubleClick) { var fileTemplateId = 0; if (pageInfo.TemplateInfo.TemplateType == TemplateType.FileTemplate) { fileTemplateId = pageInfo.TemplateInfo.Id; } var apiUrl = pageInfo.ApiUrl; var ajaxUrl = ApiRouteActionsTrigger.GetUrl(apiUrl, pageInfo.SiteId, contextInfo.ChannelId, contextInfo.ContentId, fileTemplateId, true); if (!pageInfo.FootCodes.ContainsKey("CreateDoubleClick")) { pageInfo.FootCodes.Add("CreateDoubleClick", $@" <script type=""text/javascript"" language=""javascript"">document.ondblclick=function(x){{location.href = '{ajaxUrl}&returnUrl=' + encodeURIComponent(location.search);}}</script>"); } } } else { isShowPageInfo = true; } if (isShowPageInfo) { contentBuilder.Append($@" <!-- {pageInfo.TemplateInfo.RelatedFileName}({TemplateTypeUtils.GetText(pageInfo.TemplateInfo.TemplateType)}) -->"); } var headScripts = StlParserManager.GetPageInfoHeadScript(pageInfo, contextInfo); if (!string.IsNullOrEmpty(headScripts)) { if (contentBuilder.ToString().IndexOf("</head>", StringComparison.Ordinal) != -1 || contentBuilder.ToString().IndexOf("</HEAD>", StringComparison.Ordinal) != -1) { StringUtils.InsertBefore(new[] { "</head>", "</HEAD>" }, contentBuilder, headScripts); } else { contentBuilder.Insert(0, headScripts); } } var afterBodyScripts = StlParserManager.GetPageBodyCodes(pageInfo); if (!string.IsNullOrEmpty(afterBodyScripts)) { if (contentBuilder.ToString().IndexOf("<body", StringComparison.Ordinal) != -1 || contentBuilder.ToString().IndexOf("<BODY", StringComparison.Ordinal) != -1) { var index = contentBuilder.ToString().IndexOf("<body", StringComparison.Ordinal); if (index == -1) { index = contentBuilder.ToString().IndexOf("<BODY", StringComparison.Ordinal); } index = contentBuilder.ToString().IndexOf(">", index, StringComparison.Ordinal); contentBuilder.Insert(index + 1, StringUtils.Constants.ReturnAndNewline + afterBodyScripts + StringUtils.Constants.ReturnAndNewline); } else { contentBuilder.Insert(0, afterBodyScripts); } } if (pageInfo.FootCodes.Count > 0) { var builder = new StringBuilder(); foreach (var key in pageInfo.FootCodes.Keys) { builder.Append(pageInfo.FootCodes[key]); } builder.Append(StringUtils.Constants.ReturnAndNewline); //contentBuilder.Append(endScriptBuilder.ToString()); //StringUtils.InsertBeforeOrAppend(new string[] { "</body>", "</BODY>" }, contentBuilder, endScriptBuilder.ToString()); StringUtils.InsertAfterOrAppend(new[] { "</html>", "</html>" }, contentBuilder, builder.ToString()); } } foreach (var service in PluginManager.Services) { try { service.OnAfterStlParse(new ParseEventArgs(pageInfo.SiteId, pageInfo.PageChannelId, pageInfo.PageContentId, pageInfo.TemplateInfo.TemplateType, pageInfo.TemplateInfo.Id, filePath, contentBuilder)); } catch (Exception ex) { LogUtils.AddPluginErrorLog(service.PluginId, ex, nameof(service.OnAfterStlParse)); } } }
public void Page_Load(object sender, EventArgs e) { if (IsForbidden) { return; } PageUtils.CheckRequestParameter("siteId"); TemplateInfo templateInfo = null; if (AuthRequest.GetQueryInt("TemplateID") > 0) { var templateId = AuthRequest.GetQueryInt("TemplateID"); _isCopy = AuthRequest.GetQueryBool("IsCopy"); templateInfo = TemplateManager.GetTemplateInfo(SiteId, templateId); if (templateInfo != null) { _templateType = templateInfo.TemplateType; } } else { _templateType = TemplateTypeUtils.GetEnumType(Request.QueryString["TemplateType"]); } if (_templateType == TemplateType.IndexPageTemplate || _templateType == TemplateType.FileTemplate) { PhCreatedFileFullName.Visible = true; } else { PhCreatedFileFullName.Visible = false; } if (IsPostBack) { return; } VerifySitePermissions(ConfigManager.SitePermissions.Templates); LtlTemplateType.Text = TemplateTypeUtils.GetText(_templateType); LtlPageTitle.Text = AuthRequest.GetQueryInt("TemplateID") > 0 ? "编辑模板" : "添加模板"; var isCodeMirror = SiteInfo.Additional.ConfigTemplateIsCodeMirror; BtnEditorType.Text = isCodeMirror ? "采用纯文本编辑模式" : "采用代码编辑模式"; PhCodeMirror.Visible = isCodeMirror; EFileSystemTypeUtils.AddWebPageListItems(DdlCreatedFileExtName); ECharsetUtils.AddListItems(DdlCharset); if (AuthRequest.GetQueryInt("TemplateID") > 0) { if (templateInfo == null) { return; } TbContent.Text = TemplateManager.GetTemplateContent(SiteInfo, templateInfo); if (_isCopy) { TbTemplateName.Text = templateInfo.TemplateName + "_复件"; TbRelatedFileName.Text = PathUtils.RemoveExtension(templateInfo.RelatedFileName) + "_复件"; TbCreatedFileFullName.Text = PathUtils.RemoveExtension(templateInfo.CreatedFileFullName) + "_复件"; } else { TbTemplateName.Text = templateInfo.TemplateName; TbRelatedFileName.Text = PathUtils.RemoveExtension(templateInfo.RelatedFileName); TbCreatedFileFullName.Text = PathUtils.RemoveExtension(templateInfo.CreatedFileFullName); LtlCommands.Text += $@" <button class=""btn"" onclick=""{ModalProgressBar.GetOpenWindowStringWithCreateByTemplate(SiteId, templateInfo.Id)}"">生成页面</button> <button class=""btn"" onclick=""{ModalTemplateRestore.GetOpenWindowString(SiteId, templateInfo.Id, string.Empty)}"">还原历史版本</button>"; if (AuthRequest.GetQueryInt("TemplateLogID") > 0) { var templateLogId = AuthRequest.GetQueryInt("TemplateLogID"); if (templateLogId > 0) { TbContent.Text = DataProvider.TemplateLogDao.GetTemplateContent(templateLogId); SuccessMessage("已导入历史版本的模板内容,点击确定保存模板"); } } } ControlUtils.SelectSingleItemIgnoreCase(DdlCharset, ECharsetUtils.GetValue(templateInfo.Charset)); ControlUtils.SelectSingleItem(DdlCreatedFileExtName, GetTemplateFileExtension(templateInfo)); HihTemplateType.Value = templateInfo.TemplateType.Value; } else { TbRelatedFileName.Text = "T_"; TbCreatedFileFullName.Text = _templateType == TemplateType.ChannelTemplate ? "index" : "@/"; ControlUtils.SelectSingleItemIgnoreCase(DdlCharset, SiteInfo.Additional.Charset); ControlUtils.SelectSingleItem(DdlCreatedFileExtName, EFileSystemTypeUtils.GetValue(EFileSystemType.Html)); HihTemplateType.Value = AuthRequest.GetQueryString("TemplateType"); } }
public void Page_Load(object sender, EventArgs e) { if (IsForbidden) { return; } PageUtils.CheckRequestParameter("siteId"); _templateType = AuthRequest.GetQueryString("templateType"); _keywords = AuthRequest.GetQueryString("keywords"); if (IsPostBack) { return; } VerifySitePermissions(ConfigManager.SitePermissions.Templates); DdlTemplateType.Items.Add(new ListItem("<所有类型>", string.Empty)); TemplateTypeUtils.AddListItems(DdlTemplateType); ControlUtils.SelectSingleItem(DdlTemplateType, _templateType); TbKeywords.Text = _keywords; if (AuthRequest.IsQueryExists("Delete")) { var templateId = AuthRequest.GetQueryInt("TemplateID"); try { var templateInfo = TemplateManager.GetTemplateInfo(SiteId, templateId); if (templateInfo != null) { DataProvider.TemplateDao.Delete(SiteId, templateId); AuthRequest.AddSiteLog(SiteId, $"删除{TemplateTypeUtils.GetText(templateInfo.TemplateType)}", $"模板名称:{templateInfo.TemplateName}"); } SuccessDeleteMessage(); } catch (Exception ex) { FailDeleteMessage(ex); } } else if (AuthRequest.IsQueryExists("SetDefault")) { var templateId = AuthRequest.GetQueryInt("TemplateID"); try { var templateInfo = TemplateManager.GetTemplateInfo(SiteId, templateId); if (templateInfo != null) { DataProvider.TemplateDao.SetDefault(SiteId, templateId); AuthRequest.AddSiteLog(SiteId, $"设置默认{TemplateTypeUtils.GetText(templateInfo.TemplateType)}", $"模板名称:{templateInfo.TemplateName}"); } SuccessMessage(); } catch (Exception ex) { FailMessage(ex, "操作失败"); } } if (string.IsNullOrEmpty(_templateType)) { LtlCommands.Text = $@" <input type=""button"" class=""btn"" onclick=""location.href='{PageTemplateAdd.GetRedirectUrl(SiteId, 0, TemplateType.IndexPageTemplate)}';"" value=""添加首页模板"" /> <input type=""button"" class=""btn"" onclick=""location.href='{PageTemplateAdd.GetRedirectUrl(SiteId, 0, TemplateType.ChannelTemplate)}';"" value=""添加栏目模板"" /> <input type=""button"" class=""btn"" onclick=""location.href='{PageTemplateAdd.GetRedirectUrl(SiteId, 0, TemplateType.ContentTemplate)}';"" value=""添加内容模板"" /> <input type=""button"" class=""btn"" onclick=""location.href='{PageTemplateAdd.GetRedirectUrl(SiteId, 0, TemplateType.FileTemplate)}';"" value=""添加单页模板"" /> "; } else { var templateType = TemplateTypeUtils.GetEnumType(_templateType); LtlCommands.Text = $@" <input type=""button"" class=""btn btn-success"" onclick=""location.href='{PageTemplateAdd.GetRedirectUrl(SiteId, 0, templateType)}';"" value=""添加{TemplateTypeUtils.GetText(templateType)}"" /> "; } RptContents.DataSource = DataProvider.TemplateDao.GetDataSource(SiteId, _keywords, _templateType); RptContents.ItemDataBound += RptContents_ItemDataBound; RptContents.DataBind(); }
public override void Submit_OnClick(object sender, EventArgs e) { if (!Page.IsPostBack || !Page.IsValid) { return; } if (_templateType != TemplateType.ChannelTemplate) { if (!TbCreatedFileFullName.Text.StartsWith("~") && !TbCreatedFileFullName.Text.StartsWith("@")) { TbCreatedFileFullName.Text = PageUtils.Combine("@", TbCreatedFileFullName.Text); } } else { TbCreatedFileFullName.Text = TbCreatedFileFullName.Text.TrimStart('~', '@'); TbCreatedFileFullName.Text = TbCreatedFileFullName.Text.Replace("/", string.Empty); } if (AuthRequest.GetQueryInt("TemplateID") > 0 && _isCopy == false) { var templateId = AuthRequest.GetQueryInt("TemplateID"); var templateInfo = TemplateManager.GetTemplateInfo(SiteId, templateId); if (templateInfo.TemplateName != TbTemplateName.Text) { var templateNameList = DataProvider.TemplateDao.GetTemplateNameList(SiteId, templateInfo.TemplateType); if (templateNameList.IndexOf(TbTemplateName.Text) != -1) { FailMessage("模板修改失败,模板名称已存在!"); return; } } TemplateInfo previousTemplateInfo = null; var isChanged = false; if (PathUtils.RemoveExtension(templateInfo.RelatedFileName) != PathUtils.RemoveExtension(TbRelatedFileName.Text)) //文件名改变 { var fileNameList = DataProvider.TemplateDao.GetLowerRelatedFileNameList(SiteId, templateInfo.TemplateType); foreach (var fileName in fileNameList) { var fileNameWithoutExtension = PathUtils.RemoveExtension(fileName); if (fileNameWithoutExtension == TbRelatedFileName.Text.ToLower()) { FailMessage("模板修改失败,模板文件已存在!"); return; } } isChanged = true; } if (GetTemplateFileExtension(templateInfo) != DdlCreatedFileExtName.SelectedValue) //文件后缀改变 { isChanged = true; } if (isChanged) { previousTemplateInfo = new TemplateInfo(templateInfo.Id, templateInfo.SiteId, templateInfo.TemplateName, templateInfo.TemplateType, templateInfo.RelatedFileName, templateInfo.CreatedFileFullName, templateInfo.CreatedFileExtName, templateInfo.Charset, templateInfo.IsDefault); } templateInfo.TemplateName = TbTemplateName.Text; templateInfo.RelatedFileName = TbRelatedFileName.Text + DdlCreatedFileExtName.SelectedValue; templateInfo.CreatedFileExtName = DdlCreatedFileExtName.SelectedValue; templateInfo.CreatedFileFullName = TbCreatedFileFullName.Text + DdlCreatedFileExtName.SelectedValue; templateInfo.Charset = ECharsetUtils.GetEnumType(DdlCharset.SelectedValue); DataProvider.TemplateDao.Update(SiteInfo, templateInfo, TbContent.Text, AuthRequest.AdminName); if (previousTemplateInfo != null) { FileUtils.DeleteFileIfExists(TemplateManager.GetTemplateFilePath(SiteInfo, previousTemplateInfo)); } CreatePages(templateInfo); AuthRequest.AddSiteLog(SiteId, $"修改{TemplateTypeUtils.GetText(templateInfo.TemplateType)}", $"模板名称:{templateInfo.TemplateName}"); SuccessMessage("模板修改成功!"); } else { var templateNameList = DataProvider.TemplateDao.GetTemplateNameList(SiteId, TemplateTypeUtils.GetEnumType(HihTemplateType.Value)); if (templateNameList.IndexOf(TbTemplateName.Text) != -1) { FailMessage("模板添加失败,模板名称已存在!"); return; } var fileNameList = DataProvider.TemplateDao.GetLowerRelatedFileNameList(SiteId, TemplateTypeUtils.GetEnumType(HihTemplateType.Value)); if (fileNameList.IndexOf(TbRelatedFileName.Text.ToLower()) != -1) { FailMessage("模板添加失败,模板文件已存在!"); return; } var templateInfo = new TemplateInfo { SiteId = SiteId, TemplateName = TbTemplateName.Text, TemplateType = TemplateTypeUtils.GetEnumType(HihTemplateType.Value), RelatedFileName = TbRelatedFileName.Text + DdlCreatedFileExtName.SelectedValue, CreatedFileExtName = DdlCreatedFileExtName.SelectedValue, CreatedFileFullName = TbCreatedFileFullName.Text + DdlCreatedFileExtName.SelectedValue, Charset = ECharsetUtils.GetEnumType(DdlCharset.SelectedValue), IsDefault = false }; templateInfo.Id = DataProvider.TemplateDao.Insert(templateInfo, TbContent.Text, AuthRequest.AdminName); CreatePages(templateInfo); AuthRequest.AddSiteLog(SiteId, $"添加{TemplateTypeUtils.GetText(templateInfo.TemplateType)}", $"模板名称:{templateInfo.TemplateName}"); SuccessMessage("模板添加成功!"); AddWaitAndRedirectScript(PageTemplate.GetRedirectUrl(SiteId, _templateType)); } }
private void RptContents_ItemDataBound(object sender, RepeaterItemEventArgs e) { if (e.Item.ItemType != ListItemType.Item && e.Item.ItemType != ListItemType.AlternatingItem) { return; } var templateId = SqlUtils.EvalInt(e.Item.DataItem, nameof(TemplateInfo.Id)); var templateType = TemplateTypeUtils.GetEnumType(SqlUtils.EvalString(e.Item.DataItem, nameof(TemplateInfo.TemplateType))); var templateName = SqlUtils.EvalString(e.Item.DataItem, nameof(TemplateInfo.TemplateName)); var relatedFileName = SqlUtils.EvalString(e.Item.DataItem, nameof(TemplateInfo.RelatedFileName)); var createdFileFullName = SqlUtils.EvalString(e.Item.DataItem, nameof(TemplateInfo.CreatedFileFullName)); var isDefault = TranslateUtils.ToBool(SqlUtils.EvalString(e.Item.DataItem, nameof(TemplateInfo.IsDefault))); var ltlTemplateName = (Literal)e.Item.FindControl("ltlTemplateName"); var ltlRelatedFileName = (Literal)e.Item.FindControl("ltlRelatedFileName"); var ltlFileName = (Literal)e.Item.FindControl("ltlFileName"); var ltlUseCount = (Literal)e.Item.FindControl("ltlUseCount"); var ltlTemplateType = (Literal)e.Item.FindControl("ltlTemplateType"); var ltlDefaultUrl = (Literal)e.Item.FindControl("ltlDefaultUrl"); var ltlCopyUrl = (Literal)e.Item.FindControl("ltlCopyUrl"); var ltlLogUrl = (Literal)e.Item.FindControl("ltlLogUrl"); var ltlCreateUrl = (Literal)e.Item.FindControl("ltlCreateUrl"); var ltlDeleteUrl = (Literal)e.Item.FindControl("ltlDeleteUrl"); var templateAddUrl = PageTemplateAdd.GetRedirectUrl(SiteId, templateId, templateType); ltlTemplateName.Text = $@"<a href=""{templateAddUrl}"">{templateName}</a>"; ltlRelatedFileName.Text = relatedFileName; if (templateType == TemplateType.IndexPageTemplate || templateType == TemplateType.FileTemplate) { var url = PageUtility.ParseNavigationUrl(SiteInfo, createdFileFullName, false); ltlFileName.Text = $"<a href='{url}' target='_blank'>{createdFileFullName}</a>"; } ltlUseCount.Text = DataProvider.ChannelDao.GetTemplateUseCount(SiteId, templateId, templateType, isDefault).ToString(); ltlTemplateType.Text = TemplateTypeUtils.GetText(templateType); if (templateType != TemplateType.FileTemplate) { if (isDefault) { ltlDefaultUrl.Text = @"<span class=""badge badge-primary"">默认模板</span>"; } else { var defaultUrl = PageUtils.GetCmsUrl(SiteId, nameof(PageTemplate), new NameValueCollection { { "TemplateID", templateId.ToString() }, { "SetDefault", true.ToString() }, { "TemplateType", templateType.Value } }); ltlDefaultUrl.Text = $@"<a href=""{defaultUrl}"" onClick=""javascript:return confirm('此操作将把此模板设为默认,确认吗?');"">设为默认</a>"; } } var copyUrl = PageTemplateAdd.GetRedirectUrlToCopy(SiteId, templateId); ltlCopyUrl.Text = $@"<a href=""{copyUrl}"">快速复制</a>"; var logUrl = PageTemplateLog.GetRedirectUrl(SiteId, templateId); ltlLogUrl.Text = $@"<a href=""{logUrl}"">修订历史</a>"; ltlCreateUrl.Text = $@"<a href=""javascript:;"" onclick=""{ModalProgressBar.GetOpenWindowStringWithCreateByTemplate( SiteId, templateId)}"">生成页面</a>"; if (!isDefault) { var deleteUrl = PageUtils.GetCmsUrl(SiteId, nameof(PageTemplate), new NameValueCollection { { "TemplateID", templateId.ToString() }, { "Delete", true.ToString() }, { "TemplateType", templateType.Value } }); ltlDeleteUrl.Text = $@"<a href=""javascript:;"" onclick=""{AlertUtils.ConfirmDelete("删除文件", $"此操作将删除模板“{templateName}”,确认吗?", deleteUrl)}"">删除</a>"; } }