Веб-формы для маркетологов (WFFM) HTML-тег ввода с атрибутом заполнителя

У меня есть требование, в котором я внедряю sitecore WFFM для создания формы. На странице есть теги ввода HTML с атрибутом Placeholder. Мне нужно отобразить поле WFFM SingleLineInput во входной тег с атрибутом заполнителя. Что я должен делать?

Я знаю, что класс SingleLineText определен в Sitecore.Form.Web.UI.Controls dll.


person Bevin    schedule 08.09.2014    source источник


Ответы (3)


Этого можно добиться, расширив SingleLineText дополнительным свойством для хранения текстового значения заполнителя. Как только свойство установлено, вам нужно переопределить метод OnInit и внедрить атрибут-заполнитель, если он установлен.

public interface IPlaceholderField
{
    string PlaceholderText { get; set; }
}

Вот пользовательская реализация SingleLineText

[ValidationProperty("Text")]
public class SingleLineText : Sitecore.Form.Web.UI.Controls.SingleLineText, IPlaceholderField
{
    [VisualCategory("Custom Properties")]
    [VisualProperty("Placeholder Text", 2)]
    [DefaultValue("")]
    public string PlaceholderText { get; set; }

    protected override void OnInit(EventArgs e)
    {
        // Set placeholder text, if present
        if (!String.IsNullOrEmpty(PlaceholderText))
        {
            textbox.Attributes["placeholder"] = PlaceholderText;
        }

        base.OnInit(e);
    }
}

Наконец, вам нужно будет создать новое определение элемента поля в разделе /sitecore/system/Modules/Web Forms for Marketers/Settings/Field Types/Custom/ и настроить сборку на использование указанного выше класса. Ваше новое свойство-заполнитель должно появиться в категории «Пользовательские свойства», если поле выбрано в конструкторе форм.

person Derek Hunziker    schedule 08.09.2014
comment
Привет, ребята, это все еще относится к WFFM 8.1? - person Jay; 26.01.2017

Если вы используете версию WFFM MVC, вам необходимо добавить следующее, как объяснено в утвержденном ответе.

1- Создайте класс

 public interface IPlaceholderField
{
    string PlaceHolder { get; set; }
}

[ValidationProperty("Text")]
public class SingleLineText : Sitecore.Form.Web.UI.Controls.SingleLineText, IPlaceholderField
{
    [VisualCategory("Custom Properties")]
    [VisualProperty("Placeholder", 2)]
    [DefaultValue("")]
    public string PlaceHolder { get; set; }

    protected override void OnInit(EventArgs e)
    {
        // Set placeholder text, if present
        if (!string.IsNullOrEmpty(PlaceHolder))
        {
            textbox.Attributes["placeholder"] = PlaceHolder;
        }

        base.OnInit(e);
    }
}



public class ExtendedSingleLineTextField : Sitecore.Forms.Mvc.ViewModels.Fields.SingleLineTextField, IPlaceholderField
{
    [VisualCategory("Custom Properties")]
    [VisualProperty("Placeholder", 2)]
    [DefaultValue("")]
    public string PlaceHolder { get; set; }

}

2- Скопируйте однострочный текст из /sitecore/system/Modules/Web Forms for Marketers/Settings/Field Types/Simple Types/Single-Line Text в /sitecore/system/Modules/ Веб-формы для маркетологов/Настройки/Типы полей/Пользовательский набор сборок, классов и типов MVC

введите описание изображения здесь

3-Создайте новый файл chtml в папке \Views\Form\EditorTemplates и назовите его ExtendedSingleLineTextField.cshtml. Имя должно совпадать с именем класса (ExtendedSingleLineTextField)

@using Sitecore.Forms.Mvc.Html
@using LendLease.Web.HtmlHelpers
@model  LendLease.Extension.Sc.WFFM.ExtendedSingleLineTextField


@using (Html.BeginField())
{
    @*@Html.TextBoxFor(m => m.Value, new { placeholder = Model.PlaceHolder })*@
    @Html.ExtendedBootstrapEditor("value",Model.PlaceHolder,"",new []{""})

}

добавьте помощник html, чтобы вы могли ввести заполнитель, я назвал его BootstrapEditorHtmlHelperExtension.cs

  public static class BootstrapEditorHtmlHelperExtension
{
    public static MvcHtmlString ExtendedBootstrapEditor(this HtmlHelper helper, string expression, string placeholderText, string inlineStyle, string[] classes)
    {
        var str = string.Empty;
        var viewModel = helper.ViewData.Model as IViewModel;
        if (viewModel != null)
        {
            var styleSettings = viewModel as IStyleSettings;
            if (styleSettings != null)
            {
                str = styleSettings.CssClass;
            }
            if (string.IsNullOrEmpty(placeholderText))
            {
                 placeholderText = viewModel.Title;
            }
        }
        return helper.Editor(expression, new
        {
            htmlAttributes = new
            {
                @class = (string.Join(" ", classes) + " form-control" + (string.IsNullOrEmpty(str) ? string.Empty : " " + str) + (helper.ViewData.Model is SingleLineTextField ? " dangerousSymbolsCheck" : string.Empty)),
                placeholder = placeholderText,
                style = (inlineStyle ?? string.Empty)
            }
        });
    }
}
person Azadeh Khojandi    schedule 02.12.2015
comment
Спасибо, мне действительно очень помогает :) - person syed Ahsan Jaffri; 19.04.2016
comment
что было бы в случае мультикультурного веб-сайта? в качестве обходного пути мы бы выбрали элемент словаря - person syed Ahsan Jaffri; 19.04.2016
comment
Я использовал этот метод для создания текста-заполнителя, и он отлично работает, но по какой-то причине текст не переводится, когда я создаю версию на другом языке. Текст, который я добавляю в поле для другого языка, также переопределяет все остальные версии. Есть идеи? - person BSmith; 23.06.2017

Я использовал следующий код для создания настраиваемого поля. И работает нормально :)

internal class CustomType : SingleLineText
{
    [VisualProperty("Placeholder", 100)]
    [VisualCategory("Appearance")]
    public string placeholderText
    {
        get;
        set;
    }
    protected override void DoRender(System.Web.UI.HtmlTextWriter writer)
    {
        this.textbox.Attributes.Add("placeholder", this.PlaceholderText );

        base.DoRender(writer);
    }

}

Затем я просто создал элемент типа поля в разделе /sitecore/system/Modules/Web Forms for Marketers/Settings/Field Types/Custom и ввел сведения о сборке и классе в элемент.

Работает как шарм...!!

person Bevin    schedule 09.09.2014