Как загружать дополнительные файлы JavaScript, необходимые для плагина Wysiwyg API на страницах узла/редактирования?

drupal.stackexchange https://drupal.stackexchange.com/questions/24

  •  16-10-2019
  •  | 
  •  

Вопрос

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

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

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

Я реализовал hook_library() Чтобы определить библиотеку, то есть файлы JS/CSS, но я не уверен, как я подключаю это к API Wysiwyg, чтобы они загружали на экраны узла/редактирование?

Это было полезно?

Решение

Это на самом деле довольно просто, хотя мой опыт работы с тем же, что через 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. (Fields Wysiwyg выполняет обратный вызов меню для динамически сгенерированных плагинов, но только для одного файла JavaScript см. Источник для идей).

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

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

Другие советы

С drupal_add_js:

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

Теоретически все, что вам нужно сделать, это использовать правильное »#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, чтобы найти недостающую часть.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с drupal.stackexchange
scroll top