protected new void Run(ClientPipelineArgs args) { var contentItem = Database.GetItem(ItemUri.Parse(args.Parameters["uri"])); if (contentItem == null) { SheerResponse.Alert("Item not found."); } else { var itemId = contentItem.ID.ToString(); if (args.IsPostBack) { if (args.Result != "yes") { return; } var startItem = Context.ContentDatabase.GetItem(Context.Site.StartPath); if (startItem == null) { SheerResponse.Alert("Start item not found."); return; } if (!HasPresentationPipeline.Run(startItem)) { SheerResponse.Alert("The start item cannot be previewed because it has no layout for the current device.\n\nPreview cannot be started."); return; } itemId = startItem.ID.ToString(); } else if (!HasPresentationPipeline.Run(contentItem)) { SheerResponse.Confirm("The current item cannot be previewed because it has no layout for the current device.\n\nDo you want to preview the start Web page instead?"); args.WaitForPostBack(); return; } SheerResponse.CheckModified(false); //Dynamically Speaking, we want the site of the item as it relates to a home Item. //If not found, fallback to default functionalty. var site = DynamicSiteManager.GetSiteContextByContentItem(contentItem) ?? Factory.GetSite(Settings.Preview.DefaultSite); Assert.IsNotNull(site, "Site \"{0}\" not found", Settings.Preview.DefaultSite); WebUtil.SetCookieValue(site.GetCookieKey("sc_date"), string.Empty); PreviewManager.StoreShellUser(Settings.Preview.AsAnonymous); var webSiteUrl = SiteContext.GetWebSiteUrl(); webSiteUrl["sc_itemid"] = itemId; webSiteUrl["sc_mode"] = "preview"; webSiteUrl["sc_lang"] = contentItem.Language.ToString(); DeviceSimulationUtil.DeacitvateSimulators(); SheerResponse.Eval("window.open('" + webSiteUrl + "', '_blank')"); } }
private static string GetPageEditorLink(Item itemToEdit, Language language) { if (language == (Language)null) { language = itemToEdit.Language; } UrlString webSiteUrl = SiteContext.GetWebSiteUrl(itemToEdit.Database); webSiteUrl["sc_itemid"] = itemToEdit.ID.ToString(); webSiteUrl["sc_lang"] = language.Name; webSiteUrl["sc_mode"] = "edit"; return(webSiteUrl.ToString()); }
protected void Run(ClientPipelineArgs args) { Assert.ArgumentNotNull(args, "args"); if (!SheerResponse.CheckModified()) { return; } if ((args.Parameters["needconfirmation"] == "false") || args.IsPostBack) { if (args.Result == "no") { return; } UrlString webSiteUrl = SiteContext.GetWebSiteUrl(); webSiteUrl.Add("sc_mode", "preview"); webSiteUrl.Add("sc_compare", true.ToString()); if (!string.IsNullOrEmpty(args.Parameters["sc_itemid"])) { webSiteUrl.Add("sc_itemid", args.Parameters["sc_itemid"]); } if (!String.IsNullOrEmpty(args.Parameters["sc_lang"])) { webSiteUrl.Add("sc_lang", args.Parameters["sc_lang"]); } PreviewManager.RestoreUser(); Context.ClientPage.ClientResponse.Eval("window.open('" + webSiteUrl + "', '_blank')"); } else { SheerResponse.Confirm("The current item does not have layout details; do you want to open the home item instead?"); args.WaitForPostBack(); } }
// GET: Snippet public ActionResult CompositeComponent() { var renderingContext = RenderingContext.CurrentOrNull; if (renderingContext == null) { throw new ApplicationException("Could not find current rendering context, aborting"); } var hasDataSource = !string.IsNullOrWhiteSpace(renderingContext.Rendering.DataSource); var dataSourceItem = hasDataSource ? renderingContext.Rendering.Item : null; var pageContext = new PageContext() { RequestContext = this.ControllerContext.RequestContext, Item = dataSourceItem }; var oldDisplayMode = global::Sitecore.Context.Site != null ? global::Sitecore.Context.Site.DisplayMode : DisplayMode.Normal; try { if (oldDisplayMode == DisplayMode.Edit && global::Sitecore.Context.Site != null) { //disable the editing of the nested component global::Sitecore.Context.Site.SetDisplayMode(DisplayMode.Preview, DisplayModeDuration.Temporary); } using (PlaceholderContext.Enter(new PlaceholderContext("/"))) using (ContextService.Get().Push <PageContext>(pageContext)) { var stringWriter = new StringWriter(); if (oldDisplayMode == DisplayMode.Edit) { if (hasDataSource) { UrlString webSiteUrl = SiteContext.GetWebSiteUrl(global::Sitecore.Context.ContentDatabase ?? global::Sitecore.Context.Database); webSiteUrl.Add("sc_mode", "edit"); webSiteUrl.Add("sc_itemid", pageContext.Item.ID.ToString()); webSiteUrl.Add("sc_lang", pageContext.Item.Language.ToString()); //copied style from bootstrap alert stringWriter.Write("<div role=\"alert\" class=\"alert alert-warning\" style=\"box-sizing: border-box; margin-bottom: 20px; border-top: rgb(250,235,204) 1px solid; border-right: rgb(250,235,204) 1px solid; white-space: normal; word-spacing: 0px; border-bottom: rgb(250,235,204) 1px solid; text-transform: none; color: rgb(138,109,59); padding-bottom: 15px; padding-top: 15px; font: 14px/20px 'Helvetica Neue', helvetica, arial, sans-serif; padding-left: 15px; border-left: rgb(250,235,204) 1px solid; widows: 1; letter-spacing: normal; padding-right: 15px; background-color: rgb(252,248,227); text-indent: 0px; border-radius: 4px; -webkit-text-stroke-width: 0px\">"); stringWriter.Write("<a class=\"alert-link\" style=\"box-sizing: border-box; text-decoration: none; font-weight: 700; color: rgb(102,81,44); background-color: transparent\" href=\""); stringWriter.Write(webSiteUrl); stringWriter.Write("\" target=\"_blank\" onmousedown=\"window.open(this.href)\">""); stringWriter.Write(pageContext.Item.DisplayName); stringWriter.Write("" is a 'composite component'. Click here to open it's editor</a><br /></div>"); } else { //copied style from bootstrap alert stringWriter.Write("<div role=\"alert\" class=\"alert alert-warning\" style=\"box-sizing: border-box; margin-bottom: 20px; border-top: rgb(250,235,204) 1px solid; border-right: rgb(250,235,204) 1px solid; white-space: normal; word-spacing: 0px; border-bottom: rgb(250,235,204) 1px solid; text-transform: none; color: rgb(138,109,59); padding-bottom: 15px; padding-top: 15px; font: 14px/20px 'Helvetica Neue', helvetica, arial, sans-serif; padding-left: 15px; border-left: rgb(250,235,204) 1px solid; widows: 1; letter-spacing: normal; padding-right: 15px; background-color: rgb(252,248,227); text-indent: 0px; border-radius: 4px; -webkit-text-stroke-width: 0px\">"); stringWriter.Write("<a class=\"alert-link\" style=\"box-sizing: border-box; text-decoration: none; font-weight: 700; color: rgb(102,81,44); background-color: transparent\" href=\"\" onmousedown=\""); stringWriter.Write("Sitecore.PageModes.PageEditor.postRequest('webedit:setdatasource(referenceId="); stringWriter.Write(renderingContext.Rendering.UniqueId.ToString("B").ToUpper()); stringWriter.Write(",renderingId="); stringWriter.Write(renderingContext.Rendering.RenderingItem.ID); stringWriter.Write(",id="); stringWriter.Write(renderingContext.Rendering.Item.ID); stringWriter.Write(")',null,false)"); stringWriter.Write("\" target=\"_blank\">This is a 'composite component' without a datasource. Click here to associate a composite component instance</a><br /></div>"); } } if (hasDataSource && dataSourceItem != null && dataSourceItem?.TemplateID == new global::Sitecore.Data.ID(CompositeComponentInstanceTemplateId) && !string.IsNullOrEmpty(pageContext.Item?["PlaceholderName"])) { PipelineService.Get().RunPipeline <RenderPlaceholderArgs>("mvc.renderPlaceholder", new RenderPlaceholderArgs(pageContext.Item["PlaceholderName"], (TextWriter)stringWriter, new ContentRendering())); } return(Content(stringWriter.ToString())); } } finally { global::Sitecore.Context.Site.SetDisplayMode(oldDisplayMode, DisplayModeDuration.Temporary); } }
// GET: Snippet public ActionResult CompositeComponent() { var renderingContext = RenderingContext.CurrentOrNull; if (renderingContext == null) { throw new ApplicationException("Could not find current rendering context, aborting"); } var hasDataSource = !string.IsNullOrWhiteSpace(renderingContext.Rendering.DataSource); var pageContext = new PageContext() { RequestContext = this.ControllerContext.RequestContext, Item = !hasDataSource ? null : renderingContext.Rendering.Item }; var oldDisplayMode = global::Sitecore.Context.Site != null ? global::Sitecore.Context.Site.DisplayMode : DisplayMode.Normal; try { if (oldDisplayMode == DisplayMode.Edit && global::Sitecore.Context.Site != null) { //disable the editing of the nested component global::Sitecore.Context.Site.SetDisplayMode(DisplayMode.Preview, DisplayModeDuration.Temporary); } using (PlaceholderContext.Enter(new PlaceholderContext("/"))) using (ContextService.Get().Push <PageContext>(pageContext)) { var htmlHelper = new HtmlHelper(new ViewContext(), new ViewPage()); var stringWriter = new StringWriter(); if (oldDisplayMode == DisplayMode.Edit) { if (hasDataSource) { UrlString webSiteUrl = SiteContext.GetWebSiteUrl(Sitecore.Context.Database); webSiteUrl.Add("sc_mode", "edit"); webSiteUrl.Add("sc_itemid", pageContext.Item.ID.ToString()); webSiteUrl.Add("sc_lang", pageContext.Item.Language.ToString()); //copied style from bootstrap alert stringWriter.Write("<div role=\"alert\" class=\"alert alert-warning\" style=\"box-sizing: border-box; margin-bottom: 20px; border-top: rgb(250,235,204) 1px solid; border-right: rgb(250,235,204) 1px solid; white-space: normal; word-spacing: 0px; border-bottom: rgb(250,235,204) 1px solid; text-transform: none; color: rgb(138,109,59); padding-bottom: 15px; padding-top: 15px; font: 14px/20px 'Helvetica Neue', helvetica, arial, sans-serif; padding-left: 15px; border-left: rgb(250,235,204) 1px solid; widows: 1; letter-spacing: normal; padding-right: 15px; background-color: rgb(252,248,227); text-indent: 0px; border-radius: 4px; -webkit-text-stroke-width: 0px\">"); stringWriter.Write("<a class=\"alert-link\" style=\"box-sizing: border-box; text-decoration: none; font-weight: 700; color: rgb(102,81,44); background-color: transparent\" href=\""); stringWriter.Write(webSiteUrl); stringWriter.Write("\" target=\"_blank\" onmousedown=\"window.open(this.href)\">""); stringWriter.Write(pageContext.Item.DisplayName); stringWriter.Write("" is a 'composite component'. Click here to open it's editor</a><br /></div>"); } else { //copied style from bootstrap alert stringWriter.Write("<div role=\"alert\" class=\"alert alert-warning\" style=\"box-sizing: border-box; margin-bottom: 20px; border-top: rgb(250,235,204) 1px solid; border-right: rgb(250,235,204) 1px solid; white-space: normal; word-spacing: 0px; border-bottom: rgb(250,235,204) 1px solid; text-transform: none; color: rgb(138,109,59); padding-bottom: 15px; padding-top: 15px; font: 14px/20px 'Helvetica Neue', helvetica, arial, sans-serif; padding-left: 15px; border-left: rgb(250,235,204) 1px solid; widows: 1; letter-spacing: normal; padding-right: 15px; background-color: rgb(252,248,227); text-indent: 0px; border-radius: 4px; -webkit-text-stroke-width: 0px\">"); stringWriter.Write("<a class=\"alert-link\" style=\"box-sizing: border-box; text-decoration: none; font-weight: 700; color: rgb(102,81,44); background-color: transparent\" href=\"\" onmousedown=\""); stringWriter.Write("Sitecore.PageModes.PageEditor.postRequest('webedit:setdatasource(referenceId="); stringWriter.Write(renderingContext.Rendering.UniqueId.ToString("B").ToUpper()); stringWriter.Write(",renderingId="); stringWriter.Write(renderingContext.Rendering.RenderingItem.ID); stringWriter.Write(",id="); stringWriter.Write(renderingContext.Rendering.Item.ID); stringWriter.Write(")',null,false)"); stringWriter.Write("\" target=\"_blank\">This is a 'composite component' without a datasource. Click here to associate a composite component instance</a><br /></div>"); } } else { var enableAync = htmlHelper.GetCheckboxRenderingParameterValue("Enable Async"); var baseUrl = htmlHelper.GetRenderingParameter("Async Fetch Base Url"); var componentClass = enableAync ? "composite async" : "composite"; var tagAttributes = htmlHelper.GetContainerTagAttributes(componentClass); var asyncUrl = renderingContext.Rendering.Item.GetItemUrl(); if (!string.IsNullOrEmpty(baseUrl)) { asyncUrl = baseUrl + "/" + asyncUrl; } var asyncAttr = enableAync ? string.Format(@"data-src=""{0}""", asyncUrl) : string.Empty; stringWriter.Write(string.Format(@"<div {0} {1}>", tagAttributes, asyncAttr)); } if (hasDataSource) { var loadAsyncOnly = htmlHelper.GetCheckboxRenderingParameterValue("Load Content Async Only"); if (!loadAsyncOnly || oldDisplayMode == DisplayMode.Edit) { PipelineService.Get().RunPipeline <RenderPlaceholderArgs>("mvc.renderPlaceholder", new RenderPlaceholderArgs(pageContext.Item["PlaceholderName"] ?? "compositecontent", (TextWriter)stringWriter, new ContentRendering())); } } if (oldDisplayMode != DisplayMode.Edit) { stringWriter.Write("</div>"); } return(Content(stringWriter.ToString())); } } finally { global::Sitecore.Context.Site.SetDisplayMode(oldDisplayMode, DisplayModeDuration.Temporary); } }