private void InvalidateCachesAfteMenuItemChanges(ContentContextBase context)
        {
            if (_recipeIsExecuting)
            {
                return;
            }

            var stereotype = context.ContentItem.GetStereotype();

            if (string.Equals(stereotype, "MenuItem", StringComparison.InvariantCultureIgnoreCase))
            {
                var menuItemId = context.ContentItem.Id;

                //get all menu ids
                var allMenuIds      = _contentManager.Query("Menu").List().Select(ci => ci.Id);
                var relevantMenuIds = new List <int>();

                //foreach menu id, check to see if the menu contains this menu part
                foreach (var menuId in allMenuIds)
                {
                    if (_menuService.GetMenuParts(menuId).Select(p => p.Id).Contains(menuItemId))
                    {
                        relevantMenuIds.Add(menuId);
                    }
                }

                //if so, get all menu widgets that use this menu and invalidate cache
                foreach (var menuId in relevantMenuIds)
                {
                    var scopedMenuId = menuId;
                    var menuWidgets  = _contentManager
                                       .Query <MenuWidgetPart>(GetMenuWidgetContentTypes())
                                       .List()
                                       .Where(p => p.MenuContentItemId == scopedMenuId);

                    _outputCachedPartsService.InvalidateCachedOutput(menuWidgets);
                }
            }
        }
示例#2
0
        protected override void Updated(UpdateContentContext context)
        {
            base.Updated(context);

            _outputCachedPartsService.InvalidateCachedOutput(context.ContentItem.Id);
        }