/// <summary> /// 保存模板绑定项 /// </summary> /// <param name="bc"></param> /// <param name="skinFolder"></param> /// <param name="templateFile"></param> public void SaveTemplateBind(TemplateBindConfig bc, string skinFolder, string templateFile) { if (bc != null) { string handler = bc.Handler; string mode = bc.Mode; string model = bc.Model; bc = GetTemplateConfigSentence(bc); SkinInfo tg = GetSkinInfo(skinFolder + ".xml");//读取模板信息 SkinInfo.SkinItem item = new SkinInfo.SkinItem(); Template tp = GetTemplate(templateFile); if (tp != null) { item.TemplateText = tp.Name; item.Name = tp.Name; item.Description = tp.Description; item.Template = tp.FileName; if (handler == "model" && !string.IsNullOrEmpty(model)) { ModelInfo mi = ModelHelper.GetModelInfoByName(model); if (mi != null) { item.C_Model = model; item.C_ModelText = mi.Label; } else { throw new Exception("没有找到模型的信息文件,请重建内容模型索引再试。"); } } item.Location = mode; item.LocationText = bc.HandlerName + bc.ModeText; item.Tag = ""; item.Type = handler; if (!HaveSameItem(item, tg)) { tg.Items.Add(item); string sentence = item.C_ModelText + item.LocationText; string fn = SaveSkinInfoAndPreviewFile(tg, Path.GetFileNameWithoutExtension(skinFolder)); CreateMapFileFromSkinInfo(tg); RefreshOneTempplateBindText(tg, tp); } else { throw new Exception("对不起,已经存在相同的绑定项,不能重复增加!如想修改绑定项,请先删除旧的再试。"); } } else { throw new Exception("无法保存!不存在模板文件“" + templateFile + "”!"); } } }
/// <summary> /// 删除模板指定项 /// </summary> /// <param name="bc"></param> /// <param name="skinFolder"></param> /// <param name="fileName"></param> public void RemoveTemplateBind(TemplateBindConfig bc, string skinFolder, string fileName) { SkinInfo tg = GetSkinInfo(skinFolder + ".xml");//读取模板信息 if (bc != null) { string handler = bc.Handler; string mode = bc.Mode; string model = bc.Model; foreach (SkinInfo.SkinItem item in tg.Items) { SkinInfo.SkinItem skin = item; skin = ConvertOldVersionToNew(item); if (StringCompare(model, skin.C_Model) && StringCompare(mode, skin.Location) && StringCompare("", skin.Tag) && StringCompare(handler, skin.Type) && StringCompare(fileName, skin.Template)) { tg.Items.Remove(skin); break; } } SaveSkinInfoAndPreviewFile(tg, Path.GetFileNameWithoutExtension(skinFolder)); CreateMapFileFromSkinInfo(tg); Template t = GetTemplate(fileName, skinFolder); RefreshOneTempplateBindText(tg, t); } else { foreach (SkinInfo.SkinItem item in tg.Items) { SkinInfo.SkinItem skin = item; skin = ConvertOldVersionToNew(item); if (StringCompare(fileName, skin.Template)) { tg.Items.Remove(skin); break; //修正删除模板要删除两次的BUG。原因是集合修改后不能foreach,会有异常。Update By dl } } SaveSkinInfoAndPreviewFile(tg, Path.GetFileNameWithoutExtension(skinFolder)); CreateMapFileFromSkinInfo(tg); //清除模板列表缓存 HttpContext Context = HttpContext.Current; string key = string.Format(TemplatesKeyID, skinFolder); Context.Cache.Remove(key); } }
public bool HaveSameItem(SkinInfo.SkinItem item, SkinInfo data) { foreach (SkinInfo.SkinItem skin in data.Items) { if (StringCompare(item.C_Model, skin.C_Model) && StringCompare(item.Location, skin.Location) && StringCompare(item.Tag, skin.Tag) && StringCompare(item.Type, skin.Type)) { return(true); } } return(false); }
/// <summary> /// 加载模板绑定项,并生成包含删除js的html代码 /// </summary> /// <param name="filename"></param> /// <returns></returns> public string LoadTemplateBinds(string skinFile, string templateFile) { StringBuilder sb = new StringBuilder(); string bindLi = "<LI id='{5}' ><IMG class=Icon height=16 src=\"/admin/images/icon_globe.gif\" width=16>{3}<A class=Del title=\"删除指定 {3}? \" href=\"javascript:removeBind('{0}','{1}','{2}','{4}','{5}');\" >[删除]</A> </LI>"; SkinInfo skin = GetSkinInfoFromFile(skinFile); int i = 0; foreach (SkinInfo.SkinItem s in skin.Items) { if (string.Equals(s.Template, templateFile, StringComparison.OrdinalIgnoreCase)) { SkinInfo.SkinItem item = s; item = ConvertOldVersionToNew(s); i++; sb.AppendLine(string.Format(bindLi, item.Type, item.Location, item.C_Model, item.C_ModelText + item.LocationText, templateFile, "li" + i.ToString())); } } return(sb.ToString()); }
/// <summary> /// 兼容旧版2.6及以前版本 /// </summary> /// <param name="item"></param> /// <returns></returns> SkinInfo.SkinItem ConvertOldVersionToNew(SkinInfo.SkinItem item) { if (item.Type == "站点") { item.LocationText = item.Type + item.LocationText; item.Type = "site"; } if (item.Type == "栏目") { if (string.IsNullOrEmpty(item.C_Model)) { item.Type = "channel"; item.LocationText = "通用" + item.LocationText; } else { item.Type = "model"; item.LocationText = "模型" + item.LocationText; } } return(item); }
/// <summary> /// 刷新单个模板信息中的冗余字段 DefaultBindText /// </summary> /// <param name="skin"></param> /// <param name="t"></param> void RefreshOneTempplateBindText(SkinInfo skin, Template t) { string defaultBindText = ""; foreach (SkinInfo.SkinItem s in skin.Items) { if (string.Equals(s.Template, t.FileName, StringComparison.OrdinalIgnoreCase)) { SkinInfo.SkinItem item = s; item = ConvertOldVersionToNew(s); if (defaultBindText == "") { defaultBindText = item.C_ModelText + item.LocationText; } else { defaultBindText += "," + item.C_ModelText + item.LocationText; } } } t.DefaultBindText = defaultBindText; SaveTemplate(t, skin.FileName); }
string LoadTemplateDictionary(string editorUrl) { string itemString = "<a href=\"{4}?handler={0}&mode={1}&model={2}\" title=\"新建 {3} 模板? \" target=\"_blank\" >{3}</a> "; string itemTitle = "<H3 >{0}</H3>"; StringBuilder sb = new StringBuilder(); sb.AppendLine("<h1>您想创建哪一个对应页面的模板?</h1>"); SkinInfo data = TemplateHelper.GetSkinInfo(FileName); List <TemplateBindConfig> list = TemplateHelper.GetTemplateBindConfigList(); string title = ""; List <TemplateBindConfig> modelList = new List <TemplateBindConfig>(); foreach (TemplateBindConfig tb in list) { if (tb.Handler == "model") { modelList.Add(tb); } else { SkinInfo.SkinItem item = new SkinInfo.SkinItem(); item.C_Model = ""; item.Location = tb.Mode; item.Tag = ""; item.Type = tb.Handler; if (!TemplateHelper.HaveSameItem(item, data)) { if (title != tb.HandlerName) { sb.AppendLine(string.Format(itemTitle, tb.HandlerName)); title = tb.HandlerName; } sb.AppendLine(string.Format(itemString, tb.Handler, tb.Mode, "", tb.Description, editorUrl)); sb.Append(" ┃ "); } } } ContentModelCollection cmc = ModelHelper.GetContentModel(ModelType.ARTICLE); foreach (We7.Model.Core.ContentModel cm in cmc) { sb.AppendLine(string.Format(itemTitle, cm.Label + "模型")); foreach (TemplateBindConfig tb in modelList) { SkinInfo.SkinItem item = new SkinInfo.SkinItem(); item.C_Model = cm.Name; item.Location = tb.Mode; item.Tag = ""; item.Type = tb.Handler; if (!TemplateHelper.HaveSameItem(item, data)) { sb.AppendLine(string.Format(itemString, tb.Handler, tb.Mode, cm.Name, cm.Label + tb.Description, editorUrl)); sb.Append(" ┃ "); } } } sb.AppendLine("<br>"); sb.AppendLine("<h2>" + string.Format(itemString, "", "", "", "个性化模板(不做默认指定)", editorUrl) + "</h2>"); sb.AppendLine("<br>"); return(sb.ToString()); }