Skip to content

Instantly share code, notes, and snippets.

View adnanzameer's full-sized avatar

Adnan Zameer adnanzameer

View GitHub Profile
public class ArticlePageController : PageController<ArticlePage>
{
private readonly PreviewPageHelper _pageHelper;
public ArticlePageController(PreviewPageHelper pageHelper)
{
_pageHelper = pageHelper;
}
public IActionResult Index(ArticlePage currentPage)
public class PreviewPageHelper(
IContentRepository repo,
IContentVersionRepository versions,
IContextModeResolver modes,
IHttpContextAccessor http)
{
private bool IsDraftView
{
get
{
using EPiServer.Shell.ObjectEditing.EditorDescriptors;
namespace YourNameSpace.Business.Editor;
[EditorDescriptorRegistration(TargetType = typeof(ContentArea))]
public class ContentAreaWithStatusEditorDescriptor : EditorDescriptor
{
public ContentAreaWithStatusEditorDescriptor()
{
// Point to our custom Dojo widget
define([
"dojo/_base/declare",
"epi-cms/contentediting/editors/ContentAreaEditor",
"dojo/dom-class",
"dojo/dom-construct",
"dojo/request",
"dojo/_base/lang"
], function (declare, ContentAreaEditor, domClass, domConstruct, request, lang) {
// === Config ===
services.AddSingleton<ContentAreaRenderer, PreviewDraftContentAreaRenderer>();
services.AddSingleton<IContentAreaLoader>(sp =>
new PreviewContentAreaLoader(
sp.GetRequiredService<IContentRepository>(),
sp.GetRequiredService<IContentVersionRepository>(),
sp.GetRequiredService<IContextModeResolver>()));
using System;
using System.Linq;
using EPiServer;
using EPiServer.Core;
using EPiServer.DataAbstraction;
using EPiServer.Web;
namespace YourNamespace.Business.Rendering;
public sealed class PreviewContentAreaLoader(
public class PreviewDraftContentAreaRenderer(IContextModeResolver contextModeResolver, IHttpContextAccessor httpContextAccessor) : ContentAreaRenderer
{
// Treat Preview like Edit so renderer doesn't skip edit-time behavior
private bool IsDraftView
{
get
{
var ctx = httpContextAccessor.HttpContext;
var hasParam = ctx?.Request?.Query.TryGetValue("showdrafts", out var val) == true
&& val.ToString().Equals("true", StringComparison.OrdinalIgnoreCase);
@adnanzameer
adnanzameer / PageDataPagePartialRouter.cs
Last active May 20, 2025 16:08
Removing a Segment from the URL in Optimizely CMS 12 Using Partial Routing
using System.Globalization;
using System.Web;
using EPiServer.Core.Routing;
using EPiServer.Core.Routing.Pipeline;
using EPiServer.Filters;
using EPiServer.Framework.Cache;
public class SitePageDataPartialRouter(
IContentLoader contentLoader,
ISynchronizedObjectInstanceCache cache)
@adnanzameer
adnanzameer / XhtmlExtensions.cs
Last active January 22, 2024 10:08
Improving Alt Text for Images in TinyMCE and Optimizley CMS
using Alloy.Models.Media;
using EPiServer.Core;
using EPiServer.Core.Html.StringParsing;
using EPiServer.ServiceLocation;
using EPiServer.Web;
using HtmlAgilityPack;
public static class XhtmlExtensions
{
public static XhtmlString AdjustAltText(this XhtmlString xhtmlString)
@adnanzameer
adnanzameer / Singleton.cs
Last active November 13, 2020 12:28
Singleton pagetypes and blocktypes. An Attribute and InitializableModule that limits page and block types to be created only once (single instance).
public class Singleton : Attribute
{
}