实现此目的的一种方法是通过 hook_ds_pre_render_alter(),例如:
/**
* Implements hook_ds_pre_render_alter();
* Add custom JavaScript.
*/
function MYMODULE_ds_pre_render_alter(&$layout_render_array, $context, &$vars) {
if($vars['type'] === 'MY_NODE_TYPE' && $vars['view_mode'] === 'full') {
drupal_add_js(drupal_get_path('module', 'MYMODULE') . '/js/my_js_file.js');
}
}
通过#attached 添加JavaScript 会更可取,因为它看起来更干净并且更符合Drupal 8 中采用的方法,但是我找不到这样做的方法。Display Suite 似乎覆盖了 hook_node_view() 并将#attached 添加到 ds_pre_render_alter() 的实现中并没有让我有任何收获。不幸的是,也不支持在自定义 DS .inc 布局文件中声明 .js 文件。
直接在 .tpl.php 模板文件中实现 drupal_add_js() 可能无法按预期工作,并且似乎不是“最佳实践”(请参阅 https://drupal.stackexchange.com/questions/20520/drupal-add-js-in -html-模板文件)。
有趣的是,尽管在 Drupal 8 中 drupal_add_js() 被完全删除以支持#attached,并且可以直接在模板中添加 JavaScript,请参阅https://www.drupal.org/theme-guide/8/assets)。