CKeditor + CKfinder + Drupal 7

CKeditor + CKfinder + Drupal 7В продолжение темы. Наверное большинство поставивших отличный 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. И заменям на это:

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 

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

Вверх

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: