html код в . Редактор кода сайта в textarea.

html код в textarea. Редактор кода сайта в textarea.

redactorПри очередном написании кода, а точнее простенького движка, решил реализовать редактор самих страниц сайта и в том числе админки. Многие на форумах пишут — «Зачем это надо, редактируй в блокноте». А я вот хочу как в вордпрессе, но чтобы для редактирования была доступна даже сама страница редактирования.

СТАТЬЯ МОЖЕТ НЕ ВСЕМ БУДЕТ ПОНЯТНА. СНАЧАЛА ВЫЛОЖУ ВЕСЬ ИСХОДНИК ТОГО, ЧТО УСПЕЛ СДЕЛАТЬ. Яндекс диск ссылка   В ПАПКЕ WWW ВЕСЬ ИСХОДНИК С TPL ФАЙЛАМИ

Сам редактор находится в админке, в файле admin.php . Установите Denwer запустите админку для наглядности.

Написать сам редактор было не так сложно. Написал функцию вывода файлов из корня сайта и всех папок, рекурсивным методом. И добавил функцию вывода содержимого файла в textarea, с помощью file_get_contents() и вроде все работало.  Сохранение содержимого через file_put_contents() с последующим обноврением страницы редактора, НО.

 

Косяк был в том, что если я загружаю для редактирования файл сайта, в котором используется этот самый textarea, в котором и происходит редактирование файлов. в редактор загружалась только часть кода, до закрывающего тега textarea. Остальная часть редактируемого файла вливалась в код страницы редактора.

Подробнее в картинках ниже:

1. То как реализован редактор. Выводим в textarea содержимое файла с помощью функции.

реализован редактор

2. То что содержит функция вывода после того, как прочитала файл редактора.
код файла который редактируем

3. То что видно в исходном коде редактора, когда загружен файл для редактирования его кода.

то что выводится в исходном коде редактора страниц сайта

 

4.  Кусок кода, который отображается в самом редакторе, в textarea.

 

то что выводится в редакторе

 

 

 

Из скринов видно, что часть кода прочитана браузером именно до строки закрытия злосчастного textarea. Итог, очевиден,  редактор отображается с косяком, и если сохранить то что оказалось в редакторе, редактор перестанет работать, так как там будет только часть нужного кода.

Решение проблемы реализовал обычной заменой конечного тега textarea на сложное выражение вида, к примеру: \.*-+*-*06textarea-*/+*-+*/+\. Функцией str_replace().

То есть, когда загружаем файл для обработки и правки кода, читаем его в переменную, проходим функцией str_replace(), заменяем нужное на странное выражение. В итоге редактор выдаст:

итог

 

А при сохранении отредактированного кода в рабочий файл, делаем обратную процедуру. И файл, который будет отображаться на вашем сайте будет с нормальным конечным  тегом textarea. Метод не лучший но, на худой конец и то решение.