Как изменить каталог просмотра по умолчанию для изображений в KCFinder? - PullRequest
2 голосов
/ 14 декабря 2011

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

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

'uploadURL' => "/userfiles"

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

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

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

Ответы [ 5 ]

2 голосов
/ 05 октября 2012

Я нашел еще лучший обходной путь.

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

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

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

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

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

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

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

1 голос
/ 14 декабря 2011

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

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

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

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

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

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

Надеюсь, это поможет!

0 голосов
/ 02 ноября 2017

Вот мое решение.Конфигурация CKEditor:

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

Я указал только один параметр filebrowserBrowseUrl и передал тип .Теперь, когда вы открываете любые диалоги, URL, изображения или флэш, он показывает только один каталог.

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

$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) нене существует, он будет создан при загрузке файла.

0 голосов
/ 07 октября 2013

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

1) ВCKeditor \ filemanagers \ kcfinder_2_51 \ config.php file

a) В определении массива $ _CONFIG найдите эту строку «disabled» => false, и, если вы обнаружите что-либо, замените ее на «disabled» => 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 \ browser \ misc.js

Поиск по этой строке: var data = 'browse.php? Type ='+ 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 = "type)?>";

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

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

4) Вckeditor \ filemanagers \ kcfinder_2_51 \ core \ uploader.php Найдите эти строки в функции __construct ():

if (isset($this->config['_check4htaccess']) &&
    $this->config['_check4htaccess']
) {
    $htaccess = "{$this->config['uploadDir']}/.htaccess";
    if (!file_exists($htaccess)) {
        if (!@file_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()) && !@file_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 голосов
/ 20 апреля 2013

Собственные папки для типов файлов в CKEDITOR / FCKEDITOR: Если вы хотите использовать свои СОБСТВЕННЫЕ ПАПКИ для изображений, просто настройте файлы в CKEDITOR / FCKEDITOR config.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?type=ImagesMyOwnFolder';

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...