2013-07-14 5 views
5

Mit Sitecore 7 sind die meisten meiner Abfragezeichenfolgen zu benutzerdefinierten Routen geworden. Zum Beispiel:Vary-Cache per URL für MVC-Renderings?

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

Als Ergebnis finde ich mich in der Notwendigkeit die HTML-Cache meines Renderings von URL variiert, anstatt durch Query-String. Bietet Sitecore eine bequeme Möglichkeit, den Cache nach URL für MVC-Renderings zu variieren?

UPDATE

ich gefunden habe, dass alle MVC-Renderings gehen durch die mvc.renderRendering Pipeline, wo ihre Cache-Schlüssel in der folgenden Klasse generiert wird:

Sitecore.Mvc.Pipelines.Response.RenderRendering.GenerateCacheKey

Durch das Überschreiben die GenerateKey(Rendering rendering, RenderRenderingArgs args) Methode dieser Klasse, ich bin in der Lage, die unformatierte URL mit site.Request.FilePath erfolgreich anzuhängen. Das Problem, dem ich jetzt gegenüberstehe, ist, wie ich diese Cache-Einstellung aus dem Rendering selbst extrahiere? Ich denke, ich muss eine neue "VaryByUrl" Caching-Option auf dem Rendering erstellen, aber ich bin mir nicht ganz sicher.

UPDATE 2

konnte ich aus der Rendering-Definition Element ein benutzerdefiniertes Feld lesen Sie den folgenden Code verwenden. Es funktioniert, aber es sieht nur bei der Definition Artikel (nicht die tatsächliche Instanz des Rendering in der Präsentation Details)

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; 
} 

Antwort

1

Wir haben auch ein Bedürfnis nach VaryByUrl hatten aber in einer WebForms Architektur (v.6.5.0) .

Für die Unterlayoutdefinition habe ich die Sublayout-Klasse überschrieben, um VaryByUrl hinzuzufügen, ähnlich wie Sie es oben erreicht haben.

Angenommen, Ihre Sitecore-Version verwendet immer noch dieselben Rendering-Parameter-Vorlagen. Für eine Instanz des Renderings müssen Sie eine eigene Version der Klasse im Feld Quelle von/sitecore/templates/System/Layout/Rendering-Parameter erstellen/Standard-Rendering-Parameter/Caching/Caching

Dies ist die Klassenreferenz im Feld Quelle: type = Sitecore.Shell.Applications.Layouts.DeviceEditor.CachingField, Sitecore.Client

Verwandte Themen