需要在每个节点可以提交一次的内容类型的每个实例中都有一个表单 - Drupal 7

Posted

技术标签:

【中文标题】需要在每个节点可以提交一次的内容类型的每个实例中都有一个表单 - Drupal 7【英文标题】:Needing to have a form in every instance of a content type that can be submitted once per node - Drupal 7 【发布时间】:2017-10-11 15:00:06 【问题描述】:

所以情况就是这样,我不知道如何完成它。

我有一个名为“警报”的内容类型。这种内容类型的每个实例都需要有一个网络表单(实际上只是一个带有隐藏字段的提交按钮),用户单击该表单以确认他们已阅读并理解警报。理想情况下,一旦提交,表单应替换为类似于“您已将此警报标记为已读”的消息。

我确实创建了一个网络表单(显示为一个块,以便能够放置在为警报类型设置的变体页面中)并且可以让它出现在每个实例上,但用户可以在每个警报上提交多次(提交设置为无限制,就像我将其设置为每个用户 1 次提交一样,表单不会在任何警报的第一次提交后呈现)。此外,一旦他们单击表单的一个实例,每个额外的实例都会导致一条消息,说明他们已经提交了表单。

所以我真的有两个问题。首先,也是最重要的,允许每个节点提交一次(没有“已提交”通知)。其次,不是必需的,但会很好,一旦为特定节点提交了表单,表单就不再为该特定用户呈现在该节点上。有人对完成这两个方面的最佳方法有任何想法吗?

我在 Drupal 7.56 上运行,使用 AT_Panels_Everywhere 主题,Webform 模块版本:7.x-4.15。

【问题讨论】:

用户是匿名用户还是登录用户?? 是的。如果您已登录用户,请在用户配置文件中添加一些字段以标记用户是否已单击。如果不是,请使用 cookie 来存储该信息。 @Sanjok 他们将登录(经过身份验证的角色)。 @MilanG 这样做的问题是网络表单将被提交多次,但需要限制为每个用户每个节点一次。除非我误解了你的建议。 尽管如此,创建一个新表并将其命名为您想要的任何名称,并且其中至少包含三个字段,例如,nid、uid、visited(bool)。用户单击按钮后,您可以保存 nid 值、uid 值并将 True 或 1 设置为访问值。下次加载 webform 节点时,您可以进行查询并检查该 uid 之前是否访问过该节点,如果访问的值为 true,则禁用或隐藏表单。 【参考方案1】:

在 drupal 7 中,使用 webform 7.x-4.0,您可以在内容类型中启用 webforms。这样做:

转到结构 > 内容类型 [相应的内容类型] > 编辑 在左下角,找到 Webforms 选项卡,然后选择 Enable webforms for this content type。

根据您的用例,我建议启用它并安装节点克隆模块。然后您可以创建一个警报节点,设置网络表单,限制每个用户提交一次,并允许内容管理员克隆内容。该节点可以用作模板。

【讨论】:

以上是关于需要在每个节点可以提交一次的内容类型的每个实例中都有一个表单 - Drupal 7的主要内容,如果未能解决你的问题,请参考以下文章

Spring注解

如何同时从 oauth 认证两种类型的用户。并且在每个请求标头中都需要两个用户凭据

解决HttpServletRequest的输入流只能读取一次的问题(转)

Activiti 多个并发子流程的应用

欧拉路

将仅在启动时运行一次的 Elastic Beanstalk 配置命令放在哪里?