2013-07-14 19 views
5

W Sitecore 7 większość moich ciągów zapytań stała się niestandardowymi trasami. Na przykład:Zmienić pamięć podręczną według adresu URL dla MVC Rendering?

OLD: /calendar?year=2013&month=7&day=14 
NEW: /calendar/2013/7/14 

W rezultacie, znajdę się w potrzebie różnym cache HTML moich renderingi przez URL, zamiast przez ciąg kwerendy. Czy Sitecore zapewnia wygodny sposób różnicowania pamięci podręcznej przez URL dla renderowania MVC?

UPDATE

I odkryli, że wszystkie wizualizacje MVC przechodzą przez mvc.renderRendering rurociągu, gdzie ich klucz cache jest generowany w poniższej klasy:

Sitecore.Mvc.Pipelines.Response.RenderRendering.GenerateCacheKey

nadrzędnymi metoda GenerateKey(Rendering rendering, RenderRenderingArgs args) dla tej klasy, jestem w stanie z powodzeniem dołączyć surowy URL za pomocą site.Request.FilePath. Problemem, z którym teraz borykam się, jest to, jak wyodrębnić to ustawienie pamięci podręcznej z samego renderowania? Myślę, że muszę utworzyć nową opcję buforowania "VaryByUrl" w renderowaniu, ale nie jestem całkiem pewien.

UPDATE 2

byłem w stanie odczytać niestandardowe pole off elementu rozdzielczości renderowania przy użyciu następującego kodu. To działa, ale tylko wygląda na element rozdzielczości (nie faktyczne wystąpienie renderowania w szczegółach prezentacja)

protected override string GenerateKey(Rendering rendering, RenderRenderingArgs args) 
{ 
    var key = base.GenerateKey(rendering, args); 

    if (rendering.RenderingItem.InnerItem.Fields["VaryByUrl"] != null) 
    { 
     var varyByUrl = ((CheckboxField)rendering.RenderingItem.InnerItem.Fields["VaryByUrl"]).Checked; 
     if (varyByUrl) key += GetUrlPart(rendering); 
    } 

    return key; 
} 

Odpowiedz

1

mieliśmy również potrzebę VaryByUrl ale w architekturze WebForms (v.6.5.0) .

Dla definicji sublayout przeważyłem klasę Sublayout, aby dodać VaryByUrl, podobnie jak w powyższym przykładzie.

Zakładając, że Twoja wersja Sitecore nadal używa tych samych szablonów Rendering Parameters, dla instancji renderowania, musisz utworzyć własną wersję klasy przywoływanej w polu Source/sitecore/templates/System/Layout/Rendering Parameters/Standardowe parametry renderowania/Buforowanie/Buforowanie.

Jest to odniesienie klasa w polu Źródło: type = Sitecore.Shell.Applications.Layouts.DeviceEditor.CachingField, Sitecore.Client