Jak ładujesz dodatkowe pliki javascript wymagane dla wtyczki wysiwyg api na stronach węzłów / edycji?


9

Buduję wtyczkę za pomocą modułu API WYSIWYG dla Drupala 7, który doda przycisk do paska narzędzi obsługiwanych edytorów.

Używam hook_wysiwyg_plugin()haka, aby utworzyć nowy przycisk na pasku narzędzi edytora, ale muszę załadować kilka innych plików javascript. hook_wysiwyg_plugin()Hak wydaje pozwalają określić jeden plik CSS i JS.

Jak mogę załadować dodatkowe wymagane pliki javascript wymagane dla javascript wtyczki?

Wdrożyłem hook_library()zdefiniować bibliotekę tj. Pliki js / css, ale nie jestem pewien, jak podpiąć to do wysiwyg api, aby ładowały się na ekranach węzła / edycji?


Odpowiedzi:


1

To właściwie dość proste, chociaż moje doświadczenie z robieniem tego samego dotyczy Drupala 6, więc mogą występować niewielkie różnice w moim kodzie:

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(...);
}

Ponownie, ten kod dotyczy D6, ale podstawowa zasada powinna nadal działać.

Chociaż nie jest bezpośrednio powiązany z interfejsem API Wysiwyg, jest to prawdopodobnie najlepsza opcja, ponieważ interfejs API Wysiwyg obsługuje tylko plik JS na wtyczkę (iirc).

Kilka dzikich / nieprzetestowanych opcji dla Ciebie:

  • Wykonaj wywołanie zwrotne menu dla pliku JavaScript zdefiniowanego we wtyczce i przekaż nieco buforowany plik javascript zawierający źródła wielu plików javascript. (Wysiwyg Fields wykonuje wywołanie zwrotne menu dla dynamicznie generowanych wtyczek, ale tylko dla jednego pliku javascript, zobacz źródło pomysłów).

  • Użyj dynamicznej techniki ładowania JavaScript Javascript podobnej do http://www.javascriptkit.com/javatutors/loadjavascriptcss.shtml

Mam nadzieję że to pomoże.


Jeszcze tego nie próbowałem, ale wygląda na to, że to zadziała. Dzięki.
Camsoft,

2

Z drupal_add_js :

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

Naprawdę potrzebuję, aby był związany z modułem API WYSIWYG, aby dodatkowe pliki były ładowane tylko wtedy, gdy moduł tworzy obszar WYSIWG. Muszę także załadować bibliotekę zdefiniowaną przez hook_library ().
Camsoft

1

Teoretycznie wszystko, co musisz zrobić, to użyć odpowiedniego parametru „ #text_format ” w #type textareaelemencie FAPI, aby edytor wysiwyg powiązany z formatem tekstowym był automatycznie dołączany, w ten sposób:

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;
}

Jednak nie zostanie uwzględnione, chyba że jest to strona „edycji węzła”, więc coś związanego z funkcjami „ filter_process_format” lub „ wysiwyg_pre_render_text_format” może być w stanie wymusić, ale nie znalazłem jeszcze magicznej kombinacji, wciąż czytając źródło moduł Wysiwyg, aby znaleźć brakujący element.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.