如何在节点/编辑页面上加载所见即所得api插件所需的额外javascript文件?


9

我正在使用用于Drupal 7的WYSIWYG API模块构建一个插件,该插件将向受支持的编辑器的工具栏添加一个按钮。

我正在使用hook_wysiwyg_plugin()挂钩在编辑器工具栏上创建一个新按钮,但是我需要加载其他一些JavaScript文件。该hook_wysiwyg_plugin()挂钩似乎允许您指定一个JS和CSS文件。

如何加载插件javascript所需的额外必需的javascript文件?

我已经实现hook_library()了定义一个库,即js / css文件,但是不确定如何将其连接到所见即所得api,以便它们加载到节点/编辑屏幕上?


在此处表达您的要求以及drupal.org/node/1039076
giorgio79'9

Answers:


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,但基本原理仍然可以使用。

尽管它不直接与Wysiwyg API绑定,但它可能是最好的选择,因为Wysiwyg API每个插件(iirc)仅支持JS文件。

一些适合您的狂野/未体验的选择:

  • 对插件中定义的Javascript文件进行菜单回调,然后传回包含多个JavaScript文件源的某种程度上已缓存的JavaScript文件。(Wysiwyg Fields确实对动态生成的插件执行菜单回调,但仅针对一个javascript文件,请参见参考源以获取想法)。

  • 使用类似于http://www.javascriptkit.com/javatutors/loadjavascriptcss.shtml的Javascript动态Javascript加载技术

希望这可以帮助。


我还没有尝试过,但是听起来可以。谢谢。
Camsoft 2011年

2

使用drupal_add_js

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

我确实需要将它与WYSIWYG API模块绑定在一起,以便仅在该模块创建WYSIWG区域时才加载其他文件。另外,我需要加载一个由hook_library()定义的库。
Camsoft

1

从理论上讲,您需要做的就是在FAPI元素上使用正确的“ #text_format ”参数,#type textarea用于与自动包含文本格式相关联的所见即所得编辑器,这种方式是:

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” 相关的某些功能可能会强制使用它,但是我还没有找到神奇的组合,仍在阅读所见即所得模块以查找丢失的部分。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.