Несколько версий назад в Optimizely CMS добавлено встроенные блоки функциональность. Это очень полезная функция, которая позволяет редактору создавать динамические страницы с использованием ContentArea. Цикл публикации блоков привязан к странице, на которой они используются, поэтому редактирование стало очень простым. В этой статье я хотел описать небольшое улучшение, которое упрощает работу с языковыми версиями. Расширение позволяет копировать встроенные блоки при переводе страниц.
Встроенные блоки работают только с ContentAreas, имеющими значение CultureSpecific. Это означает, что при создании языковой версии вы добавляете страницу, содержащую пустое свойство ContentArea. В результате редактору приходится вручную пересоздавать все блоки, а не просто менять некоторые тексты в свойствах блоков. Дополнение позволяет создавать копии всех встроенных блоков, используемых в ContentArea при переводе страницы.
Например, у нас есть StandardPage со свойством LocalizableContentArea, специфичным для культуры.
общественный класс StandardPage: SitePageData {
[CultureSpecific]
общественный виртуальный ContentArea LocalizableContentArea {get; набор; } }
общественный сорт Страница по умолчанию : Данные страницы сайта { [CultureSpecific] общественный виртуальный КонтентАреа ЛокализублеКонтентАреа { получать; набор; } } |
Мы создаем новую страницу на английском языке (который является основным языком), добавляем два встроенных блока в LocalizableContentArea и публикуем страницу.
После перевода страницы на другой язык мы получаем пустое свойство ContentArea.
При использовании расширенного кода и переводе страницы мы сначала получаем диалог с вопросом о том, как следует обрабатывать встроенные блоки в ContentArea. Мы можем выбрать либо «Игнорировать» и не копировать блоки (поведение CMS по умолчанию), либо «Преобразовать» блоки и добавлять их на переведенную страницу.
Диалоговое окно отображается только в том случае, если страница содержит локализуемую ContentArea, содержащую экземпляры встроенных блоков, чтобы не путать редактора в других случаях использования.
Выполнение
Копирование встроенных блоков осуществляется путем расширения IContentChangeManager Метод CreateLanguageBranch. После перевода страницы загружается версия контента на основном языке, встроенные блоки копируются, а затем сохраняется текущая версия страницы.
Код ищет встроенные блоки, которые можно локализовать в ContentAreas, и копирует их один за другим.
На стороне клиента загружаются метаданные содержимого основного языка, чтобы проверить, содержит ли контент встроенные блоки, и если это правда, то отображается диалоговое окно.
Код доступен как суть Github