В Часть первая этой серии я рассказал о том, как начать создавать собственный AddOn для Optimizely CMS 12. Это касается того, что я считаю идеальной структурой решения, передовых методов для JavaScript и стилей, расширения интерфейса меню и аутентификации. Во второй части я расскажу о добавлении дополнительного гаджета интерфейса редактора. Вы можете просмотреть примеры из этой серии в этом Шаблон дополнения Optimizely которые я создавал.
Обратите внимание, что весь контент этой статьи написан мной, однако некоторые элементы текста были обработаны с помощью Chat GPT для улучшения краткости или создания более официального тона.
Вы можете легко превратить стандартный контроллер MVC в гаджет редактора CMS, украсив его с помощью [IFrameComponent] атрибут. Основные свойства атрибутов следующие:
- Заголовок : Имя гаджета, отображаемое в селекторе гаджетов.
- Описание : Краткое описание гаджета, также видимое в селекторе гаджетов. Рекомендуется ограничиться одним предложением.
- Категории : Соответствующая категория для гаджета. Для гаджетов, специфичных для контента, это должно быть установлено на “content” или “cms”
- URL-адрес : Маршрут, соответствующий действию вашего контроллера.
- PlugInAreas : Место в системе, где компонент должен быть доступен.
- Перезагрузка при изменении контекста : позволяет пользовательскому интерфейсу перезагружать гаджет каждый раз, когда в интерфейсе CMS выбирается другой элемент контента.
Optimizely автоматически определит эти контроллеры и будет использовать их свойства. [IFrameComponent] атрибут для заполнения окна «Добавить гаджеты» в интерфейсе редактора CMS:
Когда интерфейс редактора загрузит ваш гаджет, он будет включать в себя id параметр строки запроса, содержащий ссылку на версию контента в формате строки (например, 123_456). Число слева представляет собой постоянную идентификацию контента, а число справа обозначает конкретную версию этого элемента контента. Эту информацию можно использовать для загрузки конкретной версии элемента контента и включения ее в модель вашего гаджета.
Ниже приведен пример минимально необходимой настройки для вашего контроллера. Обратите внимание на включение [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 поддерживает расширение политики безопасности контента для любой заданной страницы. Чтобы гарантировать, что пользователь может быть понятен контекст для предварительного просмотра заголовка, я загружаю страницу с помощью того же вспомогательного метода и добавляю его в модель представления для моего гаджета.
Чтобы интерфейс редактора распознал наш AddOn, необходимо объявить нашу сборку в module.config файл. Лично я не считаю, что это должно быть обязательным, поскольку вся информация предоставлена в [IFrameComponent] атрибут, хотя, похоже, проверка во время запуска приложения требует, чтобы этот файл конфигурации существовал. Я подозреваю, что это требование связано с гораздо более глубокой интеграцией с пользовательским интерфейсом. Например, пользовательский код редактора DOJO и т. д.
Ниже приведен пример 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 г.
