2011-12-14 5 views
2

Я использую CKEditor с KCFinder. Все работает отлично, кроме одного.Как изменить каталог поиска по умолчанию для изображений в KCFinder?

Мой URL загрузки по умолчанию:

'uploadURL' => "/userfiles" 

Скажем, я хочу, чтобы загрузить изображение. Я нажимаю «Загрузить изображение» в CKEditor, затем нажимаю «Обзор сервера», чтобы выбрать один уже загруженный. Проблема в том, что CKEditor просматривает /userfiles/images вместо /userfiles, как хотелось бы.

Я понимаю, что это не ошибка, а способ, которым он был настроен, но как его изменить?

я не нашел ничего на http://kcfinder.sunhater.com

+0

http://www.xms-systems.co.uk/articles_read.php?a_id=77 – Stefan

ответ

1

Я была такая же проблема, пока я не попытался следующие с параметрами сеанса (динамические настройки; http://kcfinder.sunhater.com/docs/install#dynamic):

 
$_SESSION['KCFINDER']['uploadURL'] = '/some_directory/some_subdir'; 
$_SESSION['KCFINDER']['uploadDir'] = '../some_directory/some_subdir'; 

«uploadURL» должны относиться на путь «html», т. е. абсолютный путь от вашего корня сервера, который распознает ваши html-теги. В качестве примера, если файлы находятся в директории с именем «изображения» в корневом каталоге вашего веб-сервера, вы будете иметь:

 
$_SESSION['KCFINDER']['uploadURL'] = '/images'; 

«UploadDir» должен ссылаться на относительный путь в каталог, содержащий файлы, к которым вы хотите получить доступ, ИЛИ абсолютный путь от вашего корня DISK (пример:/var/www/html/.....). Я думаю, что лучше использовать относительный путь от местоположения вашего пути установки KCFinder, так как таким образом он будет переносимым. Продолжая тот же самый пример, как описан выше, и учитывая, что KCFinder установлен в/web_apps/kcfinder, то вы будете иметь это:

 
$_SESSION['KCFINDER']['uploadDir'] = '../../images'; 

Надеется, что это помогает!

+1

Спасибо за ответ Sudhir! Я пробовал то, что вы рекомендовали, и он по-прежнему добавляет изображения в папку. $ _SESSION ['KCFINDER'] ['uploadURL'] = '/ userfiles'; $ _SESSION ['KCFINDER'] ['uploadDir'] = '../../../userfiles'; KCFinder находится на сайте site.com/admin/ckeditor/kcfinder/ Если я поставил $ _SESSION ['KCFINDER'] ['uploadDir'] = '/ userfiles'; это дает мне ошибку «не могу писать для загрузки папки./userfiles» – Cris

+1

У меня такая же проблема ... –

+0

У меня возникла проблема: https://github.com/sunhater/kcfinder/issues/144 – maartenmachiels

2

Я нашел еще лучшее обходное решение.

Волшебство происходит, когда в файле config.php, вы определяете:

'types' => array(
     // CKEditor & FCKEditor types 
     'files' => "disabled", 
     'flash' => "disabled", 
     'images' => "*img", 

     // TinyMCE types 
     'file' => "disabled", 
     'media' => "disabled", 
     'image' => "*img", 
    ), 

Это говорит о том, что KCfinder будет создавать «картинку» изображения каталога и магазина. У меня отключен каталог «файлов», так как я не разрешаю своим пользователям загружать файлы.

Что вы делаете, если вы хотите, чтобы они были в корневом каталоге, добавьте запись '(blank) и назначьте то, что они могут загрузить. На моем сервере у меня есть:

'types' => array(
     '' => "*img", 
     // CKEditor & FCKEditor types 
     'files' => "disabled", 
     'flash' => "disabled" 
    ), 

Что позволяет загружать файлы изображений непосредственно в корневую папку.

+0

На самом деле вы можете просто оставить один тип, и он работает одинаково (или, по крайней мере, он работает при интеграции с Drupal). Таким образом, конфигурация типов может быть просто: '' types '=> array (' '=> "* img"), '. – Nux

0

Собственные папки для файлов типов в CKEditor/FCKeditor: Если вы хотите использовать свои собственные папки для изображений, файлов только конфиг в CKEditor/Fckeditor конфигурации.JS

это линия:

//KCFINDER 
CKEDITOR.editorConfig = function(config) { 
    config.filebrowserBrowseUrl = '/kcfinder-2.51/browse.php?type=file'; 
    config.filebrowserImageBrowseUrl = '/kcfinder-2.51/browse.php?type=image'; 
    config.filebrowserFlashBrowseUrl = '/kcfinder-2.51/browse.php?type=flash'; 
    config.filebrowserUploadUrl = '/kcfinder-2.51/upload.php?type=file'; 
    config.filebrowserImageUploadUrl = '/kcfinder-2.51/upload.php?type=image'; 
    config.filebrowserFlashUploadUrl = '/kcfinder-2.51/upload.php?type=flash'; 
}; 

Для примера, если вы хотите использовать для вас изображений в папку "ImagesMyOwnFolder" ==> Изменение строка config.filebrowserImageBrowseUrl = /kcfinder-2.51/browse.php? тип = ImagesMyOwnFolder ';

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

+2

Это определенно не работает для меня. Если вы измените «type = image» ImageBrowseUrl на что-нибудь еще, например ImagesMyOwnFolder, оно игнорирует его и вместо этого по умолчанию использует каталог с именем «файл». – Stefan

+0

Вы не имеете в виду 'type =' Я думаю, что это 'dir =', и это также не решило проблему –

0

Это можно сделать разными способами. Я объясняю процесс, который я применял в соответствии со структурой кода моего php-приложения. Такая же структура кода/структура, которую я придерживался для разных приложений, с каждым приложением в качестве подпапки на моем сервере. Таким образом, существует логическая необходимость использовать один CKeditor с KCfinder и каким-то образом настроить его, чтобы он работал правильно для всех приложений. Контентная часть CKeditor в порядке. Его можно легко повторно использовать разными приложениями или проектами из одного компонента CKeditor. Но проблема возникает при загрузке файлов, таких как изображение, видео или любой другой документ. Чтобы сделать его применимым для разных проектов, файлы должны быть загружены в разделяемые папки для разных проектов. И для этого $ _CONFIG ['uploadURL'] должен быть настроен с использованием динамического пути к папке, означает другой путь к папке для каждого проекта, но вызывает тот же компонент CKeditor KCfinder в том же месте. Я поэтапно объясняю некоторые разные процессы вместе. Они отлично работали с KCfinder версии 2.51, и я надеюсь, что они будут работать и для других. Если это не сработает для других разработчиков, возможно, им необходимо внести некоторые изменения в этот процесс в соответствии с их структурой кода проекта и разрешением на запись в папку, а также версией CKeditor и KCfinder.

1) В CKEditor \ filemanagers \ kcfinder_2_51 \ config.php файл

а) в $ _config определении массива, поиск по этой линии 'отключено' => ложно, и если вы нашли какой-либо заменить его «отключено '=> true, В конце этого файла введите следующий код. Код сам объясняет логикой и деталями, прокомментированными внутри нее. Код:

//Code to assign $_CONFIG['uploadURL'] dynamic value: different for different projects or sites: added by Mrinal Nandi on 5 oct, 2013: start 
//session dependent dynamic $_CONFIG['uploadURL'] setting :start 

////session dependent secure method: only for single site setting: i.e. one CKeditor KCfinder for each one project domain or subdomain, not one CKeditor KCfinder for multiple project:start  
// session_start(); 
//if(isset($_SESSION['KCFINDER']['uploadURL']) && $_SESSION['KCFINDER']['uploadURL']!="") { //$_SESSION['SESSION_SERVER_RELATIVEPATH']: relative folder path of the project corresponding to the webroot; should be like "/project/folder/path/" //set this session variable in a common file in your project where the session started 
// $file_upload_relative_path=$_SESSION['KCFINDER']['uploadURL']; 
//} 
////session dependent secure method: only for single site setting: i.e. one CKeditor KCfinder for each one project domain or subdomain, not one CKeditor KCfinder for multiple project:start 


//Using a single CKeditor KCfinder component for different projects or sites (multisite): start 

//session dependent settings a single CKeditor KCfinder component for different projects or sites (multisite): start 
//Assuming different session_name for different projects, if represented as different sub-folders, but not work if represented as sub-domains or different domains 
//Secure and deny access for unauthorized users without any session, thus restrict access via direct link 
//but not work if projects represented as sub-domains or different domains, then have to use the session independent way provided bellow (though it is insecure), or have to implement some session related way as per the project flow and structure 

session_name(base64_decode($_REQUEST['param_project'])); 
session_start();  

if(isset($_SESSION['KCFINDER']['uploadURL']) && $_SESSION['KCFINDER']['uploadURL']!="") { //$_SESSION['SESSION_SERVER_RELATIVEPATH']: relative folder path of the project corresponding to the webroot; should be like "/project/folder/path/" //set this session variable in a common file in your project where the session started 
    $file_upload_relative_path=$_SESSION['KCFINDER']['uploadURL']; 

} 
//session dependent settings a single CKeditor KCfinder component for different projects or sites (multisite): end 



//session dependent dynamic $_CONFIG['uploadURL'] setting :end 

////session independent dynamic $_CONFIG['uploadURL'] setting: without using session :start 
//if(isset($_REQUEST['param_project']) && $_REQUEST['param_project']!=""){ //base64 encoded relative folder path for file upload in the project, corresponding to the webroot; should be like "/project/folder/file/upload/path/" before encoding 
// $file_upload_relative_path=base64_decode($_REQUEST['param_project']); 
// 
//} 
////session independent dynamic $_CONFIG['uploadURL'] setting: without using session :end 


if(isset($file_upload_relative_path) && trim($file_upload_relative_path)!=""){ 
    if(isset($_SESSION['KCFINDER']['uploadURL'])){ 
     $_CONFIG['disabled']=false; 
    } else if(is_dir($file_upload_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['disabled']=false; 
    } 
} 
// Path to user files relative to the document root. 
$_CONFIG['uploadURL']= $file_upload_relative_path; 
$_CONFIG['param_project'] = $_REQUEST['param_project']; 
//Using a single CKeditor KCfinder component for different projects or sites (multisite): end 

//Code to assign $_CONFIG['uploadURL'] dynamic value: different for different projects or sites: added by Mrinal Nandi on 5 oct, 2013: end 

2) В CKEditor \ filemanagers \ kcfinder_2_51 \ JS \ браузер \ misc.js

Поиск по этой линии: '? Browse.php тип =' Данные вар = + encodeURIComponent (this.type) + '& lng =' + this.lang;

Заменить его с этой линии:

var data = 'browse.php?type=' + encodeURIComponent(this.type) + '&lng=' + this.lang + '&param_project=' + this.param_project; 

3) В CKEditor \ filemanagers \ kcfinder_2_51 \ TPL \ tpl_javascript.php

Поиск по этой линии: browser.type = "тип)>" ;

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

browser.param_project = "<?php echo text::jsValue($this->config['param_project']) ?>"; 

4) В CKEditor \ filemanagers \ kcfinder_2_51 \ ядро ​​\ загрузчиком.PHP Поиск этой линии в __construct() функция:

if (isset($this->config['_check4htaccess']) && 
    $this->config['_check4htaccess'] 
) { 
    $htaccess = "{$this->config['uploadDir']}/.htaccess"; 
    if (!file_exists($htaccess)) { 
     if ([email protected]_put_contents($htaccess, $this->get_htaccess())) 
      $this->backMsg("Cannot write to upload folder. {$this->config['uploadDir']}"); 
    } else { 
     if (false === ($data = @file_get_contents($htaccess))) 
      $this->backMsg("Cannot read .htaccess"); 
     if (($data != $this->get_htaccess()) && [email protected]_put_contents($htaccess, $data)) 
      $this->backMsg("Incorrect .htaccess file. Cannot rewrite it!"); 
    } 
} 

И комментарии, что полный раздел

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

include_once(Absolute/Folder/path/for/CKeditor/."ckeditor/ckeditor.php") ; 

//If you did not want a session oriented way, cooment out the session related lines 
$_SESSION['KCFINDER'] = array();          
$_SESSION['KCFINDER']['uploadURL']=$SERVER_RELATIVEPATH."userfiles/"; 

$CKEditor = new CKEditor(); 
$CKEditor->basePath = HTTP_COMPONENTPATH."ckeditor_3.6.2/ckeditor/"; 

//$_SESSION['KCFINDER']['uploadURL']="/userfiles/fashion_qr/"; 

$CKEditor->config["filebrowserBrowseUrl"] = ($CKEditor->basePath)."filemanagers/kcfinder_2_51/browse.php?type=files&param_project=".base64_encode(session_name()); 
$CKEditor->config["filebrowserImageBrowseUrl"] = ($CKEditor->basePath)."filemanagers/kcfinder_2_51/browse.php?type=images&param_project=".base64_encode(session_name()); 
$CKEditor->config["filebrowserFlashBrowseUrl"] = ($CKEditor->basePath)."filemanagers/kcfinder_2_51/browse.php?type=flash&param_project=".base64_encode(session_name()); 

$CKEditor->editor("Content", getIfSet($data['Content'])); 
//if you did not want a session oriented way, then in the above code code segment, just replace all the texts: base64_encode(session_name()) with this one: base64_encode(session_name($SERVER_RELATIVEPATH."userfiles/")) 

И вы сделали.

0

Это мое решение. CKEditor конфигурации:

<?php $filesFolder = "topic123"; ?> 
CKEDITOR.replace('contentEditor', { 
    filebrowserBrowseUrl: '/public/plugins/ckfinder/ckfinder.html?type=<?=$filesFolder?>' 
}); 

я указал только один параметр filebrowserBrowseUrl и прошел типа. Теперь, когда вы открываете что-либо, url, изображения или диалоги вспышки, он будет показывать только один каталог.

Затем в CKFinders файле config.php:

$config['backends'][] = array(
    'name'   => 'topic_files', 
    'adapter'  => 'local', 
    'baseUrl'  => '/data/topics/', 
    //'root'   => '', // Can be used to explicitly set the CKFinder user files directory. 
    'chmodFiles' => 0777, 
    'chmodFolders' => 0755, 
    'filesystemEncoding' => 'UTF-8', 
); 

if (!empty($_GET['type'])) { 
    //Folder for topics 
    if (preg_match("/^topic\d+$/", $_GET['type'])) { 
     $config['resourceTypes'][] = [ 
      'name'    => $_GET['type'], 
      'directory'   => $_GET['type'], 
      'maxSize'   => 0, 
      'allowedExtensions' => $allowedExtensions, 
      'deniedExtensions' => '', 
      'backend'   => 'topic_files' 
     ]; 
    } 
} 

Если папка (topic123) не существует, он будет создан, когда вы загружаете файл.

Смежные вопросы