How can i create custom item field types?
Developer forum
E-mail notifications
Custom item field types?
Rúni Gudmundarson
Replies
Nicolai Pedersen
Posted on 15/12/2023 16:56:25
You can create an item editor - this is the html5 editor for items that you can use as inspiration:
/// <summary> /// Represents a HTML 5 input editor. /// </summary> /// <remarks></remarks> [Editor("Input (HTML 5)")] public class InputHTML5Editor : Editor, IDropDownOptions { [AddInParameter("Type")] [AddInParameterEditor(typeof(DropDownParameterEditor), "inputClass=std editor-parameter")] public string InputType { get; set; } [AddInParameter("Pattern")] [AddInParameterEditor(typeof(TextParameterEditor), "inputClass=std editor-parameter")] public string Pattern { get; set; } [AddInParameter("Placeholder")] [AddInParameterEditor(typeof(TextParameterEditor), "inputClass=std editor-parameter")] public string Placeholder { get; set; } [AddInParameter("Size")] [AddInParameterEditor(typeof(TextParameterEditor), "inputClass=std editor-parameter")] public string Size { get; set; } [AddInParameter("Min")] [AddInParameterEditor(typeof(TextParameterEditor), "inputClass=std editor-parameter")] public string Min { get; set; } [AddInParameter("Max")] [AddInParameterEditor(typeof(TextParameterEditor), "inputClass=std editor-parameter")] public string Max { get; set; } [AddInParameter("Step")] [AddInParameterEditor(typeof(TextParameterEditor), "inputClass=std editor-parameter")] public string Step { get; set; } [AddInParameter("Autocomplete")] [AddInParameterEditor(typeof(YesNoParameterEditor), "inputClass=std editor-parameter")] public bool Autocomplete { get; set; } [AddInParameter("Required")] [AddInParameterEditor(typeof(YesNoParameterEditor), "inputClass=std editor-parameter")] public bool Required { get; set; } /// <summary> /// Gets the data type for this editor. /// </summary> /// <remarks></remarks> public override Type DataType { get { return typeof(string); } } /// <summary> /// Initializes a new instance of an object. /// </summary> /// <remarks></remarks> public InputHTML5Editor() { // Type = "text" } #if !DW10 /// <summary> /// Gets or sets id of configuration settings. /// </summary> /// <remarks></remarks> [Obsolete("Use InputType instead")] public string Type { get => InputType; set => InputType = value; } /// <summary> /// Enables the editor to populate its UI to the client and initiate the editing process. /// </summary> /// <param name="context">Editor context.</param> /// <remarks></remarks> [Obsolete("Do not use")] public override void BeginEdit(EditorContext context) { string v; int intParameter; if (context is object && context.Output is object) { v = Converter.ToString(context.Value); if (string.IsNullOrEmpty(v) && "range".Equals(InputType, StringComparison.OrdinalIgnoreCase)) { // Without such 'explicit' assignment the value will become (Max - Min)/2 v = string.IsNullOrEmpty(Min) ? "0" : Min; } context.Output.Write("<input"); context.Output.Write(string.Format(" class=\"std item-field {0}\" name=\"{1}\"", !string.IsNullOrWhiteSpace(CssClass) ? CssClass : string.Empty, Key)); if (!string.IsNullOrEmpty(InputType)) { context.Output.Write(string.Format(" type=\"{0}\"", InputType)); } if (!string.IsNullOrEmpty(Pattern)) { context.Output.Write(string.Format(" pattern=\"{0}\"", Pattern)); } if (Required) { context.Output.Write(" required=\"required\""); } if (!string.IsNullOrEmpty(Size) && int.TryParse(Size, out intParameter)) { context.Output.Write(string.Format(" size=\"{0}\"", intParameter)); } if (!string.IsNullOrEmpty(Max)) { context.Output.Write(string.Format(" max=\"{0}\"", Max)); } if (!string.IsNullOrEmpty(Min)) { context.Output.Write(string.Format(" min=\"{0}\"", Min)); } if (!string.IsNullOrEmpty(Step)) { context.Output.Write(string.Format(" step=\"{0}\"", Step)); } if (!string.IsNullOrEmpty(Placeholder)) { context.Output.Write(string.Format(" placeholder=\"{0}\"", Placeholder)); } if (Autocomplete) { context.Output.Write(" autocomplete=\"on\""); } if ("range".Equals(InputType, StringComparison.OrdinalIgnoreCase)) { context.Output.WriteLine($" list=\"{Key}-list\" value=\"{v}\"/>"); context.Output.WriteLine($"<output name=\"{Key}-output\" for=\"{Key}\">{v}</output>"); } else { if ("number".Equals(InputType, StringComparison.OrdinalIgnoreCase)) { //ensure that 1,2 in dk format is converted to 1.2 v = Converter.ToDouble(v).ToString(CultureInfo.InvariantCulture); } context.Output.WriteLine($" value=\"{v}\"/>"); } } } /// <summary> /// Returns the edited value. /// </summary> /// <returns>The edited value.</returns> /// <remarks></remarks> [Obsolete("Do not use")] public override object EndEdit() { string ret = HttpContext is object && HttpContext.Request is object ? Converter.ToString(HttpContext.Request[Key]) : string.Empty; if ("number".Equals(InputType, StringComparison.OrdinalIgnoreCase)) { //ensure that 1,2 in dk format is converted to 1.2 ret = Converter.ToDouble(ret).ToString(CultureInfo.InvariantCulture); } return ret; } public override void RenderValue(EditorRenderingContext context) { if (context is object) { if (context.AllowEditing) { if (InputType == "text") { string value = context.Value == null ? "" : context.Value.ToString(); string systemName = ItemManager.GetSystemName(context.Item); string editableValue = TextEditorAddIn.EnableFrontendEditing(value, string.Format("ItemType_{0}", systemName), context.Item.Id, context.ItemField.SystemName, "plaintext"); if ((value ?? "") != (editableValue ?? "")) { string tagName = Template.CombineTagName(context.TagNamespace, context.TagName) + ".Editable"; context.Template.SetTag(tagName, editableValue); } } } base.RenderValue(context); } } #endif public Hashtable GetOptions(string dropdownName) { Hashtable ret = null; if (string.Compare(dropdownName, "Type", StringComparison.InvariantCultureIgnoreCase) == 0) { ret = new Hashtable() { { "text", "Text" }, { "password", "Password" }, { "dateTime", "DateTime" }, { "dateTime-local", "DateTime-local" }, { "date", "Date" }, { "month", "Month" }, { "time", "Time" }, { "week", "Week" }, { "number", "Number" }, { "range", "Range" }, { "email", "e-mail" }, { "url", "Url" }, { "tel", "Tel" }, { "color", "Color" } }; } return ret; } }
You must be logged in to post in the forum