如何在节点/编辑页面上加载Wysiwyg API插件所需的额外JavaScript文件?

drupal.stackexchange https://drupal.stackexchange.com/questions/24

  •  16-10-2019
  •  | 
  •  

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

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

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

我已经实施了 hook_library() 要定义库IE JS/CSS文件,但是不确定如何将其连接到Wysiwyg API,以便它们加载到节点/编辑屏幕上?

有帮助吗?

解决方案

这实际上很简单,尽管我做同样的事情的经验是通过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仅支持每个插件JS文件(IIRC)。

一些狂野/未经测试的选择:

  • 为插件中定义的JavaScript文件进行菜单回调,并将包含多个JavaScript文件源的缓存的JavaScript文件传递。 (Wysiwyg字段确实对动态生成的插件进行菜单回调,但仅对一个JavaScript文件,请参见Ideas的源)。

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

希望这可以帮助。

其他提示

drupal_add_js:

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

从理论上讲,您要做的就是使用正确的#text_format“参数 #type textarea Wysiwyg编辑器与要自动包含的文本格式关联的FAPI元素,此方式:

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模块的来源以找到缺失的作品。

许可以下: CC-BY-SA归因
scroll top