Как мне изменить путь загрузки изображения * динамически * в 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 += '¶m_project_to_fck=' + param_project_to_fck ;
(b) Теперь откройте файл ckeditor\editor\filemanager\browser\default\frmupload.html.
Найдите эту строку (она должна быть в функции SetCurrentFolder()):
sUrl += '&CurrentFolder=' + encodeURIComponent( folderPath ) ;
Поместите эту команду после этой строки:
sUrl += '¶m_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¶m_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¶m_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¶m_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.