Як ви завантажуєте додаткові файли 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, щоб вони завантажувалися на екрани вузлів / редагувань?


Голос ваш запит тут також drupal.org/node/1039076
giorgio79

Відповіді:


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 робить зворотний виклик меню для динамічно генерованих плагінів, але лише для одного файлу 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([...]);
  }
}

Мені дуже потрібно, щоб він був пов'язаний з модулем API WYSIWYG, щоб додаткові файли завантажувалися лише тоді, коли цей модуль створює область WYSIWG. Також мені потрібно завантажити бібліотеку, визначену kuk_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.