Совместимость с хабраредактором для MODx Evo

от автора

В процессе переноса своих статей с хабра или сайтов на LiveStreet я стаолкнулся с проблемой верстки.
Редактор хабра воспринимает переносы в исходном тексте именно как переносы, т.е. в HTML они будут выглядеть как

<br> 

А все доступные редакторы для modx в режиме редактирования не воспринимают ссылки и картинки, и текст будет выглядеть как в редакторе:

Под катом вы найдете: макро-фотографии экрана, разборка, тест аккумулятора, камеры, опыт использования. <a href="https://picasaweb.google.com/lh/photo/DWXbDrGSQrrqY2TJM_UhydMTjNZETYmyPJy0liipFm0?feat=embedwebsite"><img src="https://lh6.googleusercontent.com/-vrs2uZgIzqQ/UJPFgBkWr-I/AAAAAAAAKxg/FS0DcyCkW0w/s640/Samsung%2520Note%2520II-001.jpg" height="107" width="640" /></a> <habrаcut text="У вас точно есть полчаса на чтение?" />  <ul> 	<li><a href="#pack">Упаковка и комплектация</a></li> 	<li><a href="#view">Качество сборки и внешний вид</a></li> 	<li><a href="#screen">Экран</a></li> 	<li><a href="#inside">Внутренности, моды и ремонтопригодность</a></li> 


А если вставить текст в режиме редактирования — то он превратится в текст без переносов:

Сначала я хотел сделать из них часы, идущие в обратную сторону, но ошибся в задержках и получил звук "Зз-Зз-Зз-ЗЗЗЗЗ", который показался мне интересным.Дальше были выходные и неспешное ковыряние в коде, который претерпел несколько изменений, был потерян и переписан для MSP430 и Wiring вместо BASCOM(потому что мне было ленивее набирать программу второй раз, нежели написать ее на другом языке), и в итоге принял такой вид:ОСТОРОЖНО! Быдлокод!<source lang="cpp"> #include <Servo.h> //Подключаем бибилотекуServo myservo1;//Определяем именаServo myservo2;    int x = 0; //Разные еременные    int y = 0;    int z = 0;    int w = 0;    int g = 0;        int h = 0;    int q = 0;     

Что тоже неудобно. Нет, можно было конечно настроить замену в любом текстовом редакторе — /n на br, но проблема в том, что тогда мы получим две разные версии текста, что обернется проблемами с редактированием. Пришлось сделать заказать фрилансеру велосипед.

Плагин для автоматической замены /n на br при сохранении текста и обратной замены при его редактировании:

global $content; $e = &$modx->Event; switch ($e->name) { case "OnDocFormPrerender": $content["content"]=trim(preg_replace("/\<br\>/i","\r\n",$content["content"])); //Замена при открытии на текстовые переносы  break; case "OnBeforeDocFormSave": $content=preg_replace("/(\\\\r\\\\n)/","<br>",$content); //Замена при сохранении $content=preg_replace("/(\\\\n)/","<br>",$content); $content=preg_replace("/(\\\\r)/","<br>",$content); //Совместимость для разных систем $content=preg_replace("/\<\/li\>\s*(\<br\>)+\s*\<li/i","</li>\\\\r\\\\n<li",$content); $content=preg_replace("/\<ul\>\s*(\<br\>)+\s*\<li/i","<ul>\\\\r\\\\n<li",$content); $content=preg_replace("/\<\/li\>\s*(\<br\>)+\s*\<\/ul/i","</li>\\\\r\\\\n</ul",$content); $content=preg_replace("/\s*(\<br\>)+\s*\<ul/i","\\\\r\\\\n<ul",$content); $content=preg_replace("/\<\/ul\>\s*(\<br\>)+\s*/i","</ul>\\\\r\\\\n",$content);//Устранение двойного переноса в нумерованных списках  break; default : return;   break; } 

Установка обычна — Управление элементами — плагины — создать плагин.
Копируем код в поле, потом переходим на вкладку системные события и отмечаем OnBeforeDocFormSave и OnDocFormPrerender — запускать при открытии и сохранении документа.

ссылка на оригинал статьи http://habrahabr.ru/post/157187/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *