public IViewComponentResult Invoke(string widgetZone, object additionalData = null) { var model = new List <RenderWidgetModel>(); //add widget zone to view component arguments additionalData = new RouteValueDictionary(additionalData) { { "widgetZone", widgetZone } }; var widgets = _widgetService.LoadActiveWidgetsByWidgetZone(widgetZone); foreach (var widget in widgets) { widget.GetPublicViewComponent(widgetZone, out string viewComponentName); var widgetModel = new RenderWidgetModel { WidgetViewComponentName = viewComponentName, WidgetViewComponentArguments = additionalData }; model.Add(widgetModel); } //no data? if (!model.Any()) { return(Content("")); } return(View(model)); }
public ActionResult WidgetsByZone(string widgetZone, object additionalData = null) { var cacheKey = string.Format(ModelCacheEventConsumer.WIDGET_MODEL_KEY, _storeContext.CurrentStore.Id, widgetZone, _themeContext.WorkingThemeName); var cacheModel = _cacheManager.Get(cacheKey, () => { //model var model = new List <RenderWidgetModel>(); var widgets = _widgetService.LoadActiveWidgetsByWidgetZone(widgetZone, _storeContext.CurrentStore.Id); foreach (var widget in widgets) { var widgetModel = new RenderWidgetModel(); string actionName; string controllerName; RouteValueDictionary routeValues; widget.GetDisplayWidgetRoute(widgetZone, out actionName, out controllerName, out routeValues); widgetModel.ActionName = actionName; widgetModel.ControllerName = controllerName; widgetModel.RouteValues = routeValues; model.Add(widgetModel); } return(model); }); //no data? if (!cacheModel.Any()) { return(Content("")); } //"RouteValues" property of widget models depends on "additionalData". //We need to clone the cached model before modifications (the updated one should not be cached) var clonedModel = new List <RenderWidgetModel>(); foreach (var widgetModel in cacheModel) { var clonedWidgetModel = new RenderWidgetModel(); clonedWidgetModel.ActionName = widgetModel.ActionName; clonedWidgetModel.ControllerName = widgetModel.ControllerName; if (widgetModel.RouteValues != null) { clonedWidgetModel.RouteValues = new RouteValueDictionary(widgetModel.RouteValues); } if (additionalData != null) { if (clonedWidgetModel.RouteValues == null) { clonedWidgetModel.RouteValues = new RouteValueDictionary(); } clonedWidgetModel.RouteValues.Add("additionalData", additionalData); } clonedModel.Add(clonedWidgetModel); } return(PartialView(clonedModel)); }
/// <summary> /// Get the render widget models /// </summary> /// <param name="widgetZone">Name of widget zone</param> /// <param name="additionalData">Additional data object</param> /// <returns>List of the render widget models</returns> public virtual List <RenderWidgetModel> PrepareRenderWidgetModel(string widgetZone, object additionalData = null) { var cacheKey = string.Format(ModelCacheEventConsumer.WIDGET_MODEL_KEY, _workContext.CurrentCustomer.Id, _storeContext.CurrentStore.Id, widgetZone, _themeContext.WorkingThemeName); //add widget zone to view component arguments additionalData = new RouteValueDictionary() { { "widgetZone", widgetZone }, { "additionalData", additionalData } }; var cachedModel = _cacheManager.Get(cacheKey, () => { //model var model = new List <RenderWidgetModel>(); var widgets = _widgetService.LoadActiveWidgetsByWidgetZone(widgetZone, _workContext.CurrentCustomer, _storeContext.CurrentStore.Id); foreach (var widget in widgets) { model.Add(new RenderWidgetModel { WidgetViewComponentName = widget.GetWidgetViewComponentName(widgetZone), WidgetViewComponentArguments = additionalData }); } return(model); }); //"WidgetViewComponentArguments" property of widget models depends on "additionalData". //We need to clone the cached model before modifications (the updated one should not be cached) var clonedModel = new List <RenderWidgetModel>(); foreach (var widgetModel in cachedModel) { var clonedWidgetModel = new RenderWidgetModel { WidgetViewComponentName = widgetModel.WidgetViewComponentName }; if (widgetModel.WidgetViewComponentArguments != null) { clonedWidgetModel.WidgetViewComponentArguments = new RouteValueDictionary(widgetModel.WidgetViewComponentArguments); } if (additionalData != null) { if (clonedWidgetModel.WidgetViewComponentArguments == null) { clonedWidgetModel.WidgetViewComponentArguments = new RouteValueDictionary(); } clonedWidgetModel.WidgetViewComponentArguments = additionalData; } clonedModel.Add(clonedWidgetModel); } return(clonedModel); }
public virtual async Task <List <RenderWidgetModel> > PrepareRenderWidget(string widgetZone, object additionalData = null) { var cacheKey = string.Format(ModelCacheEventConsumer.WIDGET_MODEL_KEY, _storeContext.CurrentStore.Id, widgetZone, _themeContext.WorkingThemeName); //add widget zone to view component arguments additionalData = new RouteValueDictionary(additionalData) { { "widgetZone", widgetZone }, { "additionalData", additionalData } }; var cachedModel = await _cacheManager.GetAsync(cacheKey, async() => { //model var model = new List <RenderWidgetModel>(); var widgets = _widgetService.LoadActiveWidgetsByWidgetZone(widgetZone, _storeContext.CurrentStore.Id); foreach (var widget in widgets) { widget.GetPublicViewComponent(widgetZone, out string viewComponentName); var widgetModel = new RenderWidgetModel { WidgetViewComponentName = viewComponentName, WidgetViewComponentArguments = additionalData }; model.Add(widgetModel); } return(await Task.FromResult(model)); });
public virtual List <RenderWidgetModel> PrepareRenderWidgetModel(string widgetZone, object additionalData = null) { var cacheKey = string.Format(ModelÖnbellekOlayTüketici.WIDGET_MODEL_KEY, _workContext.MevcutKullanıcı.Id, _storeContext.MevcutSite.Id, widgetZone, _themeContext.MevcutTemaAdı); additionalData = new RouteValueDictionary() { { "widgetZone", widgetZone }, { "additionalData", additionalData } }; var cachedModel = _cacheManager.Al(cacheKey, () => { //model var model = new List <RenderWidgetModel>(); var widgets = _widgetService.BölgedenAktifWidgetleriYükle(widgetZone, _workContext.MevcutKullanıcı, _storeContext.MevcutSite.Id); foreach (var widget in widgets) { widget.PublicViewBileşeniAl(widgetZone, out string viewComponentName); var widgetModel = new RenderWidgetModel { WidgetViewComponentName = viewComponentName, WidgetViewComponentArguments = additionalData }; model.Add(widgetModel); } return(model); }); var clonedModel = new List <RenderWidgetModel>(); foreach (var widgetModel in cachedModel) { var clonedWidgetModel = new RenderWidgetModel { WidgetViewComponentName = widgetModel.WidgetViewComponentName }; if (widgetModel.WidgetViewComponentArguments != null) { clonedWidgetModel.WidgetViewComponentArguments = new RouteValueDictionary(widgetModel.WidgetViewComponentArguments); } if (additionalData != null) { if (clonedWidgetModel.WidgetViewComponentArguments == null) { clonedWidgetModel.WidgetViewComponentArguments = new RouteValueDictionary(); } clonedWidgetModel.WidgetViewComponentArguments = additionalData; } clonedModel.Add(clonedWidgetModel); } return(clonedModel); }
/// <summary> /// 获得部件模型 /// Get the render widget models /// </summary> /// <param name="widgetZone">部件区域 Name of widget zone</param> /// <param name="additionalData">附加数据 Additional data object</param> /// <returns>List of the render widget models</returns> public virtual List <RenderWidgetModel> GetRenderWidgetModels(string widgetZone, object additionalData = null) { //缓存key var cacheKey = string.Format(ModelCacheEventConsumer.WIDGET_MODEL_KEY, _workContext.CurrentCustomer.Id, _storeContext.CurrentStore.Id, widgetZone, _themeContext.WorkingThemeName); //获得部件模型(支持缓存) var cachedModel = _cacheManager.Get(cacheKey, () => { //model var model = new List <RenderWidgetModel>(); var widgets = _widgetService.LoadActiveWidgetsByWidgetZone(widgetZone, _workContext.CurrentCustomer, _storeContext.CurrentStore.Id); foreach (var widget in widgets) { var widgetModel = new RenderWidgetModel(); string actionName; string controllerName; RouteValueDictionary routeValues; widget.GetDisplayWidgetRoute(widgetZone, out actionName, out controllerName, out routeValues); widgetModel.ActionName = actionName; widgetModel.ControllerName = controllerName; widgetModel.RouteValues = routeValues; model.Add(widgetModel); } return(model); }); //"RouteValues" property of widget models depends on "additionalData". //路由信息,依赖于附加数据。 //We need to clone the cached model before modifications (the updated one should not be cached) //原则:修改后的数据不应该被缓存。 var clonedModel = new List <RenderWidgetModel>(); foreach (var widgetModel in cachedModel) { var clonedWidgetModel = new RenderWidgetModel(); clonedWidgetModel.ActionName = widgetModel.ActionName; clonedWidgetModel.ControllerName = widgetModel.ControllerName; if (widgetModel.RouteValues != null) { clonedWidgetModel.RouteValues = new RouteValueDictionary(widgetModel.RouteValues); } if (additionalData != null) { if (clonedWidgetModel.RouteValues == null) { clonedWidgetModel.RouteValues = new RouteValueDictionary(); } clonedWidgetModel.RouteValues.Add("additionalData", additionalData); } clonedModel.Add(clonedWidgetModel); } return(clonedModel); }
public ActionResult WidgetsByZone(string widgetZone) { var model = new List <RenderWidgetModel>(); var widgets = _widgetService.LoadActiveWidgetsByWidgetZone(widgetZone); foreach (var widget in widgets) { var widgetModel = new RenderWidgetModel(); string actionName; string controllerName; RouteValueDictionary routeValues; widget.Value.GetDisplayWidgetRoute(widgetZone, null, 0, out actionName, out controllerName, out routeValues); widgetModel.ActionName = actionName; widgetModel.ControllerName = controllerName; widgetModel.RouteValues = routeValues; model.Add(widgetModel); } return(PartialView(model)); }
public virtual List <RenderWidgetModel> GetRenderWidgetModels(string widgetZone, object additionalData = null) { var currentUserId = _httpContext.User.Identity.GetUserId(); var currentSettings = _settingService.LoadSetting <SiteSettings>(); var cacheKey = $"widget-{currentUserId}-{widgetZone}-{currentSettings.WebsiteTheme}"; var cachedModel = _memoryCache.Get(cacheKey, () => { //model var model = new List <RenderWidgetModel>(); var widgets = _widgetService.LoadWidgetsByWidgetZone(widgetZone); foreach (var widget in widgets) { var widgetModel = new RenderWidgetModel(); widget.GetDisplayWidgetRoute(widgetZone, out string actionName, out string controllerName, out RouteValueDictionary routeValues); widgetModel.ActionName = actionName; widgetModel.ControllerName = controllerName; widgetModel.RouteValues = routeValues; model.Add(widgetModel); }
public virtual List <RenderWidgetModel> PrepareRenderWidget(string widgetZone, object additionalData = null) { //woa return(new List <Models.Cms.RenderWidgetModel> { new Models.Cms.RenderWidgetModel { ActionName = "doesntmatter", ControllerName = "Experimental",//this should be actually 'ViewComponentName' RouteValues = new RouteValueDictionary(new { doesntmatter2 = "doesntmatter3" }) } }); //returns coordinates for Controllers.Actions var cacheKey = string.Format(ModelCacheEventConsumer.WIDGET_MODEL_KEY, _storeContext.CurrentStore.Id, widgetZone, _themeContext.WorkingThemeName); //var cacheModel = _cacheManager.Get(cacheKey, () => //{ //model var model = new List <RenderWidgetModel>(); var widgets = _widgetService.LoadActiveWidgetsByWidgetZone(widgetZone, _storeContext.CurrentStore.Id); foreach (var widget in widgets) { var widgetModel = new RenderWidgetModel(); widget.GetDisplayWidgetRoute(widgetZone, out string actionName, out string controllerName, out RouteValueDictionary routeValues); widgetModel.ActionName = actionName; widgetModel.ControllerName = controllerName; widgetModel.RouteValues = routeValues; model.Add(widgetModel); } var cacheModel = model; // return model; //}); //no data? if (!cacheModel.Any()) { return(null); } //return Content(""); //"RouteValues" property of widget models depends on "additionalData". //We need to clone the cached model before modifications (the updated one should not be cached) var clonedModel = new List <RenderWidgetModel>(); foreach (var widgetModel in cacheModel) { var clonedWidgetModel = new RenderWidgetModel(); clonedWidgetModel.ActionName = widgetModel.ActionName; clonedWidgetModel.ControllerName = widgetModel.ControllerName; if (widgetModel.RouteValues != null) { clonedWidgetModel.RouteValues = new RouteValueDictionary(widgetModel.RouteValues); } if (additionalData != null) { if (clonedWidgetModel.RouteValues == null) { clonedWidgetModel.RouteValues = new RouteValueDictionary(); } clonedWidgetModel.RouteValues.Add("additionalData", additionalData); } clonedModel.Add(clonedWidgetModel); } return(cacheModel); }