Как мне изменить путь загрузки изображения * динамически * в FCKeditor

Я использую двоичный файл ASP.NET для своего FCKeditor, и мне нужно вставить два редактора на одной странице. Загруженные изображения / просматриваемые файлы должны быть в двух разных каталогах, как мне сделать это из-за кода?

Я знаю, что путь для загруженных файлов задается в config.ascx-файл с UserFilesPath настройки, но я не могу найти способ переопределить это значение из моего aspx.cs файл.

Кроме того, я нашел (противоречивую) документацию о том, что Session["FCKeditor:UserFilesPath"] может быть установлен, но я не люблю помещать информацию, относящуюся к пользовательскому контролю, в глобальную переменную сеанса.

5 ответов

Решение

Сначала вам нужно назначить информацию об идентификаторе пользователя в сеансе ["UserInfo"]

затем перейдите в [корневую папку fckeditor]/filemanager/connector/aspx/config.ascx

string Userfolder = Session["UserInfo"].ToString(); // URL path to user files. UserFilesPath = "~/Upload/" + Userfolder;

Full Subject: FCK editor 2.x: загрузка файлов / изображений / видео в разные папки для разных приложений с использованием одного FCKeditor, делая $Config['UserFilesPath'] полностью динамическим и безопасным способом

Это можно сделать разными способами. Я объясняю процесс, который я применил согласно структуре кода моих приложений php. Та же самая структура кода / структура, которую я использовал для разных приложений, с каждым приложением в качестве подпапки на моем сервере. Таким образом, существует логическая необходимость использовать один единственный FCKeditor и настроить его каким-либо образом, чтобы он работал правильно для всех приложений. Содержательная часть FCKeditor в порядке. Он может быть легко использован различными приложениями или проектами из одного компонента FCKeditor. Но проблема возникает с загрузкой файлов, таких как изображения, видео или любой другой документ. Чтобы сделать его применимым к другому проекту, файлы должны быть загружены в отдельные папки для разных проектов. И для этого $Config['UserFilesPath'] должен быть настроен с использованием динамического пути к папке, что означает разные пути к папке для каждого проекта, но вызов одного и того же компонента FCKeditor в том же месте. Я объясняю некоторые разные процессы вместе пошаговым способом. У меня они отлично работали с FCKeditor версии 2.5.1 и VersionBuild 17566, и я надеюсь, что они будут работать и для других. Если это не работает для других разработчиков, возможно, им придется внести некоторые изменения в этот процесс в соответствии со структурой кода проекта и разрешением на запись в папку, а также в соответствии с версией FCKeditor.

1) В файле fckeditor\editor\filemanager\connectors\phpconfig.php

а) Перейти к глобальной $Config; и $Config['Enabled'] = false; i) Там, если хотите, безопасный метод, зависящий от сеанса: только для настройки одного сайта: то есть один FCKeditor для каждого одного домена или субдомена проекта, а не один FCKeditor для нескольких проектов, затем поместите этот код:

if(!isset($_SESSION)){
session_start(); 
}

if(isset($_SESSION['SESSION_SERVER_RELATIVEPATH']) && $_SESSION['SESSION_SERVER_RELATIVEPATH']!="") { 
$relative_path=$_SESSION['SESSION_SERVER_RELATIVEPATH']; 
include_once($_SERVER['DOCUMENT_ROOT'].$relative_path."configurations/configuration.php");
}

NB. Здесь $_SESSION['SESSION_SERVER_RELATIVEPATH']: относительный путь к папке проекта, соответствующий webroot; должно быть похоже на "/project/folder/path/" и установить эту переменную сеанса в общем файле в вашем проекте, где сеанс начался. И в вашем файле конфигурации должен быть файл configurations/configuration.php. Если это имя или путь отличается, вы должны указать здесь соответствующий путь, а не configurations/configuration.php

ii) Если вы хотите использовать один компонент FCKeditor для разных проектов, представленных в виде разных подпапок и с безопасным способом, зависящим от сеанса (при условии, что для разных проектов различается session_name, чтобы дифференцировать их сеансы на одном сервере). Но это не сработает, если проекты представлены в виде поддоменов или разных доменов, тогда придется использовать независимый от сеанса способ (iii), указанный ниже (хотя это небезопасно). Поместите этот код:

if(!isset($_SESSION)){
session_name($_REQUEST['param_project_to_fck']); 
session_start(); 
}

if(isset($_SESSION['SESSION_SERVER_RELATIVEPATH']) && $_SESSION['SESSION_SERVER_RELATIVEPATH']!="") { 
$relative_path=$_SESSION['SESSION_SERVER_RELATIVEPATH']; 
include_once($_SERVER['DOCUMENT_ROOT'].$relative_path."configurations/configuration.php");
}

Пожалуйста, прочитайте NB в конце предыдущего пункта, т.е. пункт (i)

iii) Если вы хотите использовать один компонент FCKeditor для разных проектов, представленных как разные подпапки, а также субдомены или домены (хотя это не является полностью безопасным). Поместите этот код:

if(isset($_REQUEST['param_project_to_fck']) && $_REQUEST['param_project_to_fck']!=""){ //base64 encoded relative folder path of the project corresponding to the webroot; should be like "/project/folder/path/" before encoding 
$relative_path=base64_decode($_REQUEST['param_project_to_fck']);
include_once($_SERVER['DOCUMENT_ROOT'].$relative_path."configurations/configuration.php");
}

Пожалуйста, прочитайте NB в конце пункта (i)

б) Теперь после этого для любого выбранного вами случая, пожалуйста, найдите этот код:

// Path to user files relative to the document root.
$Config['UserFilesPath'] = '/userfiles/' ;

и замените следующий код:

if(isset($SERVER_RELATIVEPATH) &&  $SERVER_RELATIVEPATH==$relative_path) { //to make it relatively secure so that hackers can not create any upload folder automatcally in the server, using a direct link and can not upload files there 
$Config['Enabled'] = true ;
$file_upload_relative_path=$SERVER_RELATIVEPATH;
}else{
$Config['Enabled'] = false ;
exit();
}
// Path to user files relative to the document root.
//$Config['UserFilesPath'] = '/userfiles/' ;
//$Config['UserFilesPath'] = $file_upload_relative_path.'userfiles/' ;
$Config['UserFilesPath'] = '/userfiles'.$file_upload_relative_path;

Здесь $SERVER_RELATIVEPATH - это относительный путь, и он должен быть установлен в файле конфигурации вашего проекта, включенном ранее.

Здесь вы можете установить $Config['UserFilesPath'] с любым другим динамическим путем к папке, используя переменную $ file_upload_relative_path. На моем сервере Bluehost Linux, поскольку у них был конфликт прав доступа к папке между корневой папкой проекта (разрешение 0755) и папкой userfiles под ним и вложенными папками в пользовательских файлах (должно быть 0777 в соответствии с кодировкой FCKeditor), поэтому он не позволяет загружать файлы в эти папки. Итак, я создал папку userfiles в webroot сервера (за пределами корневой папки проекта) и установил для нее разрешение 0777, используйте код для параметра $config следующим образом:

$Config['UserFilesPath'] = '/userfiles'.$file_upload_relative_path; 

Но, если у вас нет проблем с разрешением записи в подпапках проекта в вашем случае, тогда вы можете использовать предыдущую строку (закомментированную в предыдущем сегменте кода):

$Config['UserFilesPath'] = $file_upload_relative_path.'userfiles/' ;

Имейте в виду, вы должны закомментировать существующий $Config['UserFilesPath'] = '/userfiles/'; в этом файле, заменив или просто закомментировав, если он существует в другом месте файла.

2) Если вы выберете 1) (a) (ii) или (iii) метод, откройте
(a) файл fckeditor\editor\filemanager\browser\default\browser.html.

Найдите эту строку: var sConnUrl = GetUrlParam( 'Connector');

Поместите эти команды после этой строки:

var param_project_to_fck = GetUrlParam( 'param_project_to_fck' ) ; 

Теперь найдите эту строку: sUrl += '&CurrentFolder=' + encodeURIComponent( this.CurrentFolder);

Поместите эту команду после этой строки:

sUrl += '&param_project_to_fck=' + param_project_to_fck ; 

(b) Теперь откройте файл ckeditor\editor\filemanager\browser\default\frmupload.html.

Найдите эту строку (она должна быть в функции SetCurrentFolder()):

sUrl += '&CurrentFolder=' + encodeURIComponent( folderPath ) ;

Поместите эту команду после этой строки:

sUrl += '&param_project_to_fck='+window.parent.param_project_to_fck;

3) Теперь, когда вы хотите показать FCKeditor в вашем проекте, вы должны поместить эти строки сначала в соответствующий файл / страницу php:

include_once(Absolute/Folder/path/for/FCKeditor/."fckeditor/fckeditor.php") ; 
$oFCKeditor = new FCKeditor(Field_name_for_editor_content_area) ;
$oFCKeditor->BasePath = http_full_path_for_FCKeditor_location.'fckeditor/' ;
$oFCKeditor->Height = 400;
$oFCKeditor->Width = 600;
$oFCKeditor->Value =Your_desired_content_to_show_in_editor;
$oFCKeditor->Create() ; 

a) Теперь, если вы выберете метод 1) (a) (ii) или (iii), поместите следующий сегмент кода перед этой строкой: $ oFCKeditor-> Create ();

$oFCKeditor->Config["LinkBrowserURL"] = ($oFCKeditor->BasePath)."editor/filemanager/browser/default/browser.html?Connector=../../connectors/php/connector.php&param_project_to_fck=".base64_encode($SERVER_RELATIVEPATH);
$oFCKeditor->Config["ImageBrowserURL"] = ($oFCKeditor->BasePath)."editor/filemanager/browser/default/browser.html?Type=Image&Connector=../../connectors/php/connector.php&param_project_to_fck=".base64_encode($SERVER_RELATIVEPATH);
$oFCKeditor->Config["FlashBrowserURL"] = ($oFCKeditor->BasePath)."editor/filemanager/browser/default/browser.html?Type=Flash&Connector=../../connectors/php/connector.php&param_project_to_fck=".base64_encode($SERVER_RELATIVEPATH);

b) если вы выбрали метод 1) (a) (ii), то в указанном выше фрагменте кода кода просто замените все тексты: base64_encode($SERVER_RELATIVEPATH) на этот: base64_encode(session_name())

И вы сделали.

О, дорогой, после долгой борьбы я могу получить только одно:

fckEditor1.Config

имущество. Попробуйте установить его для редактора, который вы хотите настроить:

fckEditor1.Config ["UserFilesPath"] = "ваш путь"

Это, вероятно, работает. По крайней мере, у меня это сработало.

Session["FCKeditor:UserFilesPath"] = "~/images/";

Извините, я думаю, что вам лучше всего перестать использовать элемент управления и использовать вместо него javascript api.

Другие вопросы по тегам