Как подключить CKeditor к Drupal 7 я рассказывал ранее.
После настройки модуль подключит редактор CKeditor к полям редактирования публикаций. А как подключить wysiwyg к собственным формам? В 6-й версии Drupal редактор с помощью модуля CKeditor подключался ко всем полям типа textarea, достаточто было лишь добавить флажок wysiwig:
1 2 3 4 5 |
$form['text_of_richedit'] = array( '#type' => 'textarea', '#wysiwyg' => true, '#title' => 'Текст с подключенным редактором', ); |
Используем JS
Так было в шестерке, но в 7й версии все устроено несколько иначе. И первый вариант, который мне пришел на ум, пока я не разобрался что к чему, подключить CKeditor с помощью javascript. Чтобы отличать textarea, которым необходим редактор, я маркировал их специальным CSS классом — wysiwyg. И добавил в шаблон следующий скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 |
jQuery(window).load(function() { //ищем все текстовые области с классом wysiwyg var wgs = jQuery('textarea.wysiwyg'); var id = ''; if (wgs.length) //подключаем CKeditor к выбранным textarea. Можно задать ещё и какие то //параметры, но вдаваться в описание CKEDITOR не буду. for (var i = 0; i < wgs.length; i++) { id = jQuery(wgs).get(i).id CKEDITOR.replace(id, { toolbar: 'Basic', }); } }); |
А вот как выглядит описание поля для Drupal FormApi:
1 2 3 4 5 6 |
$form['text_of_richedit'] = array( '#type' => 'textarea', '#title' => 'Текст с подключенным редактором', //подключим класс-маркер '#attributes' => array('class' => array('wysiwyg')), ); |
Такая связка работает в 7ке, но построена она в парадигме 6й версии (мы вводим специальный маркер для поля textarea). Так что будем разбираться дальше.
Правильный вариант
Покопав код модуля CKeditor, стало ясно, что сейчас редактор цепляется к полю типа — text_format. Потому можно отказаться от фокусов с js и сделать правильно. Описание поля в FormApi будет выглядеть вот так:
1 2 3 4 5 6 7 |
$txt = variable_get('text_of_richedit', array('value' => '', 'format' => NULL)); $form['text_of_richedit'] = array( '#type' => 'text_format', '#format' => isset($txt['format']) ? $txt['format'] : NULL, '#title' => 'Текст с подключенным редактором', '#default_value' => $txt['value'], ); |
В общем случае профиль редактора зависит от выбранного формата текста.