В процессе переноса своих статей с хабра или сайтов на 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","rn",$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 — запускать при открытии и сохранении документа.
Автор: vvzvlad