我对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
}
}
}
}
所以我把代码放在我的拼写错误脚本中,将“myformname”替换为我的表单“projektform”的名称,将title替换为我的输入字段“subject”的名称,但是当我发送电子邮件时,没有主题。 我做了很多搜索,尝试了很多例子,但结果是一样的。你能指点我正确的方向吗?
答案 0 :(得分:6)
不推荐使用GPvar,请改用GP:
subject.data = GP:formhandler|subject
更多信息可以在本指南中找到:How to access Formhandler values in TypoScript
答案 1 :(得分:0)
答案 2 :(得分:0)
或者你可以使用那种意图为你做的机制:
在模板中,您按名称=&#34; formhandler [subject]&#34;指定了字段名称。 这意味着您的价值将存储在&#34;主题&#34;下。 大多数(如果不是全部)终结者能够像这样处理这些键/值对:
plugin.Tx_Formhandler.settings {
finishers {
1 {
class = Tx_Formhandler_Finisher_Mail
config.admin.subject = subject
}
}
}
您的代码可能无法正常工作的另一个原因是您没有指定表单来使用predef并将其大部分配置在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(因为你不需要多种不同的形式)也不建议,你应该考虑将你的配置改为使用predefs。
答案 3 :(得分:0)
假设您的表单确实基于带有“projektform”键的predef表单:
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
}
}
}
}