public void Process(PipelineArgs args) { ExecuteInsertRenderingArgs insertRenderingArg = args as ExecuteInsertRenderingArgs; // IInsertRenderingArgs; if (insertRenderingArg == null) { return; } var renderingItem = insertRenderingArg.RenderingItem; if (!_prefabService.IsPrefab(renderingItem)) { return; } var index = GetIndex(insertRenderingArg.Device, insertRenderingArg.Result.UniqueId); if (index != -1) { // SXA adds prefab proxy in previous processor... remove it insertRenderingArg.Device.Renderings.RemoveAt(index); } else { index = ConvertPosition(insertRenderingArg.Device, insertRenderingArg.PlaceholderKey, insertRenderingArg.Position); } // manipulate layoutDefinition via device reference _prefabService.InjectPrefab( renderingItem, insertRenderingArg.Device, insertRenderingArg.PlaceholderKey, index, insertRenderingArg.ContextItem ); // Switch context from prefab proxy to first rendering of prefab var resultIndex = index >= 0 ? index : insertRenderingArg.Device.Renderings.Count - 1; insertRenderingArg.Result = new RenderingReference( (RenderingDefinition)insertRenderingArg.Device.Renderings[resultIndex], insertRenderingArg.Language, insertRenderingArg.ContentDatabase ); insertRenderingArg.PerformInlineRendering = true; insertRenderingArg.AbortPipeline(); }
protected void PrefabInject(ClientPipelineArgs args) { var doFollowUp = false; var lastIndex = -1; Assert.ArgumentNotNull(args, "args"); if (args.IsPostBack && args.HasResult) { string[] strArrays = args.Result.Split(new char[] { ',' }); string renderingItemId = strArrays[0]; string placeholderPath = strArrays[1].Replace("-c-", ","); var layoutDefinition = GetLayoutDefinition_exposed(); var deviceRenderings = layoutDefinition.GetDevice(this.DeviceID); var renderingItem = Client.ContentDatabase.GetItem(renderingItemId); if (_prefabService.IsPrefab(renderingItem)) { var item = UIUtil.GetItemFromQueryString(Client.ContentDatabase); doFollowUp = true; // manipulate layoutDefinition via device reference _prefabService.InjectPrefab(renderingItem, deviceRenderings, placeholderPath, this.SelectedIndex, item); lastIndex = deviceRenderings.Renderings.Count; SetDefinition_exposed(layoutDefinition); // Never allow editor to open if (args.Result.EndsWith("1")) { args.Result = string.Concat(args.Result.TrimEnd('1'), "0"); } } } // Call overridden method for all other logic and most importantly refresh() - NOTE: this adds our proxy item... so remove it next this.Add(args); // Remove robot (prefab proxy item) [this is because we can't call refresh() and exit above - it's private] if (doFollowUp) { this.SelectedIndex = lastIndex; // set index to delete (last item always) Remove(Message.Empty); // unfortunately this always selects the last element } }