[Sitecore][WFFM]フォームフィールドをカスタマイズ

概要:Web Froms for Marketers のフォーム日付フィールドをカスタマイズする手順のメモ書きです。


検証環境は次の通りです。

  • Sitecore 5
  • Sitecore 6
  • Sitecore 7

 

Web Froms for Marketersのフォームにデーフォルトで必要なフィールドはそろえています。また、カスタムフィールドも簡単に追加することができます。お客さんの要求で既存のフィールをにちょっとしたカスタマイズが必要とされる場合はよくあります。今回、簡単な既存フィールドのフォーマットをカスタマイズする手順を書いてみたいです。

例えば、”日付の選択”というフィールをを使用する際にディフォールとのフォーマットは欧州(日 – 月 – 年)となっています。これを日本(年 – 月 – 日)フォーマットに変更してみよう。

20141113_01

 

20141113_02

まずこのフィールドを使用しているアセンブリとクラスをクラスを見つけよう。DLLでみでもいですし、date pickerで検索をかけるとフィールドアイテムが見つけて、そこで使用するクラスをすぐに見つける時もあります。

20141113_03

ライブラリでコードとみると、変更画必要とするのはに二箇所に箇所です。

20141113_04

20141113_05

このクラスをカスタマイズします。まず、クラスを追加します。追加する場所は開発者によって違ってきます。同じパスを使う開発者もいれば、カスタムコートを別のフォールターで管理する開発者もいます。また、別のプロジェクトを作成して別のライブラリで管理するところもあります。よく、カスタムロジック(CL)また、ビジネスロジック(BL)、カスタムロジックレーヤーやビジネスロジックレーヤーと呼ぶところもあります。個人的に別のぷロジェストで管理をすることをお勧めします。なぜなら、アップグレードする際に注意にすべき変更をレピューしやいです。また、別のdllですので、お客さんの要求で変更を行う際にサイトをこういったレーヤーで変更だけをし、サイト全体コンパイルせずに済む場合もあります。この例で同じパースを使用します。

20141113_06

コードをコンパイルした後、DatePickerのアセンブリとクラスを変更します。

20141113_07

これで次回日付の選択を使用する際にディフォルトで日本(年 – 月 – 日)フォーマットになります。

20141113_08

#region

using System;
using System.ComponentModel;
using System.Web.UI;

#endregion

namespace local.sc75.Website.Web.UI.Controls
{
    using Sitecore.Form.Core.Attributes;
    using Sitecore.Form.Core.Utility;
    using Sitecore.Form.Core.Visual;

    [ValidationProperty("Text")]
    public class DatePicker : Sitecore.Form.Web.UI.Controls.DatePicker
    {
        // Methods
        public DatePicker()
            : this(HtmlTextWriterTag.Div)
        {
        }

        public DatePicker(HtmlTextWriterTag tag)
            : base(tag)
        {
            base.classAtributes["DateFormat"] = "yyyy-MM-dd";
            base.classAtributes["startDate"] = "20000101T120000";
            base.classAtributes["endDate"] = Sitecore.DateUtil.ToIsoDate(DateTime.Now.AddYears(1).Date);
            this.Text = Sitecore.DateUtil.ToIsoDate(DateTime.Now);
        }

        #region Public Properties

        [VisualProperty("Display Format:", 50)]
        [DefaultValue("yyyy-MM-dd")]
        [VisualFieldType(typeof(DateFormatField))]
        public new string DateFormat
        {
            get
            {
                return this.classAtributes["DateFormat"];
            }
            set
            {
                this.classAtributes["DateFormat"] = value;
            }
        }

        #endregion
    }
}

 

 

Uncategorized