3

訪問者がサイトに表示したいコンテンツを選択できるようにする方法を探しています。

プログラムで Sitecore DMS のプロファイルをトリガーする方法はありますか?

SDN の関連ドキュメント ( http://sdn.sitecore.net/Reference/Sitecore 6/DMS Documentation.aspx ) を調べましたが、今のところ方法が見つかりません。

編集: Sitecore サポート ポータルでこれを取り上げました - 詳細がわかり次第、回答を投稿します。

4

2 に答える 2

2

私は自分のプロジェクトで同様のことをしました。このコード サンプルを確認して、ご不明な点がありましたらお知らせください。また、コンテンツ アイテムにもプロファイルを追加してください。項目のコレクションに対して FilterItemByBehavior を呼び出すと、ユーザーの過去の閲覧行動に基づいて項目がフィルター処理されます。

 private static Dictionary<string, List<string>> AnalyticsFilter()
    {
        Dictionary<string, List<string>> filter = new Dictionary<string, List<string>>();

        if (Tracker.CurrentVisit.Profiles.Count() > 0)
        {
            foreach (VisitorDataSet.ProfilesRow row in Tracker.CurrentVisit.Profiles)
            {
                List<string> keys = new List<string>();
                foreach (var key in row.Values)
                {
                    if (key.Value >= ResourceHelper.GetInt(new ID(Resources.Settings.AnalyticsProfileSetMinValGuid)))
                        keys.Add(key.Key);
                }
                filter.Add(row.ProfileName, keys);
            }
        }
        if(ResourceHelper.IsTurnedOn(new ID(Resources.Settings.AnalyticsUserProfileEnableSwitch)))
            filter = ApplyUserProfile(filter);
        return filter;
    }


    public static List<Item> FilterItemByBehavior(List<Item> items, int count)
    {
        try
        {
            var filter = AnalyticsFilter();
            foreach (var profile in filter)
            {
                int counter = ResourceHelper.GetInt(new ID(Resources.Settings.AnalyticsProfileTagsFilterMaxGuid));
                if (items.Count <= count) break;
                foreach (string key in profile.Value)
                {
                    if (items.Count <= count || counter == 0) break;
                    items = items.Where(i => (((MultilistField)i.Fields[profile.Key]).GetItems().ToList().Select(x => x.Name).Contains(key))).ToList();
                    counter--;
                }
            }
            return items.Count <= count ? items : items.Take(count).ToList();
        }
        catch (System.Exception ex)
        {
            Sitecore.Diagnostics.Log.Error(ex.Message, ex, new AnalyticsHelper());
            return items.Count <= count ? items : items.Take(count).ToList();
        }
    }
于 2012-08-11T00:06:05.017 に答える
1

この質問について、Sitecore サポートから回答を受け取りました。ここにあります:

「パーソナライゼーションにパターン カードを使用している場合は、次のコードをドロップダウン リストの「項目選択」イベントのイベント ハンドラーとして使用できます。」

var profile = Sitecore.Analytics.Tracker.CurrentVisit.GetOrCreateProfile("<Profile Name>");
profile.BeginEdit();
profile.Score("<profile key>",<profile key value you want to set>);
profile.Score("<profile key>",<profile key value you want to set>);
profile.UpdatePattern(); //sets the appropriate pattern based on the current profile keys values you have just set.
profile.EndEdit();

これは自動プロファイル マッチングを妨げるため、このアプローチを使用するかどうかはわかりません。

于 2012-08-13T10:27:16.683 に答える