我是Drupal themer,我正在努力以我需要的方式修改模块。当事情发生时,我需要运行一个非常简单的JavaScript。我发现模块的一部分是负责任的,以下是有效的:
if (something = something else) {
return array(
'#commands' => array(
// Hacky by works
ajax_command_append('body',
'<script>
alert("Custom Js");
</script>'),
),
);
}
else {
// Do something else
}
然而,调用其他地方的函数会更好,因为其他模块会想要调用它。如何在此声明中从另一个模块调用函数?
答案 0 :(得分:0)
你可以内联,就像这样
修改强>
在我的第一个回答中,我忘了在jQuery(document).ready(function() {})
模块
if (something = something else) {
// Inline fixed
drupal_add_js("jQuery(document).ready(function() { alert('Script inline!'); });", "type" => "inline");
// From file
drupal_add_js("myscript.js", "file");
return array(
'#commands' => array(
),
);
}
else {
// Do something else
}
myscript.js
(function() {
alert('Script from file!');
});
// or with jQuery
(function($) {
// Do something with $
})(jQuery);
如果您希望javascript代码位于其自己的文件中,请执行此操作(从示例中获取)
中的示例有关向模块/主题添加javascript的更多信息
Adding Javascript to your theme or module
Managing JavaScript in Drupal 7
修改2
您可以从模块调用javascript函数。我会这样做:
Drupal.settings
从任何模块调用它。假设您创建了模块,则应将javascript函数保存到Drupal.settings
(function ($) {
Drupal.settings.exampleModule = {
myFunction : function () {
alert('My example function!');
}
};
}(jQuery));
这会将该代码注入settings
,并且可供任何需要访问它的模块使用。
你的模块
if (something = something else) {
// Inline fixed
drupal_add_js("(function($) { Drupal.settings.exampleModule.myFunction(); })(jQuery);", "type" => "inline");
}
else {
// Do something else
}
我就是这样做的。现在,如果你需要使用ajax框架,你应该做这样的事情(尝试一下,我以前从未使用过这个框架,所以我猜)
return array(
'#commands' => array(
// Hacky by works
ajax_command_append('body', "(function($) { Drupal.settings.exampleModule.myFunction(); })(jQuery);"),
),
);