fluid
fluid copied to clipboard
Allow Template selection to be context aware (ASP.NET DisplayMode)
Problem:
I need to be able to use different liquid templates based on runtime information (cookie, user-agent, etc.). Similar to DisplayMode in ASP.NET.
Whilst it is possible to provide a custom File Provider which contains this logic and returns appropriate templates, the Template Cache in FluidViewRenderer just caches templates based on path - so renders my logic useless.
Possible change
- Add a new delegate to
FluidViewEngineOptionsthat takes the template path and returns a Template Cache key (string) - Use this delegate (if present) in
GetFluidTemplateAsyncto generate the key for each template in the Template Cache
e.g.
// Allow templates to be cached by external factors
// Typically the rule would match any rules in custom IFileProvider implementations
// e.g. Serve different templates based on Authentication status / User Agent etc.
string cacheKey = path;
if (_fluidViewEngineOptions.TemplateCacheKeyProvider!=null)
{
cacheKey = _fluidViewEngineOptions.TemplateCacheKeyProvider.Invoke(path);
}
if (cache.TemplateCache.TryGetValue(cacheKey, out var template))
{
return template;
}
template = await ParseLiquidFileAsync(path, fileProvider, includeViewStarts);
cache.TemplateCache[cacheKey] = template;
return template;
Looks like a CMS feature ;) we have the same thing in Orchard.
Are you using the FluidMvcViewEngine engine or just the FluidViewEngine ?
Ah, ok.
The Mvc one.
Created pull request #486 for this