Как загрузить дополнительные файлы javascript, необходимые для подключаемого модуля wysiwyg api, на страницах узла / редактирования?


9

Я создаю плагин, используя модуль API WYSIWYG для Drupal 7, который добавит кнопку на панель инструментов поддерживаемых редакторов.

Я использую hook_wysiwyg_plugin()хук, чтобы создать новую кнопку на панели инструментов редактора, но мне нужно загрузить несколько других файлов JavaScript. hook_wysiwyg_plugin()Крюк , кажется, позволяет указать один JS и CSS файл.

Как я могу загрузить дополнительные необходимые файлы JavaScript, необходимые для плагина Javascript?

Я реализовал, hook_library()чтобы определить библиотеку, т.е. файлы js / css, но я не уверен, как я подключаю это к wysiwyg api, чтобы они загружались на экранах узла / редактирования?


Ответы:


1

На самом деле это довольно просто, хотя мой опыт работы с тем же самым связан с Drupal 6, поэтому с моим кодом могут быть небольшие отличия:

function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
  // Only modify node_form's.
  // @TODO - Set a condition for all forms you wish to alter for D7 entities.
  if (isset($form['type']['#value']) && $form_id == "{$form['type']['#value']}_node_form") {
    // We use after build to add JS and CSS to prevent issues caused by form caching.
    $form['#after_build'][] = 'MYMODULE_form_alter_after_build';
  }
}

function MYMODULE_form_alter_after_build($form_element, &$form_state) {
  drupal_add_js(...);
}

Опять же, этот код для D6, но основной принцип все еще должен работать.

Хотя он не привязан напрямую к API-интерфейсу Wysiwyg, он, вероятно, является наилучшим вариантом, поскольку API-интерфейс Wysiwyg поддерживает только файл JS для каждого плагина (iirc).

Несколько диких / непроверенных вариантов для вас:

  • Сделайте обратный вызов меню для файла Javascript, определенного в плагине, и передайте обратно несколько кэшированный файл javascript, содержащий источники нескольких файлов javascript. (Wysiwyg Fields выполняет обратный вызов меню для динамически генерируемых плагинов, но только для одного файла javascript, см. Источник идей).

  • Используйте технологию динамической загрузки Javascript, аналогичную http://www.javascriptkit.com/javatutors/loadjavascriptcss.shtml.

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


Я еще не пробовал, но, похоже, это сработает. Спасибо.
Camsoft

2

С drupal_add_js :

function yourmodule_preprocess_page(&$vars)
{
  $node = $vars['node']; 
  if($node->type == 'yournodetype' AND arg(2) == 'edit')
  {
    drupal_add_js([...]);
  }
}

Мне действительно нужно, чтобы он был связан с модулем WYSIWYG API, чтобы дополнительные файлы загружались только тогда, когда этот модуль создает область WYSIWG. Также мне нужно загрузить библиотеку, определенную методом hook_library ().
Camsoft

1

Теоретически все, что вам нужно сделать, это использовать правильный параметр " #text_format " в #type textareaэлементе FAPI для автоматического включения редактора wysiwyg, связанного с текстовым форматом, следующим образом:

function mymodule_menu(){
    return array(
        'mypage' => array(
            'title' => 'A page to test wysiwyg',
            'page callback' => 'drupal_get_form',
            'page arguments' => array('mymodule_page'),
            'access arguments' => array('access content'), 
        )
    );
}

function mymodule_page($form, &$form_state) {
    $element = array(
        '#type' => 'textarea', 
        '#title' => t('Comment'), 
        '#default_value' => 'something',
        '#text_format' => 'full_html',
        '#required' => TRUE,
    );
    $form['mytext'] = $element;
    return $form;
}

Тем не менее, он не включается, если это не страница «редактирования узла», так что что-то, связанное с функциями » filter_process_formatили« wysiwyg_pre_render_text_format», может быть в состоянии форсировать это, но я еще не нашел волшебную комбинацию, все еще читая источник модуль Wysiwyg, чтобы найти недостающую часть.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.