2017-01-17 3 views
1

私はSitecoreの役割でhtmlをキャッシュする最良の方法を見つけようとしています。私はVaryByParamを使用して考えていますが、私は静的に私のレンダリングをバインドしません。それらはすべて動的にページに追加されます。私はWebフォームを使用しています。どんな助けもありがたいです。ロールによるカスタムSitecoreキャ​​ッシュ

答えて

2

私はあなたの解決策の一部を使用して終了しました。 e Vary By Paramを有効にするだけでは簡単ではありませんでした。

まず私はその後、私はサイトコアのデフォルトのsublayoutを交換するSitecore.Web.UI.WebControls.Sublayoutから継承sublayoutをしなければならなかったRoleManager

public class RoleManager 
{ 
    private User currentUser; 
    public string GetReadRole(Item item) 
    { 
     currentUser = Sitecore.Context.User; 
     //int found = 0; 
     foreach (Role role in currentUser.Roles) 
     { 
      return role.LocalName; //return the role they are in 
     } 
     return ""; 

    } 
} 

を実装する必要がありました。これで、すべて行うためにそこに残っていた

protected RoleManager roleManager = new RoleManager(); 
    public override string GetCacheKey() 
    { 
     Sitecore.Sites.SiteContext site = Sitecore.Context.Site; 
     if ((Cacheable && ((site == null) || site.CacheHtml)) && !SkipCaching()) 
     { 
      if (VaryByParm) 
      { 
       return base.GetCacheKey() + "_#userRole:" + roleManager.GetReadRole(this.GetItem()); 
      } 

      return base.GetCacheKey(); 
     } 

     return string.Empty; 
    } 

は、すべてのコードは今Sitecore.Web.UI.SublayoutRenderingType

public override System.Web.UI.Control GetControl(NameValueCollection parameters, bool assert) 
    { 
     var sublayout = new RoleSublayout(); 
     foreach (string key in parameters.Keys) 
     { 
      ReflectionUtil.SetProperty(sublayout, key, parameters[key]); 
     } 
     return sublayout; 
    } 

から継承されたレンダリングパイプラインcalls.Thisクラスを置き換えるために、レンダリングsublayoutを追加しました行われ、ちょうどラインが変更web.configファイル に追加する必要が

<control template="sublayout" type="Sitecore.Web.UI.SublayoutRenderingType, Sitecore.Kernel" propertyMap="Path=path" /> 

だったし、今

です
<control template="sublayout" type="YOURNAMESPACE.RoleSublayoutRenderingType, DLLNAME" propertyMap="Path=path" /> 

編集:これが機能する 、あなたはサイトコア

でこの記事をVeryByParamを有効にする必要がありますトンの答えのための http://sitecoreblog.alexshyba.com/sitecore_output_caching_kick_it_up_a_notch/

1

Sitecore htmlキャッシュの "Vary By Parm"は、レンダリングパラメータ用です。あなたは右varByキャッシュパラメータ(複数可)を選択し、コードの依存関係に依存

参照:

creating-sitecore-sublayouts-dynamically

時にはbasics-of-html-caching

、デフォルトのHTMLのキャッシュがあなたのロジックと一致しない場合には、あなたは重い部分にカスタムSitecoreキャ​​ッシングを使用するか、独自の "var By"を作成することができます。Sitecore Custom Cache

+0

おかげで私を助けました。私は提供された記事の両方を読んで、私はまだ立ち往生しています。私は、sitecoreコンテンツエディタとそのリンクascxファイルでサブレイアウトを使用しています。私たちにはたくさんのユーザーがいますが、Althelete、Hobiestなどのような大きなグループに分かれています。これらのグループはすべて異なるコンテンツを参照しています。私はこれらの役割に依存して出力をキャッシュすることができますが、私の人生にとっては不可能です現在の設定でキャッシュパイプラインをインターセプトする方法を理解してください – KevinDev

+0

ユーザ/グループロジックのコードサンプルを追加できますか?私はあなたが "レンダリングパラメータ"としてユーザーグループを追加するか、またはクエリ文字列に追加する必要があると思います。あなたはvarByキャッシュを使用することができます。他のユーザーはおそらくそれほどキャッシュヒットしません。その他のオプションCustom Sitecore Cache –

+0

カスタムキャッシュソリューションをアンサーに追加します。 –

関連する問題