I've been following https://cdisol.blog/2019/11/22/episerver-creation-and-management-of-non-common-content-types/comment-page-1/#comment-367 and have everything working as expected but I can't for the life of me get any other options on the root folder in the asset pane apart from create folder to appear so I can't create my FAQ content type. I have also tried making the top folder an actual folder type of my own and this showed the new item menu item but throwed issues in chrome xhr viewer when trying to create.
Anyone got a working one of these
using System.ComponentModel.DataAnnotations;
using EPiServer.Core;
using EPiServer.DataAbstraction;
using EPiServer.DataAnnotations;
using EPiServer.Web;
namespace Client.Web.Client.Domain.Models.Containers
{
/// <summary>
/// An FAQ in the system
/// </summary>
[ContentType(DisplayName = "FAQ", GUID = "B3DFB166-792F-4EDC-AA57-E1333844BF4A", Description = "FAQ information for display on the website")]
public class Faq : StandardContentBase
{
/// <summary>
/// Gets or sets the question.
/// </summary>
/// <value>
/// The question.
/// </value>
[Display(Name = "Question", Description = "The question", Order = 1)]
[Required]
[StringLength(75)]
public virtual string Question { get; set; }
/// <summary>
/// Gets or sets the answer.
/// </summary>
/// <value>
/// The answer.
/// </value>
[Display(Name = "Answer", Description = "The answer to the question", Order = 2)]
[Required]
[UIHint(UIHint.Textarea)]
[StringLength(350)]
public virtual string Answer { get; set; }
/// <summary>
/// Gets or sets the full answer.
/// </summary>
/// <value>
/// The full answer.
/// </value>
[Display(Name = "Full Answer", Description = "The full answer for showing on the large list", Order = 3)]
[Required]
public virtual XhtmlString FullAnswer { get; set; }
}
}
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using EPiServer.Core;
using EPiServer.DataAbstraction;
using EPiServer.ServiceLocation;
using EPiServer.Shell;
using EPiServer.Web;
using Client.Web.Client.Domain.Models.Containers;
namespace Client.Web.Client.Assets
{
/// <summary>
/// Descriptor for the review pane
/// </summary>
/// <seealso cref="ContentRepositoryDescriptorBase" />
[ServiceConfiguration(typeof(IContentRepositoryDescriptor))]
public class FaqPaneDescriptor : ContentRepositoryDescriptorBase
{
private readonly ContentReference _root;
public static string RepositoryKey => "FaqPaneDescriptor";
public static string RootName => "FAQs";
/// <summary>
/// Initializes a new instance of the <see cref="FaqPaneDescriptor"/> class.
/// </summary>
public FaqPaneDescriptor()
{
var contentRootService = ServiceLocator.Current.GetInstance<ContentRootService>();
_root = contentRootService.Get(RootName);
}
public override string Key => RepositoryKey;
public override string Name => RootName;
/// <summary>
/// Gets the contained types.
/// </summary>
/// <value>
/// The contained types.
/// </value>
public override IEnumerable<Type> ContainedTypes
{
get { return new[] { typeof(Faq), typeof(ContentFolder) }; }
}
/// <summary>
/// Gets the creatable types.
/// </summary>
/// <value>
/// The creatable types.
/// </value>
public override IEnumerable<Type> CreatableTypes
{
get { return new List<Type> { typeof(Faq), typeof(ContentFolder) }; }
}
public override IEnumerable<ContentReference> Roots
{
get { return new[] { _root }; }
}
public override IEnumerable<Type> LinkableTypes
{
get { return new List<Type> { typeof(Faq) }; }
}
/// <summary>
/// Gets the main navigation types.
/// </summary>
/// <value>
/// The main navigation types.
/// </value>
public override IEnumerable<Type> MainNavigationTypes
{
get { return new[] { typeof(ContentFolder) }; }
}
}
}
using EPiServer.Shell;
using EPiServer.Shell.ViewComposition;
namespace Client.Web.Client.Assets
{
/// <summary>
/// Component for FAQ section
/// </summary>
/// <seealso cref="ComponentDefinitionBase" />
[Component]
public class FaqPaneNavigationComponent_: ComponentDefinitionBase
{
/// <summary>
/// Initializes a new instance of the <see cref="FaqPaneNavigationComponent_"/> class.
/// </summary>
public FaqPaneNavigationComponent_() : base("epi-cms/asset/HierarchicalList")
{
base.Title = "FAQs";
Categories = new[] { "content" };
PlugInAreas = new[] { PlugInArea.AssetsDefaultGroup, PlugInArea.NavigationDefaultGroup };
SortOrder = 1000;
base.Settings.Add(new Setting("repositoryKey", FaqPaneDescriptor.RepositoryKey));
base.Settings.Add(new Setting("noDataMessages", new { single = "This folder does not contain any locations", multiple = "These folders do not contain any locations" }));
}
}
}
using System;
using EPiServer.Core;
using EPiServer.DataAbstraction;
using EPiServer.Framework;
using EPiServer.Framework.Initialization;
using EPiServer.ServiceLocation;
using Client.Web.Client.Assets;
using Client.Web.Client.Domain.Models.Containers;
namespace Client.Web.Client
{
/// <summary>
/// The FAQs root folder
/// </summary>
/// <seealso cref="EPiServer.Framework.IInitializableModule" />
[InitializableModule]
[ModuleDependency(typeof(EPiServer.Web.InitializationModule))]
public class FaqsRootInitialization_: IInitializableModule
{
public void Initialize(InitializationEngine context)
{
var contentRootService = context.Locate.Advanced.GetInstance<ContentRootService>();
// We create a folder at the root level called People
contentRootService.Register<ContentFolder>(FaqPaneDescriptor.RootName, new Guid("C6CFA6E9-6999-4F5B-A471-A994D528999C"), ContentReference.RootPage);
}
public void Uninitialize(InitializationEngine context)
{
}
}
}