/// <summary> /// Render widget /// Return render result /// </summary> /// <param name="context">Template context</param> /// <param name="widget">Template widget</param> /// <returns></returns> public virtual string RenderWidget(Context context, TemplateWidget widget) { // Get from cache var info = GetWidgetInfo(widget.Path); IKeyValueCache <string, string> renderCache = null; string key = widget.GetCacheKey(); string renderResult = null; if (info.CacheTime > 0) { renderCache = WidgetRenderCache.GetOrAdd(info.CacheBy ?? "", _ => { var cacheFactory = Application.Ioc.Resolve <ICacheFactory>(); var policyNames = info.GetCacheIsolationPolicyNames(); return(cacheFactory.CreateCache <string, string>( CacheFactoryOptions.Default.WithIsolationPolicies(policyNames))); }); renderResult = renderCache.GetOrDefault(key); if (renderResult != null) { return(renderResult); } } // Render widget var renderer = Application.Ioc.Resolve <ITemplateWidgetRenderer>(); renderResult = renderer.Render(context, widget); // Store to cache if (info.CacheTime > 0) { renderCache.Put(key, renderResult, TimeSpan.FromSeconds(info.CacheTime)); } return(renderResult); }
/// <summary> /// Get cache key for template widget /// </summary> /// <param name="widget">Template widget</param> /// <returns></returns> public static string GetCacheKey(this TemplateWidget widget) { var cacheKey = widget.Path; if (widget.Args != null) { cacheKey += JsonConvert.SerializeObject(widget.Args); } return(cacheKey); }
/// <summary> /// Render widget /// Return render result /// </summary> public string Render(Context context, TemplateWidget widget) { var templateManager = Application.Ioc.Resolve <TemplateManager>(); var writer = new StringWriter(); var scope = templateManager.CreateHash(widget.Args); context.Stack(scope, () => { writer.Write(GetBeforeHtml(context, widget)); var includeTag = new Include(); var htmlPath = widget.Path + TemplateWidgetInfo.HtmlExtension; includeTag.Initialize("include", htmlPath, null); includeTag.Render(context, writer); writer.Write(GetAfterHtml(context, widget)); }); return(writer.ToString()); }
/// <summary> /// Render widget /// Return reder result /// </summary> /// <param name="context">Template context</param> /// <param name="widget">Template widget</param> /// <returns></returns> public virtual string RenderWidget(Context context, TemplateWidget widget) { // Get from cache var info = GetWidgetInfo(widget.Path); IKeyValueCache <string, string> renderCache = null; string key = null; string renderResult = null; if (info.CacheTime > 0) { renderCache = WidgetRenderCache.GetOrAdd(info.CacheBy ?? "", _ => { var cacheFactory = Application.Ioc.Resolve <ICacheFactory>(); var policyNames = info.GetCacheIsolationPolicyNames(); return(cacheFactory.CreateCache <string, string>( CacheFactoryOptions.Default.WithIsolationPolicies(policyNames))); }); key = widget.GetCacheKey(); renderResult = renderCache.GetOrDefault(key); if (renderResult != null) { return(renderResult); } } // Render widget var writer = new StringWriter(); writer.Write($"<div class='template_widget' data-widget='{key}'>"); var scope = Hash.FromAnonymousObject(widget.Args); context.Stack(scope, () => { var includeTag = new Include(); var htmlPath = widget.Path + TemplateWidgetInfo.HtmlExtension; includeTag.Initialize("include", htmlPath, null); includeTag.Render(context, writer); }); writer.Write("</div>"); renderResult = writer.ToString(); // Store to cache if (info.CacheTime > 0) { renderCache.Put(key, renderResult, TimeSpan.FromSeconds(info.CacheTime)); } return(renderResult); }
/// <summary> /// Get html after widget contents /// </summary> protected virtual string GetAfterHtml(Context context, TemplateWidget widget) { return("</div>"); }
/// <summary> /// Get html before widget contents /// </summary> protected virtual string GetBeforeHtml(Context context, TemplateWidget widget) { var cacheKey = widget.GetCacheKey(); return($"<div class='template_widget' data-widget='{cacheKey}'>"); }