/// <summary> /// Converts the content list item display form virtual (relative) path to an application absolute path. /// </summary> /// <param name="helper">The url helper object.</param> /// <param name="item">The content query result item.</param> /// <returns>A string contains item display form absolute url. </returns> public static string Content(this UrlHelper helper, ContentQueryResultItem item) { if (item == null) { throw new ArgumentNullException("item"); } return(helper.Content(item.Url)); }
/// <summary> /// Converts the content list item display form virtual (relative) path to an application absolute path. /// </summary> /// <param name="helper">The url helper object.</param> /// <param name="item">The content query result item.</param> /// <returns>A string contains item display form absolute url. </returns> public static string Content(this UrlHelper helper, ContentQueryResultItem item) { if (item == null) throw new ArgumentNullException("item"); return helper.Content(item.Url); }
private static void RenderViewFieldTemplate(this HtmlHelper helper, ContentFieldRef field, string filePrefix, ContentQueryResultItem item) { var tmpl = field.Template; var list = field.Parent; var server = helper.ViewContext.RequestContext.HttpContext.Server; if (!string.IsNullOrEmpty(tmpl.Source)) { var viewFileName = list.Package.ResolveUri(field.Template.Source); if (File.Exists(server.MapPath(viewFileName))) helper.RenderPartial(viewFileName, new ContentViewFieldValue(field, item)); else { //Find template file in default path viewFileName = "~/content/types/base/fields/view/" + field.Template.Source; if (File.Exists(server.MapPath(viewFileName))) helper.RenderPartial(viewFileName, new ContentViewFieldValue(field, item)); else helper.ViewContext.Writer.Write("<span>Field template file not found.</span>"); } } else { if (!string.IsNullOrEmpty(tmpl.Text)) { var viewFile = string.Format("_view_{0}_field_{1}_tmpl.cshtml", field.ParentView.Name.ToLower(), field.Name.ToLower()); var viewUrl = TemplateHelper.SaveAsView(field.Parent, tmpl.Text, viewFile); helper.RenderPartial(viewUrl, new ContentViewFieldValue(field, item)); } } }
/// <summary> /// Render the field value to response output for View by specified field name and data item object. /// </summary> /// <param name="helper">The html helper object.</param> /// <param name="fieldName">The field name which defined in ViewFields</param> /// <param name="dataItem">The data item to display.</param> /// <param name="withLabel">Specified whether show the label on the left of the field value.</param> public static void ForView(this HtmlHelper helper, string fieldName, ContentQueryResultItem dataItem, bool? withLabel = null) { if (dataItem == null) return; var view = dataItem.View; var fieldRef = view.FieldRefs[fieldName]; if (fieldRef == null) { //Render the error holder && view.Parent.Fields[fieldName] == null var title = fieldName; if (view.Parent.Fields[fieldName] != null) title = view.Parent.Fields[fieldName].Title; helper.ViewContext.Writer.Write("<div class='d-state-error' style=\"padding:10px;\">Can not found the <strong>" + title + "</strong> field in this view</div>"); return; } if (fieldRef.IsHidden) { helper.Hidden(fieldRef.Field, dataItem[fieldName]).WriteTo(helper.ViewContext.Writer); return; } var showLabel = fieldRef.ShowLabel; if (withLabel.HasValue) showLabel = withLabel.Value; if (showLabel && !dataItem.IsNull(fieldName)) { var labelEl = new XElement("label", fieldRef.Title + ":"); helper.ViewContext.Writer.Write(labelEl.OuterXml()); } var tmpl = fieldRef.Template; if (!fieldRef.Template.IsEmpty) { if (tmpl.ContentType.Equals(TemplateContentTypes.Razor, StringComparison.OrdinalIgnoreCase)) helper.RenderViewFieldTemplate(fieldRef, "_viewitem", dataItem); if (tmpl.ContentType.Equals(TemplateContentTypes.Xslt, StringComparison.OrdinalIgnoreCase)) { throw new NotImplementedException(); } if (tmpl.ContentType.Equals(TemplateContentTypes.Xml, StringComparison.OrdinalIgnoreCase)) { throw new NotImplementedException(); } //When the view field has template definition exit this process return; } else { var field = fieldRef.Field; var server = helper.ViewContext.RequestContext.HttpContext.Server; var explicitTmpl = "~/content/types/base/fields/view/_" + field.FieldTypeString.ToLower() + ".cshtml"; if (File.Exists(server.MapPath(explicitTmpl))) { // render default field tmpl helper.RenderPartial(explicitTmpl, new ContentViewFieldValue(fieldRef, dataItem)); } else { var linkToItem = field.IsLinkToItem; var url = new UrlHelper(helper.ViewContext.RequestContext); var writer = helper.ViewContext.Writer; var linkFormat = "<a href=\"{0}\" class=\"d-link\">"; var fieldVal = field.Format(dataItem[field.Name]); var link = url.Content(dataItem); if (linkToItem) writer.Write(string.Format(linkFormat, link)); if (field.FieldType == (int)ContentFieldTypes.Computed) { var f = field as ComputedField; if (f != null) f.RenderPattern(dataItem).WriteTo(writer); } writer.Write(fieldVal); if (linkToItem) { writer.Write("</a>"); } } } }
private static void RenderRowPattern(XElement rowElement, TextWriter writer, ContentQueryResultItem dataItem) { var urlHelper = DNA.Utility.UrlUtility.CreateUrlHelper(); var elements = rowElement.Elements(); //var nodes = row.ChildNodes; foreach (var element in elements) { if (element.Name.Equals("col")) { if (element.HasElements) RenderColPattern(element, writer, dataItem.List); continue; } if (element.Name.Equals("url")) { var rel = element.StrAttr("rel"); if (rel.Equals("disp")) writer.Write(dataItem.UrlComponent); else { if (rel.Equals("del")) writer.Write(urlHelper.Action("Delete", "Contents", new { id = dataItem.ID, name = dataItem.List.Name })); else writer.Write(urlHelper.Content(dataItem.List.GetEditItemUrl(dataItem.Slug))); } continue; } if (element.Name.Equals("val")) { var name = element.StrAttr("name"); if (!string.IsNullOrEmpty(name)) { var field = dataItem.List.Fields[name]; if (field != null) { #region computed field if (field.FieldType == (int)ContentFieldTypes.Computed) { var computedField = field as ComputedField; if (computedField != null) { var pattern = string.Format("<pattern>{0}</pattern>", computedField.DispPattern); var root = XElement.Parse(pattern); foreach (var fieldElement in root.Elements()) { if (element.Name.Equals("html")) writer.Write(element.Value); if (element.Name.Equals("col") && element.HasAttributes) { var _name = element.StrAttr("name"); var _output = element.StrAttr("output"); if (string.IsNullOrEmpty(_output)) _output = "formatted"; if (!string.IsNullOrEmpty(_name)) { var _val = dataItem[_name]; if (_val != null) { if (_output == "formatted") writer.Write(field.Format(_val)); else writer.Write(_val); } else { writer.Write(dataItem[_name]); } } } } continue; } } #endregion var output = element.StrAttr("output"); var val = dataItem[name]; if (val != null) { if (output == "formatted") writer.Write(field.Format(val)); else writer.Write(val); } } else //internal values { writer.Write(dataItem[name]); } } } if (element.Name == "html") { writer.Write(element.Value); continue; } } }
/// <summary> /// Render computed field display pattern html to response output. /// </summary> /// <param name="field">The computed field instance.</param> /// <param name="dataItem">The content query result item object.</param> /// <returns></returns> public static HelperResult RenderPattern(this ComputedField field, ContentQueryResultItem dataItem) { return new HelperResult(writer => { //var pattern = string.Format("<pattern>{0}</pattern>", field.DispPattern); var root = XElement.Parse(field.DispPattern); var ns = root.GetDefaultNamespace(); foreach (var element in root.Elements()) { if (element.Name.Equals(ns + "html")) writer.Write(element.Value); if (element.Name.Equals(ns + "col") && element.HasAttributes) { var name = element.StrAttr("name"); var output = element.StrAttr("output"); if (string.IsNullOrEmpty(output)) output = "formatted"; if (!string.IsNullOrEmpty(name)) { var val = dataItem[name]; if (val != null) { if (output == "formatted") writer.Write(field.Format(val)); else writer.Write(val); } else { writer.Write(val); } } } } }); }
/// <summary> /// Render the form html to repsonse by specified the form object for query result item. /// </summary> /// <remarks> /// Supports for 3.0.3 /// </remarks> /// <param name="helper">The html helper object.</param> /// <param name="form">The content form object.</param> /// <param name="queryResultItem">The query result item.</param> /// <returns></returns> public static HelperResult RenderForm(this HtmlHelper helper, ContentFormDecorator form, ContentQueryResultItem queryResultItem) { return RenderForm(helper, form, queryResultItem.RawItem); }
/// <summary> /// Gets the css class name by specified content query result item. /// </summary> /// <param name="dataItem">The content query result item.</param> /// <returns>A string contains css class names.</returns> public string GetCssClass(ContentQueryResultItem dataItem) { var cls = CssClass; if (this.FieldType == (int)ContentFieldTypes.Number || FieldType == (int)ContentFieldTypes.Integer || FieldType == (int)ContentFieldTypes.Currency) { if (dataItem[Name]==DBNull.Value || Convert.ToInt32(dataItem[Name]) == 0) { cls += " d-view-field-val-zero"; } } return cls; }
/// <summary> /// Initializes a new instance of the ContentViewFieldValue class with field and item. /// </summary> /// <param name="field">The view field object</param> /// <param name="item">The query result item.</param> public ContentViewFieldValue(ContentFieldRef field, ContentQueryResultItem item) { this.Item = item; Field = field; }