Repository navigation
api cms return to cms
-
Метод:
GET - URL: https://cms.my-company.ru/litera/return-to-cms
Задача этого метода - вернуть Пользователя в контекст работы с CMS Партнёра. Его реализация зависит от того, какой способ интеграции с Сайтом был выбран Партнёром.
На странице Подготовка текста есть описание действий в связке с этим методом, пожалуйста, изучите её прежде чем продолжать.
Здесь же мы дадим некоторые варианты того, как может выглядеть страница return-to-cms в зависимости от того, какой вариант показа редактора литеры был выбран.
Параметры этого запроса должны быть достаточны для того, чтобы вы могли перенаправить пользователя на нужную вам страницу сайта.
Содержимое страницы будет зависеть от того, как был показан редактор Литеры для проверки и работы с текстом. Есть три возможных вариантов для этого: открыть одноразовую ссылку на редактор Литеры в том же окне браузера где и была страница сайта, открыть одноразовую ссылку на редактор Литеры в новом окне (заблокировав при этом текстовое поле с документом, чтобы пользователь случайно не отредактировал текст и в редакторе Литеры и в редакторе сайта), открыть одноразовую ссылку на редактор Литеры в этом же окне, но не перегружая страницу, а создав при помощи JavaScript объект iframe, который перекроет собой текстовый редактор Сайта.

С этим вариантом вроде всё просто. Страница сайта замещается редактором Литеры когда надо проверить текст и возвращается обратно, когда работа в редакторе Литеры завершена.

Этот вариант отличается от предыдущего тем, что в нём редактор Литеры открывается в новом окне/вкладке браузера и соответственно возникает две задачи:
- первая - как-то предотвратить возможность редактирования текста на сайте партнёра в то же время, как пользователь может отредактировать этот же текст в редакторе Литеры
- вторая - закрыть окно с редактором Литеры и передать управление в главное окно сайта, откуда отскочили поисправлять ошибочки в редактор Литеры
По первой задаче сложно чего-либо советовать, она зависит от скорее эстетических пожеланий, чем технических.
А вторую рассмотрим поподробнее. Мы предлагаем решать её на основе технологии современных браузеров Broadcast Channel API, если она удовлетворяет вашим требованиям к версии браузера. Если же нет, то можно посмотреть в сторону более поддерживаемой технологии Storage ну и самый "старинный вариант" - передать сообщение через собственный сервер, тогда на странице return-to-cms вообще ничего делать не придётся.
Итак, вот пример решения этой задачи при помощи Broadcast Channel API.
На страницу с текстом и кнопкой "Проверить", после её нажатия, перед тем, как передавать управление редактору Литеры необходимо добавить такой JavaScript код:
// открываем новое окно с редактором Литеры
var litera = window.open(url);
// подключаемся к каналу сообщений LiteraEditor
var bc = new BroadcastChannel('LiteraEditor');
bc.onmessage = function(event) {
if (event.data === 'CLOSE_LITERA') {
// закрываем окно с редактором Литеры
litera.close();
// делаем свои дела по обновлению содержимого страницы
onLiteraClosed();
}
}На страницу return-to-cms надо добавить такой JavaScript код:
// подключаемся к каналу сообщений LiteraEditor
var bc = new BroadcastChannel('LiteraEditor');
// передаём в канал сообщение о том, что редактор Литеры пора закрывать
bc.postMessage('CLOSE_LITERA');
В целом этот вариант очень похож на предыдущий с той лишь разницей, что вместо нового окна браузера на текущей странице создаётся объект iframe с редактором Литеры внутри. То есть отличие лишь в способе создания объекта с редактором Литеры и способе его устранения. Однако так как мы находимся в рамках одного окна браузера, у нас появляется дополнительный способ передачи управления из iframe основному содержимому окна, а именно - обновление содержимого окна.
Для этого в тело страницы return-to-cms надо добавить следующий JavaScript:
window.top.location.href = 'новый URL страницы с обновлённым текстом';Здесь все те же соображения, что и в случае с новым окном, но с небольшими изменениями в способе обращения с контейнером для редактора Литеры:
На страницу с текстом и кнопкой "Проверить", после её нажатия, перед тем, как передавать управление редактору Литеры необходимо добавить такой JavaScript код:
// создаём iframe с редактором Литеры
var litera = document.createElement('iframe')
litera.setAttribute('src', url);
document.body.append(litera);
// подключаемся к каналу сообщений LiteraEditor
var bc = new BroadcastChannel('LiteraEditor');
bc.onmessage = function(event) {
if (event.data === 'CLOSE_LITERA') {
// закрываем окно с редактором Литеры
litera.remove();
// делаем свои дела по обновлению содержимого страницы
onLiteraClosed();
}
}Тут и вовсе ничего не изменилось, на страницу return-to-cms надо добавить такой JavaScript код:
// подключаемся к каналу сообщений LiteraEditor
var bc = new BroadcastChannel('LiteraEditor');
// передаём в канал сообщение о том, что редактор Литеры пора закрывать
bc.postMessage('CLOSE_LITERA');Варианты использования
Справочник