예제 #1
0
        public void InjectPrefab(RenderingItem prefabProxy, DeviceDefinition deviceLayout, string placeholderPath, int index, Item pageItem)
        {
            var getItemArgs = new PrefabsGetItemArgs {
                DeviceLayout = deviceLayout,
                DestinationPlaceholderPath = placeholderPath,
                PrefabProxy = prefabProxy,
                PageItem    = pageItem
            };

            CorePipeline.Run("prefabsGetItem", getItemArgs);
            if (!getItemArgs.Handled || getItemArgs.Result == null)
            {
                throw new System.Exception($"Prefab not found");
            }

            var getRenderingsArgs = new PrefabGetRenderingsArgs
            {
                Prefab       = getItemArgs.Result,
                DeviceLayout = deviceLayout,
                DestinationPlaceholderPath = placeholderPath,
                PrefabProxy = prefabProxy,
                PageItem    = pageItem,
                Index       = index
            };

            CorePipeline.Run("prefabGetRenderings", getRenderingsArgs);
            if (!getRenderingsArgs.Handled)
            {
                throw new System.Exception($"Prefab had no renderings to add");
            }

            getRenderingsArgs.Reuse();
            CorePipeline.Run("prefabApplyRenderings", getRenderingsArgs);
        }
        /// <summary>
        /// Assume convention that rendering name matches prefab name
        /// Lookup item from defined global repository
        /// </summary>
        /// <param name="args"></param>
        public override void Process(PrefabsGetItemArgs args)
        {
            if (args.Handled)
            {
                return;
            }

            using (new SecurityDisabler())
            {
                var globalFolder = args.PrefabProxy.Database.GetItem(Config.Paths.Prefabs);

                var result = globalFolder?.Axes.GetDescendant(args.PrefabProxy.Name);
                if (result == null)
                {
                    return;
                }

                args.Result = result;
                args.AbortPipeline();
            }
        }
 public abstract void Process(PrefabsGetItemArgs args);