it-swarm-es.com

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

Estoy creando un complemento usando 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 gancho hook_wysiwyg_plugin() para crear un nuevo botón en la barra de herramientas del editor, pero necesito cargar algunos otros archivos javascript. El gancho hook_wysiwyg_plugin() 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.

9
Camsoft

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.

1
Decipher

Con drupal_add_js :

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

En teoría, todo lo que necesitaría hacer es usar el parámetro correcto "# text_format" en el #type textarea Elemento 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 nodos", por lo que hay algo relacionado con las funciones "filter_process_format "o" wysiwyg_pre_render_text_format "puede ser capaz de forzarlo, pero todavía no he encontrado la combinación mágica, todavía leo la fuente del módulo Wysiwyg para encontrar la pieza que falta.

1
wildpeaks