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?

Parents Reply Children
  • 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