Example #1
0
        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);
        }
Example #4
0
        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));
            });
Example #5
0
        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);
        }
Example #7
0
        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));
        }
Example #8
0
        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);
        }