Хочу разработать одну очень специфичную CMS и нужно обеспечить легкую возможность редактирования контента и его представления пользователями. Видел реализацию такой функции 1С-Битрикс. Называется режим правки, он включается и любой текст сайта становится доступным для редактирования.
Объясните, пожалуйста, как это работает? Как потом изменения сохраняются?
В качестве основы можно использовать jqueryui.com/sortable/#portlets, вариант битрикса мне не особо нравиться, - я делал редактор только в админке и редактируемые страницы выводил через iframe. При сохранении виджеты\блоки заменяются на псевдокод аля {widget name="news" id="2" items="5" class="widget-news"}
Антон, спасибо за наводку на решение с jqueryui , однако я не трудился в реализацию редактирования страниц.... Если я правильно понял - вы редактируете блоки в отдельном редакторе, а не прямо в «боевом» представлении как в битриксе?
Sonnabend: Да, редактор блоков для страниц и тем\слоев на базе tinymce (от редактора там только оболочка осталась). Мне кажется редактирование в клиентской части добавляет лишнюю нагрузку\функционал, редактирование в админке как-то логичнее..
Sonnabend: Чтобы было понятнее: вначале мы создаем блоки\виджеты во встроенном редакторе кода (ACE), а потом уже размещает\перемещаем эти блоки в редакторе тем\страниц.
Sonnabend: В файлах, php виджет (Контроллер) генерит html блок, на основе переданных параметров и шаблона (Вид) т.е. мы можем сгенерировать несколько несколько разных блоков на основе одного виджета. В шаблоне блок храниться в виде записей: {widget name="news" template="news/short_list" items="5" class="widget-news"} {widget name="news" template="news/long_list" items="10" class="widget-news"}, где name - имя виджета (class Controller\Widget\News), template - php шаблон, а остальное - доп. параметры. При сохранении шаблона псевдокод заменяется на php код (<?=(new Controller\Widget\News(['name' => "news", 'template' => "news/short_list", 'items' => "5", 'class' => 'widget-news']))?>) и генерируется "кеш" файл шаблона, шаблон хранится с псевдокодом сохраняется отдельно и используется только при редактировании шаблона. По сути аналичную схему использует большинство шаблонизаторов (Smarty, Twig), я не стал их использовать т.к. меня вполне устраивают шаблоны на нативном php (используются для отображения виджетов).
Плохо реализован.
А чего вы ожидали от визивиг редактора? Они нужны чтобы показывать на презентациях и убеждать пользователя, что ему не надо ничего учить, чтобы начать пользоваться продуктом, а не для реального использования.
Это правило для всех таких систем. Не используйте их - они для этого не предназначены.