4

私が取り組んでいるサイトでは、特定の日付に達すると特定のコンテンツのみが表示されます。

public bool IsActive
{
    get { return System.DateTime.Now >= this.IssueDate.DateTime; }
}

プレビュー モード機能とエクスペリエンス バーを使用して、このコードをテストしたいと考えています。ただし、System.DateTime.Nowプレビュー モードに関係なく、常に実際の現在の日付を返します。エクスペリエンスバーに設定された日付が尊重されることを保証できるように、これをどのように記述すればよいSystem.DateTime.Nowですか?

Sitecore バージョン: 6.4.1 rev. 110720

更新: このロジックによって制御されるメニューにこのアイテムが表示される前に、このアイテムの子を公開して表示する必要があるため、公開制限を使用できません。

4

5 に答える 5

4

Sitecore は、この状況を支援するために 1 組のプロパティを提供します。

    bool Sitecore.Configuration.State.Previewing
    DateTime Sitecore.Configuration.State.PreviewDate

プレビュー モードがオンの場合、このSitecore.Configuration.State.Previewingプロパティは true、それ以外の場合は false です。このSitecore.Configuration.State.PreviewDateプロパティは、Sitecore.Sites.SiteContext.DisplayDateプレビュー モードのエクスペリエンス バーの日付に設定されている を返します。

最終的に使用したコードは次のとおりです。

    public bool IsActive
    {
        get
        {
            DateTime dateToUse;
            if (Sitecore.Configuration.State.Previewing)
            {
                dateToUse = Sitecore.Configuration.State.PreviewDate;
            }
            else
            {
                dateToUse = DateTime.Now;
            }
            return dateToUse >= this.IssueDate.DateTime;
        }
    }

副作用もなく順調に進んでいるようです。

于 2013-05-10T19:02:53.920 に答える
1

Sitecore.Configuration.State.PreviewDate を単独で使用しても問題は発生しないと思います。これは常に (リクエストが行われたときの) dateTime を返すためです。

編集: 同じページ/コードへの AJAx 呼び出しの場合、Sitecore.Configuration.State は null になるため、必ず処理してください。

于 2015-07-28T00:05:50.587 に答える
1

WebEditUtil.GetCurrentDate() を使用して、選択した日付を取得できるはずです。

それを参照したくない場合は、Cookie「sc_date」を確認してください。

于 2013-05-13T09:40:39.793 に答える
1

このような問題を処理する最善の方法は、特定の日付までコンテンツの公開を制限することです。

コンテンツ エディターの[公開] タブで、[制限] ボタンをクリックして、コンテンツをいつ公開できるかを制限します。

特定の日時にコンテンツを公開する必要がある場合は、Automated Publisher モジュールを利用できます。

于 2013-05-11T17:18:22.103 に答える