В продолжение темы. Наверное большинство поставивших отличный WYSIWYG-редактор CKeditor сразу же задалось вопросом: какой же file uploader можно прикрутить для загрузки файлов на сервер?

Ответ дают сами разработчики бесплатного редактора CKeditor — купить платный ajax загрузчик CKfinder. Только вот цена непомерно высока — $59.

ЗА ЧТО? — закричал было я. Но ничего не поделаешь — цена окончательная и никакого снисхождения. Но пытливый ум и поисковый индекс гугла нам поможет. Вот готовое решение.

Предварительно убеждаемся, что есть всё необходимое:

Крекс, фекс, пекс

1. Качаем и разархивируем CKFinder (версию 2.0.2 — для можно сгенерировать ключ) так, чтобы путь был такой /sites/all/modules/ckeditor/ckfinder/ (ckfinder.js)

2. Редактируем файл настройки ckfinder, расположенный /sites/all/modules/ckeditor/ckfinder/config.php:

  • удаляем все, с 21 по 34 строку, т.е. функцию function CheckAuthentication()
  • в строке $config[‘LicenseName’] = ''; вводим доменное имя сайта
  • в строке $config[‘LicenseKey’] = ''; вводим ранее полученный на странице кейгена ключ лицензии
  • находим строку $baseUrl = '/ckfinder/userfiles/'; и ниже добавляем require_once '../../../../includes/filemanager.config.php';

3. Проверяем что в файле /sites/default/settings.php раскомментирована строка $cookie_domain и в значении localhost UPD: если поставить доменное имя, то вы не сможете зайти потом на сайт под зарегистрированным пользователем или администратором. Проблема описана, в частности, здесь

4. Настраиваем параметры загрузки файлов CKEditor на странице Конфигурация->CKEditor->Профили->(Ваш профиль)->Настройки обзора файлов->File browser type->CKFinder

Улучшаем

"Из коробки" ckfinder не умеет делать транслитерацию имен. Недолгий поиск выдал вот это вот рабочее решение:

1. В файле \sites\all\modules\ckeditor\includes\filemanager.config находим:

drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

2. вставляем ниже:

transliteration_init();

3. В файле /sites/all/modules/transliteration/transliteration.module находим:

function transliteration_init() {
  if (!empty($_FILES['files']) && variable_get('transliteration_file_uploads', TRUE)) {
    // Figure out language, which is available in $_POST['language'] for node
    // forms.
    $langcode = NULL;
    if (!empty($_POST['language'])) {
      $languages = language_list();
      if (isset($languages[$_POST['language']])) {
        $langcode = $_POST['language'];
      }
    }
    foreach ($_FILES['files']['name'] as $field => $filename) {
      // Keep a copy of the unaltered file name.
      $_FILES['files']['orig_name'][$field] = $filename;
      $_FILES['files']['name'][$field] = transliteration_clean_filename($filename, $langcode);
    }
  }
}

4. И заменям на это:

Читайте  Чистка после работы NVIDIA GeForce Experience

function transliteration_init() {
  if ((!empty($_FILES['files']) || !empty($_FILES['upload'])) && variable_get('transliteration_file_uploads', TRUE)) {
    // Figure out language, which is available in $_POST['language'] for node
    // forms.
    $langcode = NULL;
    if (!empty($_POST['language'])) {
      $languages = language_list();
      if (isset($languages[$_POST['language']])) {
        $langcode = $_POST['language'];
      }
    }
    if (!empty($_FILES['files'])) {
        foreach ($_FILES['files']['name'] as $field => $filename) {
          $_FILES['files']['orig_name'][$field] = $filename;
          $_FILES['files']['name'][$field] = transliteration_clean_filename($filename, $langcode);
        }
    } else {
          $_FILES['upload']['orig_name'] = $_FILES['upload']['name'];
          $_FILES['upload']['name'] = transliteration_clean_filename($_FILES['upload']['name'], $langcode);
    }
  }  
}

Альтернатива

Для загрузки файлов, вместо связки CKeditor + CKfinder, можно использовать связку Wysiwyg + CKeditor + IMCE + IMCE Wysiwyg bridge 

[Всего голосов: 0    Средний: 0/5]