При очередном написании кода, а точнее простенького движка, решил реализовать редактор самих страниц сайта и в том числе админки. Многие на форумах пишут — «Зачем это надо, редактируй в блокноте». А я вот хочу как в вордпрессе, но чтобы для редактирования была доступна даже сама страница редактирования.
СТАТЬЯ МОЖЕТ НЕ ВСЕМ БУДЕТ ПОНЯТНА. СНАЧАЛА ВЫЛОЖУ ВЕСЬ ИСХОДНИК ТОГО, ЧТО УСПЕЛ СДЕЛАТЬ. Яндекс диск ссылка В ПАПКЕ 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. Метод не лучший но, на худой конец и то решение.