RTE custom links in custom content type

Former Member
Former Member

Hi

I have created custom application with custom content type.

My custom application contains RTE for text body.

We have some customizations for RTE in "Insert" tab, but I don't see them in my custom RTE.

On left my content's RTE, on right - RTE from blogpost.

Do someone have any suggestions?

  • Former Member
    0 Former Member

    When defining the Rich Text Editor include the ContentTypeId in the options.  This tells the system what content is being edited and what should be displayed in the editor.

    In Administration > Applications > Content > {your custom content type } > Filtering there should be a section for embeddables where you can enable which embeddables should be available for that particular content type.

  • Former Member
    0 Former Member in reply to Former Member

    Thank you. But I don't see "Filtering" tab for my content. How can I enable it?

  • Former Member
    0 Former Member in reply to Former Member

    You will need to implement IContentEmbeddableContentType Plugin Type in your custom content type.  That gives you a reference to the IContentEmbeddableContentTypeController, that is used to tell the controller when the content is created/updated so its embeddables can be parsed and stored.  That should also enable embeddables and the Filtering section in the content type.

    Here is what that looks like for Blogs:

    public void Initialize()
    {
    	Apis.Get<IBlogPosts>().Events.AfterCreate += Events_AfterCreate;
    	Apis.Get<IBlogPosts>().Events.BeforeUpdate += Events_BeforeUpdate;
    }
    		
    private IContentEmbeddableContentTypeController ContentEmbeddableContentTypeController;
    public void SetController(IContentEmbeddableContentTypeController controller)
    {
    	ContentEmbeddableContentTypeController = controller;
    }
    
    void Events_BeforeUpdate(Extensibility.Api.Version1.BlogPostBeforeUpdateEventArgs e)
    {
    	if (ContentEmbeddableContentTypeController != null)
    		ContentEmbeddableContentTypeController.Updated(e.ContentId, null, (updater) => 
    		{
    			e.InternalEntity.FormattedBody = updater.Update(e.InternalEntity.FormattedBody); 
    		});
    }
    
    void Events_AfterCreate(Extensibility.Api.Version1.BlogPostAfterCreateEventArgs e)
    {
    	if (ContentEmbeddableContentTypeController != null)
    	{
    		var body = e.Body("Raw");
    		if (ContentEmbeddableContentTypeController.Updated(e.ContentId, null, (updater) => { body = updater.Update(body); }))
    			Apis.Get<IBlogPosts>().Update(e.Id.Value, new BlogPostsUpdateOptions { Body = body });
    	}
    }

  • Former Member
    0 Former Member in reply to Former Member

    In my v.11.1.8 I don't see method 

    ContentEmbeddableContentTypeController.Updated(e.ContentId, null, (updater) => ....

    ContentEmbeddableContentTypeController interface is:

    public interface IContentEmbeddableContentTypeController
      {
        void AddUpdateEmbeddableContent(Guid contentId, Guid contentTypeId, string html);
    
        void AddUpdateEmbeddableContent(
          Guid contentId,
          Guid contentTypeId,
          IEnumerable<string> htmlSections);
      }

    Don't see a way to update body in DB

  • Former Member
    0 Former Member in reply to Former Member

    Sorry, that was 12.x code, I updated the code above to what should work with 11

  • Former Member
    0 Former Member in reply to Former Member

    I still don't see Filters tab, but already have all "inserts" in RTE


    class RoadTestReviewContentType : IContentEmbeddableContentType {
    
    ....
    
    private IContentEmbeddableContentTypeController _contentEmbeddableContentTypeController;
    
            public void SetController(IContentEmbeddableContentTypeController controller)
            {
                _contentEmbeddableContentTypeController = controller;
            }
    
            void EmbeddedEvents_AfterCreate(RoadTestReviewEventArgs e)
            {
                if (_contentEmbeddableContentTypeController != null)
                {
                    RoadTestReview item = _roadTestReviewService.Get(e.ContentId);
                    if (item != null)
                    {
                        _contentEmbeddableContentTypeController.AddUpdateEmbeddableContent(item.ContentId, item.ContentTypeId, item.Description);
                    }
                }
            }
            
            void EmbeddedEvents_AfterUpdate(RoadTestReviewEventArgs e)
            {
                if (_contentEmbeddableContentTypeController != null)
                {
                    RoadTestReview item = _roadTestReviewService.Get(e.ContentId);
                    if (item != null)
                    {
                        _contentEmbeddableContentTypeController.AddUpdateEmbeddableContent(item.ContentId, item.ContentTypeId, item.Description);
                    }
                }
            }

    Don't see any usage of_contentEmbeddableContentTypeController.AddUpdateEmbeddableContent(..)
    only for Polls but that may be in future embeddeds