В продолжение темы. Наверное большинство поставивших отличный WYSIWYG-редактор CKeditor сразу же задалось вопросом: какой же file uploader можно прикрутить для загрузки файлов на сервер?
Ответ дают сами разработчики бесплатного редактора CKeditor — купить платный ajax загрузчик CKfinder. Только вот цена непомерно высока — $59.
ЗА ЧТО? — закричал было я. Но ничего не поделаешь — цена окончательная и никакого снисхождения. Но пытливый ум и поисковый индекс гугла нам поможет. Вот готовое решение.
Предварительно убеждаемся, что есть всё необходимое:
- Редактор Ckeditor
- Модуль CKeditor
- Нежелание платить бешеные бабки
- ключ для программы, сгенерированный на странице кейгена
Крекс, фекс, пекс
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
Добавить комментарий