1

通常のイベントドキュメントのフィールドを拡張するカスタムイベントドキュメントを作成しました。パイプ区切りリストの多くのカテゴリIDに0を保持できるフィールドを追加しました。カテゴリはカスタムテーブルに保存されます。

これが私のフィルターコードです:

public partial class CMSGlobalFiles_EventCategoryFilter : CMSAbstractDataFilterControl
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected override void OnInit(EventArgs e)
    {
         SetupControl();

        base.OnInit(e);
    }

    protected override void OnPreRender(EventArgs e)
    {
        if (RequestHelper.IsPostBack())
        {
            setFilter();
         }

        base.OnPreRender(e);
    }

    private void SetupControl()
    {
        if (this.StopProcessing)
        {
            this.Visible = false;
        }

        else if (!RequestHelper.IsPostBack())
        {
            InitializeCategory();
        }

    }

    private void InitializeCategory()
    {
        CustomTableItemProvider customTableProvider = ne CustomTableItemProvider(CMSContext.CurrentUser);

        string where = "";

        string tableName = "customtable.EventCategory";

        DataClassInfo customTable = DataClassInfoProvider.GetDataClass(tableName);

        if (customTable != null)
        {

            DataSet dataSet = customTableProvider.GetItems(tableName, where, null);

            if (!DataHelper.DataSourceIsEmpty(dataSet))
            {
                this.drpCategory.DataSource = dataSet;
                this.drpCategory.DataTextField = "CategoryName";
                this.drpCategory.DataValueField = "ItemGUID";

                this.drpCategory.DataBind();

                this.drpCategory.Items.Insert(0, new ListItem("(all)", "##ALL##"));
            }
        }

    } 

    private void setFilter() 
    {
        string where = null;

        if (this.drpCategory.SelectedValue != null)
        {
            Guid itemGUID = ValidationHelper.GetGuid(this.drpCategory.SelectedValue, Guid.Empty );

            if (itemGUID != Guid.Empty)
            {
                where = "EventCategory LIKE \'%" + itemGUID.ToString() + "%\'";
            }

         }

         if (where != null)
         {
             this.WhereCondition = where;
         }

         this.RaiseOnFilterChanged();
     }

}

このフィルターは、基本的なリピーターとドキュメントデータソースを使用するとうまく機能します。イベントカレンダーを使用すると、使用されません。Kenticoバージョン6.0.30を使用しています

4

1 に答える 1

1

問題は、標準の.Netカレンダーに基づくCMSCalendarコントロールに基づく、EventCalendarの異なるライフサイクルにあります。

まず、開発者はこれを修正し、シナリオをデフォルトで実行できるようにする方法を発見しました。この修正プログラムは、6.0.33ホットフィックス(金曜日25日にリリースされる予定)に含まれます。ご不便をおかけして申し訳ございません。

この今後の修正とは別に、Webパーツを変更(複製)し、フィルターコントロールをそのWebパーツに直接統合し、DataBindの前にOnPreRenderでカレンダーのWhere条件を設定することにより、EventCalendarで結果をフィルター処理することもできます。

protected override void OnPreRender(EventArgs e)
{
    calItems.WhereCondition = "some filtering condition";
    ...

CMSインスタンスにホットフィックスを適用できれば、確かに労力は少なくなります。

よろしく、

Zdenek/Kenticoサポート

于 2012-05-24T14:52:15.757 に答える