0

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

当然我可以使用 drupal_add_js() 或 $form#attached 等。但是在我的模板文件中添加标签有什么问题?执行此操作的“显示套件方法”是什么 - 我必须相信他们(显示套件团队)已经想到了这一点……

谢谢。

4

1 回答 1

0

实现此目的的一种方法是通过 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)。

于 2015-08-27T10:17:23.483 回答