Создание дополнения Optimizely CMS

В Часть первая этой серии я рассказал о том, как начать создавать собственный AddOn для Optimizely CMS 12. Это касается того, что я считаю идеальной структурой решения, передовых методов для JavaScript и стилей, расширения интерфейса меню и аутентификации. Во второй части я расскажу о добавлении дополнительного гаджета интерфейса редактора. Вы можете просмотреть примеры из этой серии в этом Шаблон дополнения Optimizely которые я создавал.

Обратите внимание, что весь контент этой статьи написан мной, однако некоторые элементы текста были обработаны с помощью Chat GPT для улучшения краткости или создания более официального тона.

Добавление гаджета в интерфейс редактора

Вы можете легко превратить стандартный контроллер MVC в гаджет редактора CMS, украсив его с помощью [IFrameComponent] атрибут. Основные свойства атрибутов следующие:

  • Заголовок : Имя гаджета, отображаемое в селекторе гаджетов.
  • Описание : Краткое описание гаджета, также видимое в селекторе гаджетов. Рекомендуется ограничиться одним предложением.
  • Категории : Соответствующая категория для гаджета. Для гаджетов, специфичных для контента, это должно быть установлено на “content” или “cms”
  • URL-адрес : Маршрут, соответствующий действию вашего контроллера.
  • PlugInAreas : Место в системе, где компонент должен быть доступен.
  • Перезагрузка при изменении контекста : позволяет пользовательскому интерфейсу перезагружать гаджет каждый раз, когда в интерфейсе CMS выбирается другой элемент контента.

Optimizely автоматически определит эти контроллеры и будет использовать их свойства. [IFrameComponent] атрибут для заполнения окна «Добавить гаджеты» в интерфейсе редактора CMS:

Когда интерфейс редактора загрузит ваш гаджет, он будет включать в себя id параметр строки запроса, содержащий ссылку на версию контента в формате строки (например, 123_456). Число слева представляет собой постоянную идентификацию контента, а число справа обозначает конкретную версию этого элемента контента. Эту информацию можно использовать для загрузки конкретной версии элемента контента и включения ее в модель вашего гаджета.

Read more:  Анонс API Jhoose Commerce для Optimizely Commerce Connect

Ниже приведен пример минимально необходимой настройки для вашего контроллера. Обратите внимание на включение [Authorize] атрибут на контроллере и [HttpGet] Атрибут действия. Они гарантируют, что пользователь аутентифицирован и что к интерфейсу нельзя получить доступ с помощью неожиданного HTTP-глагола. Обратите внимание, как я использую id параметр строки запроса для загрузки определенной версии страницы, выбранной пользователем в интерфейсе редактора CMS, для предоставления пользователю контекстно-специфической информации.

[Authorize(Policy = OptimizelyAddOnConstants.AuthorizationPolicy)]
[IFrameComponent(
    Url = "/optimizely-addon/gadget/index/",
    Title = "Example Gadget",
    Description = "An example gadget for the CMS Editor Interface.",
    Categories = "content",
    PlugInAreas = "/episerver/cms/assets",
    MinHeight = 200,
    MaxHeight = 800,
    ReloadOnContextChange = true)]
public sealed class GadgetController : Controller
{
    private readonly IContentLoader _contentLoader;

    public GadgetController(IContentLoader contentLoader)
    {
        _contentLoader = contentLoader;
    }

    [HttpGet]
    [Route("~/optimizely-addon/gadget/index")]
    public IActionResult Index()
    {
        var model = new GadgetViewModel
        {
            Page = GetPageData(Request),
            ContentId = Request.Query["Id"].ToString()
        };

        return View("~/Views/OptimizelyAddOn/Gadget/Index.cshtml", model);
    }

    private PageData? GetPageData(HttpRequest request)
    {
        var contentReferenceValue = request.Query["Id"].ToString() ?? string.Empty;
        if (string.IsNullOrWhiteSpace(contentReferenceValue))
        {
            return null;
        }

        var contentReference = new ContentReference(contentReferenceValue);
        if (_contentLoader.TryGet(contentReference, out var pageData))
        {
            return pageData;
        }

        return null;
    }
}

В гаджете, который я разработал для Стотт Секьюрития сосредоточен исключительно на визуализации предварительного просмотра заголовков безопасности для текущей выбранной страницы. Я добавил эту функцию, поскольку Stott Security поддерживает расширение политики безопасности контента для любой заданной страницы. Чтобы гарантировать, что пользователь может быть понятен контекст для предварительного просмотра заголовка, я загружаю страницу с помощью того же вспомогательного метода и добавляю его в модель представления для моего гаджета.

Расскажем интерфейсу редактора CMS о нашем дополнении

Чтобы интерфейс редактора распознал наш AddOn, необходимо объявить нашу сборку в module.config файл. Лично я не считаю, что это должно быть обязательным, поскольку вся информация предоставлена в [IFrameComponent] атрибут, хотя, похоже, проверка во время запуска приложения требует, чтобы этот файл конфигурации существовал. Я подозреваю, что это требование связано с гораздо более глубокой интеграцией с пользовательским интерфейсом. Например, пользовательский код редактора DOJO и т. д.

Read more:  Расширение LinkItem — Блог разработчиков Optimizely

Ниже приведен пример module.config file. Обратите внимание на включение политики авторизации в качестве атрибута узла модуля; это должно соответствовать политике, требуемой вашим AddOn. Кроме того, убедитесь, что полное имя сборки, содержащей ваш гаджет, указано в узле assemblies.



  
    
  

  
    
      
    
  

Если вы просто добавляете гаджет в определенную сборку Optimizely CMS, объявление сборки можно включить в module.config файл, расположенный в корне вашего веб-приложения. Однако в контексте AddOn это объявление должно быть размещено в защищенной папке модулей, используя такой путь, как [MyCmsWebsite]/modules/_protected/[MyAddOn]/module.config. Для достижения этого при создании пакета NuGet требуются некоторые дополнительные шаги, и я расскажу о них в Третья часть этой серии полностью посвящена процессу упаковки NuGet.

Краткое содержание

  • Добавьте [IFrameComponent] атрибут вашего контроллера, чтобы определить гаджет для интерфейса редактора CMS.
  • Добавьте [Authorize] атрибут к вашему контроллеру, чтобы защитить его.
  • Добавьте атрибуты HTTP-глаголов, такие как [HttpGet] к действиям вашего контроллера для предотвращения непредвиденных попыток доступа.
  • Добавить module.config файл в [MyCmsWebsite]/modules/_protected/[MyAddOn]/module.config папку, чтобы CMS могла проверить сборку вашего гаджета.

30 авг. 2024 г.

Ещё по этой теме

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.