如何在节点/编辑页面上加载Wysiwyg API插件所需的额外JavaScript文件?
题
我正在使用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
希望这可以帮助。
其他提示
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模块的来源以找到缺失的作品。