将JavaScript添加到特定的内容类型


9

我想知道基于内容类型将JavaScript文件添加到特定页面的最佳方法是什么。例如,我要添加以下内容:

<script type='text/javascript' src='http://maps.google.com/maps/api/js?sensor=false'></script>

到目前为止,我所做的就是使用这种方式添加到我的特定内容类型中。对于map_page内容类型,我在页面中添加了以下两行代码-map_page.tpl.php。

drupal_add_js("http://maps.google.com/maps/api/js?sensor=false", 'external');
$scripts = drupal_get_js();

还有其他更好的方法吗?如果可能的话可以举个例子,目前还不是很了解...

Answers:


6

我无法评论适当的Drupal 7等效项,但是在Drupal 6站点中,我在template_preprocess_page中进行了此操作。

我将有一些逻辑来做出决定(基于arg()或基于page_manager_get_current_page()面板),然后加上$vars["scripts"]外部脚本。我以为不要在本地脚本中遇到依赖问题。

有时,我还会设置一个新区域,以$global_scripts供我想从CDN加载的Google API和SWFObject之类的想法使用,然后$scripts在页面模板中将其打印出来。

老实说,尽管我通常在所有页面上都有所有JS,以便对文件进行缓存。


6

由于Drupal不允许您重新定义template_preprocess_node(因为它已经在node.module中定义),因此我在自定义模块中添加了预处理器函数:

function mymodule_preprocess_node(&$vars) {
  if ($vars['type'] == 'my-node-type') {
    drupal_add_js(drupal_get_path('module', 'mymodule') . '/myjs.js');
  }
}

我之所以使用preprocess_node而不是preprocess_page因为获取节点类型更容易。如果您实际上引用了一个javascript文件,那么它将被自动缓存(请参阅参数部分)。


2

您还可以使用hook_node_view检查内容类型,然后以已经完成的方式添加js。

要么

如果您有一个输出将使用JS的信息的字段,请在此处使用预处理器添加js,因此js include取决于显示地图的字段,而不是内容类型。


0

一个简单的解决方案是只放置add_js:

  drupal_add_js('drupal_get_path('module', 'mymodule') . '/myjs.js');

在页面/节点template.php中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.