【问题标题】:Drupal 7 Webform fills hidden field with current node titleDrupal 7 Webform 用当前节点标题填充隐藏字段
【发布时间】:2011-10-30 02:23:06
【问题描述】:

我在特定内容类型的所有页面上使用网络表单作为块。表单全部相同,但在提交列表中,我想知道用户正在查看哪个页面。我认为隐藏字段和默认值%title 可以做到这一点,但事实并非如此。我尝试了一堆其他的标记值,其中很多都可以工作,但没有一个给我当前节点的标识符。

【问题讨论】:

  • 7,它在问题标题中:)
  • 太晚了!只是快速浏览一下,很快就会报告:-)

标签: drupal drupal-7 drupal-webform


【解决方案1】:

我认为它不起作用的原因是 webform 标记的 node 元素指的是 webform 本身的节点,而不是当前节点页面。为什么 webform 不使用我不知道的内置令牌系统,这似乎是一个错失的机会。

查看 webform 模块,我认为完成此操作的最简单方法是编写一个快速自定义模块,定义一个表(两列,nidurl),然后实现 hook_webform_submission_insert() 以保存当前$_SERVER['REQUEST_URI'] 适用于所有网络表单。然后,您可以分别使用hook_webform_submission_load()hook_webform_submission_render_alter() 将 URL 数据重新附加到提交并显示到页面。

您可以在模块中包含的 webform_hooks.php 文件中找到所有这些钩子,它们都有很好的文档记录。

【讨论】:

  • 有趣。我实际上并没有制作任何自定义模块,但我想我一定会调查一下。您知道是否有办法从您看到的页面中获取“当前节点”? (所以不是得到$_SERVER['REQUEST_URI'] 我实际上得到了节点的标题或其他)
  • 我的另一个想法是使用一些快速而肮脏的 jQuery 并将$('h1').text() 加载到该死的隐藏字段中......但它看起来很脏,如果 JS 被禁用,它将无法工作
  • 是的,这并不理想,另一个想法可能是使用 hook_form_alter() 来填充隐藏字段,这样它就可以为非 JS 用户工作。如果您在节点页面上,您可以使用menu_get_object() 来获取节点对象
  • 仅供参考,这就是我最终在自定义模块中所做的(非常感谢!):function funnygarbage_form_webform_client_form_22_alter(&$form, &$form_state) { $current_object = menu_get_object(); if ($current_object->type != 'job') return; $job_title = $current_object->title; $form['submitted']['job_position']['#default_value'] = $job_title; }
  • 您能详细说明一下这个解决方案吗?尤其是这个函数的命名重要吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-06
  • 1970-01-01
相关资源
最近更新 更多