嵌入js/jquery到Display Suite布局模板文件的最佳方法



我正在使用显示套件为drupal站点设计主题-所有当前版本。您可能已经意识到,在drupal中有许多方法可以实现相同的结果。我在展示套件中创建了许多自定义布局。现在我想添加jquery的一些布局,使jquery只加载时,这些布局显示(而不是使相同的jquery文件加载在每个页面的主题)。

当然我可以使用像drupal_add_js()或$form#附件等东西。但是在模板文件中添加标签有什么问题呢?"显示套件方法"是什么?我相信他们(显示套件团队)已经想到了这个…

谢谢。

可以通过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中采用的方法,但是我找不到这样做的方法。显示套件似乎覆盖hook_node_view()和添加#附加到ds_pre_render_alter()的实现没有得到我任何地方。遗憾的是,在自定义DS .inc布局文件中声明。js文件也是不支持的。

直接在.tpl.php模板文件中实现drupal_add_js()可能不会像预期的那样工作,并且似乎不是"最佳实践"(参见https://drupal.stackexchange.com/questions/20520/drupal-add-js-in-html-template-file)。

有趣的是,在drupal8中,drupal_add_js()将被完全移除,以支持#attached,并且可以直接在模板中添加JavaScript,参见https://www.drupal.org/theme-guide/8/assets)。

最新更新