¿Cómo se cargan los archivos javascript adicionales necesarios para el complemento wysiwyg api en las páginas de nodo / edición?


9

Estoy creando un complemento con el módulo API WYSIWYG para Drupal 7 que agregará un botón a la barra de herramientas de los editores compatibles.

Estoy usando el hook_wysiwyg_plugin()gancho para crear un nuevo botón en la barra de herramientas del editor, pero necesito cargar algunos otros archivos javascript. El hook_wysiwyg_plugin()enlace parece permitirle especificar un archivo JS y CSS.

¿Cómo puedo cargar los archivos javascript adicionales necesarios para el plugin javascript?

He implementado hook_library()para definir una biblioteca, es decir, archivos js / css, pero no estoy seguro de cómo conectarlo a la API wysiwyg para que se carguen en el nodo / editar pantallas.


Respuestas:


1

En realidad es bastante simple, aunque mi experiencia al hacer lo mismo es a través de Drupal 6, por lo que puede haber algunas diferencias menores con mi código:

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

Nuevamente, este código es para D6, pero el principio básico aún debería funcionar.

Si bien no está vinculado directamente a la API de Wysiwyg, probablemente sea la mejor opción, ya que la API de Wysiwyg solo es compatible con el archivo JS por complemento (iirc).

Algunas opciones salvajes / no probadas para ti:

  • Realice una devolución de llamada de menú para el archivo Javascript definido en el complemento y devuelva un archivo javascript algo en caché que contenga las fuentes de múltiples archivos javascript. (Wysiwyg Fields realiza la devolución de llamada del menú para complementos generados dinámicamente, pero solo para un archivo javascript, consulte la fuente de ideas).

  • Utilice una técnica de carga de Javascript dinámica de Javascript similar a http://www.javascriptkit.com/javatutors/loadjavascriptcss.shtml

Espero que esto ayude.


Todavía no lo he probado, pero parece que funcionará. Gracias.
Camsoft

2

Con drupal_add_js :

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

Realmente necesito que esté vinculado con el módulo API WYSIWYG para que los archivos adicionales solo se carguen cuando ese módulo cree un área WYSIWG. También necesito cargar una biblioteca definida por hook_library ().
Camsoft

1

En teoría, todo lo que necesita hacer es usar el parámetro " #text_format " correcto en el #type textareaelemento FAPI para que el editor wysiwyg asociado con el Formato de texto se incluya automáticamente, de esta manera:

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

Sin embargo, no se incluye a menos que sea una página de "edición de nodo", por lo que algo relacionado con las funciones " filter_process_format" o " wysiwyg_pre_render_text_format" puede forzarla, pero aún no he encontrado la combinación mágica, todavía leyendo la fuente de el módulo Wysiwyg para encontrar la pieza que falta.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.