Drupal 7 - 如何将Javascript添加到视图中

时间:2012-10-11 15:50:59

标签: javascript drupal drupal-7 drupal-views

基本上我要做的是在视图中为每行迭代添加一行javascript代码。

在Drupal 6中,这曾经使用Views Custom Field完成,现在已经集成到Drupal 7中。

当我尝试使用“全局:自定义文本”字段时,它会删除我的脚本标记。

有什么想法吗?

请注意:我不想使用drupal_add_js,因为这需要动态插入,我宁愿不使用内联( messy )。将根据提供的JS弹出一个唯一的工具提示,我需要实际的行ID。

提前致谢!!

2 个答案:

答案 0 :(得分:4)

在推特上做出回应,但为了其他遇到同样情况(为了澄清)的人的利益,我想我会转发到这里。

通常,我不推荐使用views_php - 启用/使用已经discussed at length的PHP过滤器有许多缺点,并且当你真的不需要它时,它会增加另一个模块的膨胀。在这种情况下,你仍然可以在预处理函数中使用drupal_add_js(),并保持充足的动态。

简而言之,您有一个将同一事件绑定到的元素列表。 Event delegation会立即想到一个可能的解决方案。而不是 n 事件处理程序,您现在有一个用于父容器,这将使您的页面更具响应性。你不需要jQuery,但如果你更喜欢使用.delegate()

至于如何从这个外部JS文件中获取ID,很简单:确保它在您抓取的源标记中。假设您正在寻找 ID,您通常可以在每行的“views-row-N”类中找到它。否则,您将希望通过其他方式将class-id添加到模板中。在目标元素的事件处理程序内(您的行,在您的父元素中匹配.views-row的元素),从您打算使用的类中解析ID,并根据您从那里找到的值执行脚本的其余部分

这种方法有很多好处:它只减少了一个模块,它减少了一个安全问题的来源,你的JS在一个地方,你绑定的事件处理程序更少,你的标记更轻松,更容易阅读,以及事件委托意味着即使元素由于某种原因动态地添加到DOM中,这种技术仍然可以工作。至于细节,它将有助于准确知道你打算用弹出窗口做什么。它是否正在对另一个节点进行AJAX调用?它是根据列表中的位置做某事吗?我很乐意从那里澄清我的答案。

答案 1 :(得分:0)

你可能只是在寻找其中一个。这可能有点矫枉过正,但它会完成工作:http://drupal.org/project/views_php

安装模块,您将拥有global:php字段的选项。你可以只将javascript发布到字段输出中,它不会被过滤掉。