/// <summary> /// 解析 /// </summary> /// <param name="freeLabel">标签内容</param> /// <param name="currentPage">当前页(仅用于分页)</param> /// <param name="pageSize">页面大小(仅用于分页)</param> /// <returns></returns> public string Parse(FreeLabel freeLabel, int currentPage, int pageSize) { string parseResult; // 标签解析结果 FreeLabelConfig labelConfig; // 自由标签参数 bool isException; // 是否出现异常 DataTable dtDataSource; // 标签数据源 LoopLabelParseParam labelParseParam; // 标签经解析后的参数 string selSQL; // 标签数据源查询语句 labelConfig = new FreeLabelConfig(); isException = false; parseResult = string.Empty; if (string.IsNullOrEmpty(this.NodeCode)) { DataRow[] drMenu; drMenu = this.MenuList.Select("NodeCode='" + freeLabel.NodeCode + "'"); if (drMenu != null && drMenu.Length > 0) { this.CSaveType = GetContentPageSaveType(drMenu[0]["ContentPageHtmlRule"].ToString()); } } if (LabelList != null && LabelList.Contains(freeLabel.Name)) { try { labelConfig = (FreeLabelConfig)LabelList[freeLabel.Name]; } catch { isException = true; } } else { isException = true; } if (!isException && !string.IsNullOrEmpty(labelConfig.SQL) && !string.IsNullOrEmpty(labelConfig.Content)) { selSQL = labelConfig.SQL; selSQL = selSQL.Replace("{$NodeCode}", NodeCode); selSQL = selSQL.Replace("{$SiteID}", SiteID.ToString()); if (pageSize > 0) // 分页 { selSQL = Regex.Replace(selSQL, @"top\s*\d+", " ", RegexOptions.Singleline | RegexOptions.IgnoreCase); dtDataSource = dal.GetFreeLabelSplitDataSource(selSQL, currentPage, pageSize, null); } else { dtDataSource = dal.GetFreeLabelDataSource(selSQL); } labelParseParam = GetLoopLabelParam(labelConfig.Content, this.itemContentTag); parseResult = DataSourceBind(dtDataSource, labelParseParam, freeLabel); parseResult = labelParseParam.LabelTemplate.Replace(itemContentTag, parseResult); } return(parseResult); }
/// <summary> /// 获取内容目录Path /// </summary> /// <param name="siteUrl">站点Path</param> /// <param name="menuDirURL">栏目相对站点的路径</param> /// <param name="cSaveType">内容页面保存方式</param> /// <param name="addDate">记录添加日期</param> /// <returns></returns> public string GetContentDirPath(string sitePath, string menuDirUrl, ContentPageSaveType cSaveType, string addDate) { string cDirUrl; string topMenuDirName; string[] arrMenuName; switch (cSaveType) { case ContentPageSaveType.Content: cDirUrl = sitePath + "c\\"; break; case ContentPageSaveType.ContentAndDate: cDirUrl = sitePath + "c\\" + string.Format("{0:yyMMdd}", DateTime.Parse(addDate)) + "\\"; break; case ContentPageSaveType.Menu: if (menuDirUrl.Contains("/")) { arrMenuName = menuDirUrl.Split(new char[] { '/' }); topMenuDirName = arrMenuName[0]; if (topMenuDirName.Trim() == "" && arrMenuName.Length > 1) { topMenuDirName = arrMenuName[1]; } } else { topMenuDirName = menuDirUrl; } cDirUrl = sitePath + topMenuDirName + "\\"; break; case ContentPageSaveType.MenuAndContent: if (menuDirUrl.Contains("/")) { arrMenuName = menuDirUrl.Split(new char[] { '/' }); topMenuDirName = arrMenuName[0]; if (topMenuDirName.Trim() == "" && arrMenuName.Length > 1) { topMenuDirName = arrMenuName[1]; } } else { topMenuDirName = menuDirUrl; } cDirUrl = sitePath + topMenuDirName + "\\c\\"; break; case ContentPageSaveType.MenuAndDate: if (menuDirUrl.Contains("/")) { arrMenuName = menuDirUrl.Split(new char[] { '/' }); topMenuDirName = arrMenuName[0]; if (topMenuDirName.Trim() == "" && arrMenuName.Length > 1) { topMenuDirName = arrMenuName[1]; } } else { topMenuDirName = menuDirUrl; } cDirUrl = sitePath + topMenuDirName + "\\" + string.Format("{0:yyMM}", DateTime.Parse(addDate)) + "\\"; break; case ContentPageSaveType.MenuContentAndDate: if (menuDirUrl.Contains("/")) { arrMenuName = menuDirUrl.Split(new char[] { '/' }); topMenuDirName = arrMenuName[0]; if (topMenuDirName.Trim() == "" && arrMenuName.Length > 1) { topMenuDirName = arrMenuName[1]; } } else { topMenuDirName = menuDirUrl; } cDirUrl = sitePath + topMenuDirName + "\\c\\" + string.Format("{0:yyMM}", DateTime.Parse(addDate)) + "\\"; break; default: cDirUrl = sitePath; break; } return(cDirUrl); }
public string SingleRecordBind(DataRow dr, List <Field> lstField, string itemTemplate, string menuDir, string fileType, string siteUrl, ContentPageSaveType cSaveType, List <SubModelParam> lstSubModel) { string itemContent; string fieldValue; string cDirUrl; itemContent = itemTemplate; try { cDirUrl = this.GetContentDirUrl(siteUrl, menuDir, cSaveType, dr["AddDate"].ToString()); try { itemContent = itemContent.Replace("{$LoopPageName}", cDirUrl + dr["ID"].ToString() + "." + fileType); } catch { itemContent = itemContent.Replace("{$LoopPageName}", "标签数据源中不存在ID字段"); } itemContent = itemContent.Replace("{$AbsoulteMenuUrl}", cDirUrl); itemContent = itemContent.Replace("{$RelativeMenuUrl}", cDirUrl.Replace(siteUrl, "")); foreach (SubModelParam subModel in lstSubModel) { itemContent = itemContent.Replace(subModel.LabelName, siteUrl + "List/" + dr["ID"].ToString() + subModel.FieldName + "." + fileType); } } catch { itemContent = itemContent.Replace("{$LoopPageName}", "标签数据源中不存在AddDate字段"); } foreach (Field field in lstField) // 绑定字段值 { if (dr[field.Name] != null) { fieldValue = dr[field.Name].ToString(); if (field.OutParam != null && field.OutParam.Length > 0) { fieldValue = this.FormatFieldContent(fieldValue, field.OutType, field.OutParam); } itemContent = itemContent.Replace("{[#" + field.Name + "#]}", fieldValue); } } return(itemContent); }
/// <summary> /// 获取内容目录URL /// </summary> /// <param name="siteUrl">站点URL</param> /// <param name="menuDirUrlOrNodeCode">栏目相对URL或NodeCode</param> /// <param name="cSaveType">内容页面保存方式</param> /// <param name="addDate">记录添加日期</param> /// <returns></returns> public string GetContentDirUrl(string siteUrl, string menuDirUrlOrNodeCode, ContentPageSaveType cSaveType, string addDate) { string cDirUrl; string menuDirUrl; string topMenuDirName; DataRow[] drMenu; if (Regex.IsMatch(menuDirUrlOrNodeCode, @"\d+")) // menuDirUrlOrNodeCode 为NodeCode { drMenu = this.dtMenuList.Select("NodeCode='" + menuDirUrlOrNodeCode + "'"); if (drMenu != null && drMenu.Length > 0) { menuDirUrl = drMenu[0]["RootDirPath"].ToString(); // 当前发布栏目URL } else { menuDirUrl = ""; } } else // 栏目相对URL { menuDirUrl = menuDirUrlOrNodeCode; } switch (cSaveType) { case ContentPageSaveType.Content: cDirUrl = siteUrl + "c/"; break; case ContentPageSaveType.ContentAndDate: cDirUrl = siteUrl + "c/" + string.Format("{0:yyMMdd}", DateTime.Parse(addDate)) + "/"; break; case ContentPageSaveType.Menu: if (menuDirUrl.Contains("/")) { topMenuDirName = menuDirUrl.Split(new char[] { '/' })[0]; } else { topMenuDirName = menuDirUrl; } cDirUrl = siteUrl + topMenuDirName + "/"; break; case ContentPageSaveType.MenuAndContent: if (menuDirUrl.Contains("/")) { topMenuDirName = menuDirUrl.Split(new char[] { '/' })[0]; } else { topMenuDirName = menuDirUrl; } cDirUrl = siteUrl + topMenuDirName + "/c/"; break; case ContentPageSaveType.MenuAndDate: if (menuDirUrl.Contains("/")) { topMenuDirName = menuDirUrl.Split(new char[] { '/' })[0]; } else { topMenuDirName = menuDirUrl; } cDirUrl = siteUrl + topMenuDirName + "/" + string.Format("{0:yyMM}", DateTime.Parse(addDate)) + "/"; break; case ContentPageSaveType.MenuContentAndDate: if (menuDirUrl.Contains("/")) { topMenuDirName = menuDirUrl.Split(new char[] { '/' })[0]; } else { topMenuDirName = menuDirUrl; } cDirUrl = siteUrl + topMenuDirName + "/c/" + string.Format("{0:yyMM}", DateTime.Parse(addDate)) + "/"; break; default: cDirUrl = siteUrl; break; } return(cDirUrl); }