пятница, 7 ноября 2008 г.

Вынести FCKEditor выше DOCUMENT_ROOT

Для того чтобы вынести FCKEditor выше рута, пришлось немного попотеть, потому хочу облегчить задачу тем кто захочет сделать подобное. Идея вынести редактор возникла по простой причине, допустим, нас есть CMS, на которой настроена туча сайтов. Возникла мысль все общее для всех сайтов вынести наружу, и оформить в отдельном хранилище в форме ядра.

Польза вынесения редактора: вышла новая версия редактора, а старая нас не совсем устраивает (например вылезает баг), а у нас уже есть десяток сайтов на одной основе. В таком случае придется настраивать редактор 10 раз в каждом сайте - согласитесь, трудоемкая задача.

При настройке редактора(FCKEditor), нужно обязательно задать $this->BasePath в файле fckeditor_php5.php. Это путь относоительно которого должен работать редактор, он ОБЯЗАТЕЛЬНО должен быть относительно DOCUMENT_ROOT.

Как же обойти проблему??Самое оптимальное решение было найдено, привожу его вам:

В корне проекта создадим условие фильтра через modrewrite в.httaccess + проксирующий скрипт, который будет обрабатывать все пути доступа к FCKEditor и перенаправлять их куда надо. Причем конфигурационный путь будет вида: $this->BasePath = "http://".$_SERVER[SERVER_NAME].'/tools/fckeditor/' ;
Тоесть, мы не нарушаем идеологию настройки путей редактора.

Пример (работающий) проксирующего скрипта:

--------proxy.php:

";
if(isset($file)){
$file = ROOT."/tools/fckeditor/".$file;
$type = substr($file,strlen($file)-3,3);

if( $type=="php"){
include $file;
}else{
...

}

}

?>

Для того чтобы прокси-скрипт работал, необходимо чтобы все url которые идут к редактору, приходили на прокси посредством Get метода. Для этого в корне сайта положим в файлик httacces следующию дерективу для ModRewrite, который будет вырезать путь после tools/fckeditor/ и передавать в прокси-скрипт.

-----.httacces:

RewriteRule ^tools/fckeditor/(.*)$ /proxy.php?file=$1 [L]


В самом редакторе достаточно поставить "правильный" путь к нему, относительно рута.

---------fckeditor_php5.php

public function CreateFCKeditor($instanceName, $width, $height)
{
$this->InstanceName = $instanceName ;
$this->BasePath = "http://".$_SERVER[SERVER_NAME].'/tools/fckeditor/' ; <-- тут $this->Width = $width ;
$this->Height = $height ;
return $this->CreateHtml() ;
}

Комментариев нет:

Отправить комментарий