【问题标题】:Formhandler subject dynamic fieldFormhandler 主题动态字段
【发布时间】:2012-12-11 16:14:27
【问题描述】:

我对 TYPO3 扩展名“Formhandler”有疑问。我安装了扩展程序,添加了验证码,一切正常。

这是 HTML 模板:

<!-- ###TEMPLATE_FORM1### begin -->
<form action="###REL_URL###" name="projektform" id="projektform" method="post" class="formhandler">
  <br />  
  <div id="sender_name">
    <label for="sender_name"><span style="color:red;">*</span>Name:</label>
    <br />
    <input type="text" name="formhandler[sender_name]" id="sender_name"
    value="###value_sender_name###" />
    ###error_sender_name###
  </div>
 <br />
 <div id="sender_email">
    <label for="sender_email"><span style="color:red;">*</span>Email:</label>
    <br />
    <input type="text" name="formhandler[sender_email]" id="sender_email"
    value="###value_sender_email###" />
    ###error_sender_email###
  </div>
  <br />
  <div id="sender_message">
    <label for="message"><span style="color:red;">*</span>Message:</label>
    <br />
    <textarea name="formhandler[message]" id="message">###value_message###</textarea>
    ###error_message###
  </div>
  <br />
  <!--###CAPTCHA_INSERT### this subpart is removed if CAPTCHA is not enabled! -->
  <div id="captcha">
    <label for="freecapfield"><span style="color:red;">*</span>###SR_FREECAP_NOTICE###</label>
    <br />
    ###SR_FREECAP_CANT_READ###
    <br />
    <div class="cap-img">
      ###SR_FREECAP_IMAGE###
    </div>
    <br />
    <input type="text" id="freecapfield" name="formhandler[freecapfield]" title="###SR_FREECAP_NOTICE###" value="">
    <br />
    ###error_freecapfield###
  </div>
  <!--###CAPTCHA_INSERT###-->  
  <br />
  <input type="submit" value="Submit" ###submit_nextStep### />
</form>
<!-- ###TEMPLATE_FORM1### end -->

<!-- ###TEMPLATE_SUBMITTEDOK### begin -->
<p>The following message has been sent:</p>
<p>###value_message###</p>
<!-- ###TEMPLATE_SUBMITTEDOK### end -->

<!-- ###TEMPLATE_EMAIL_ADMIN_PLAIN### begin -->
The following contact form has been sent to you:
Sender: ###value_sender_name### ###value_sender_email###
Text:
###value_message###
<!-- ###TEMPLATE_EMAIL_ADMIN_PLAIN### end -->

这是错字脚本:

<INCLUDE_TYPOSCRIPT: source="FILE:fileadmin/contactform/1-contactform.ts">
plugin.Tx_Formhandler.settings {  
  debug = 1
  templateFile = fileadmin/contactform/1-contactform.html  
  formValuesPrefix = formhandler   
  finishers {    
    1 {      
      class = Tx_Formhandler_Finisher_Mail
    }    
    2 {      
      class = Tx_Formhandler_Finisher_SubmittedOK      
      config.returns = 1    
    }  
  }
  # Rules for the validation
  validators.1.class = Validator_Default
  validators.1.disabled = 0
  validators.1.config.fieldConf {
    message.errorCheck.1 = required
    message.errorCheck.2 = minLength
    message.errorCheck.2.value = 5
    sender_name.errorCheck.1 = required
    sender_email.errorCheck.1 = required
    sender_email.errorCheck.2 = email
    freecapfield.errorCheck.1 = srFreecap
  }
  # Layout if the error message
  singleErrorTemplate {
    totalWrap = |
    singleWrap = <span style="color: red;">|</span>
  }
}

所以我所拥有的是姓名、电子邮件、消息和验证码字段,它们工作得很好。 但是后来我想在表单中添加一个“主题”字段,这样当有人从在线联系表单发送电子邮件时,他就可以设置该电子邮件的主题。 我添加了一个额外的输入字段:

  <div id="subject">
      <label for="subject">Subject:</label>
    <br />
    <input type="text" name="formhandler[subject]" id="subject" value="###value_subject###"/>
  </div>

在 HTML 模板中添加输入后,我输入了值“SUBJECT”。结果是我能够在 formhandler 调试器中看到值:

The current GET/POST params are:
sender_name     NAME
sender_email    EMAIL@MAIL.COM
subject     SUBJECT
message     MESSAGE
freecapfield    kdlxp
step-2-next     1
submitted   1
randomID    5fab4cc19017c5c48dafb6a05ed7687b
removeFile  
removeFileField     
submitField     

然后我需要做的就是将该值“分配”到“管理主题”字段。我做了很多研究,我能够找到以下代码:

plugin.Tx_Formhandler.settings.predef.myformname {
  finishers {
    1.class = Tx_Formhandler_Finisher_Mail
    1.config {
      limitMailsToUser = 5
      admin {
        subject = TEXT
        subject.data = GPvar:formhandler|title 
      }
    }
  }
}

所以我把代码放在我的错字脚本中,用我的表单名称“projektform”替换“myformname”,用我的输入字段名称“subject”替换标题,但是当我发送电子邮件时,没有主题. 我做了很多搜索,尝试了很多例子,但结果是一样的。你能指出我正确的方向吗?

【问题讨论】:

    标签: typo3


    【解决方案1】:

    不推荐使用 GPvar,请改用 GP:

    subject.data = GP:formhandler|subject
    

    更多信息可以在这个howto中找到:How to access Formhandler values in TypoScript

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 考虑在你的答案中总结链接页面的要点;如您所见,当链接资源的 URL 更改时,仅链接的答案变得无用。
      • @lfurini 我相信这实际上是试图评论 LeondeRijke 的回答。我已将正确的链接编辑到该答案中。
      【解决方案3】:

      或者您可以使用旨在为您执行此操作的机制:

      在您的模板中,您通过 name="formhandler[subject]" 指定了字段名。 这意味着您的值将存储在“主题”键下。 大多数(如果不是全部)终结者都能够像这样处理这个键/值对:

      plugin.Tx_Formhandler.settings {
        finishers {
          1 {
              class = Tx_Formhandler_Finisher_Mail
              config.admin.subject = subject
          }
        }
      }
      

      您的代码可能无法正常工作的另一个原因是您没有指定表单以使用预定义,而是在预定义之外配置了大部分表单。但是您找到的主题的配置使用 predef。仅更改 predef 名称是不够的,请将配置与您的表单相关联。它必须与您的其他配置处于同一级别。这也可能有效:

      plugin.Tx_Formhandler.settings {
        finishers {
          1.class = Tx_Formhandler_Finisher_Mail
          1.config {
            limitMailsToUser = 5
            admin {
              subject = TEXT
              subject.data = GP:formhandler|subject 
            }
          }
        }
      }
      

      旁注: 即使不使用 predef 也可以(因为您不需要多种不同的形式),但不建议您将配置更改为使用 predef。

      【讨论】:

        【解决方案4】:

        假设您的表单确实基于带有键“projektform”的预定义表单:

        plugin.Tx_Formhandler.settings.predef.projektform {
            finishers {
                1.class = Tx_Formhandler_Finisher_Mail
                1.config {
                    limitMailsToUser = 5
                    admin {
                        subject = TEXT
                        subject.data = GP:formhandler|subject
                        subject.sanitize = 1
                    }
                }
            }
        }
        

        如果您使用“TEXT”之类的 cObject 访问 GET/POST 参数,则应始终添加“sanitize=1”。 Formhandler 挂钩到 stdWrap 并将提交的表单数据添加到 GET/POST 数组中。

        更好的方法是@denvercoder 建议只使用输入字段的名称:

        plugin.Tx_Formhandler.settings.predef.projektform {
            finishers {
                1.class = Tx_Formhandler_Finisher_Mail
                1.config {
                    limitMailsToUser = 5
                    admin {
                        subject = subject
                    }
                }
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2014-02-24
          • 1970-01-01
          • 2013-02-15
          • 2018-02-09
          • 2013-02-01
          • 2016-01-02
          • 1970-01-01
          • 2011-06-20
          • 2013-01-20
          相关资源
          最近更新 更多