0

我正在使用 MODX 2.4.2,并且我有一个多页 FormIt-form。在这种形式中,用户可以从不同的单选框中进行选择。根据用户所做的选择,选择会受到重视。这些值需要一起计算/求和,以获得一个总值,该总值将用于进一步计算。

到目前为止,我有一个片段/钩子“计算”,如下所示:

<?php

$age = $hook->getValue('age');

if($age === '40') { $result = '111'; } 
if($age === '50') { $result = '222'; } 

if($married === 'yes') { $result = $result + '333'; } 
if($married === 'no') { $result = $result + '444'; } 

$hook->setValue('all', $result);
return true;

该钩子在 FormIt-snippet-call 中被调用(其中有一个错字会导致表单出错,因此实现了钩子)。

[[!FormIt? 
&hooks=`spam,calculating,email,redirect` 
&redirectTo=`36` 
&validate=`age:required, married:required,` 
&emailTpl=`Step1` 
&emailTo=`info@abc.de` 
&emailSubject=`new message` 
&store=`1`
]]

所以想象一下用户确实选择了“40”岁并且他已经结婚了。这应该导致 111 + 333 = 444,但我只是在通过 FormIt 发送的电子邮件中显示占位符[[+all]] 。

即使没有计算部分,我也只是得到空白占位符[[+all]]

<?php

$age = $hook->getValue('age');

if($age === '40') { $result = '111'; } 
if($age === '50') { $result = '222'; } 

$hook->setValue('all', $result);
return true;

这里出了什么问题,任何帮助将不胜感激。

编辑:添加一些表单代码:

<form action="[[~[[*id]]]]" method="post" class="form">
<input type="hidden" name="nospam:blank" value="[[+fi.nospam]]" />

<span>1. Age</span><br /> 

<input type="radio" name="age[]" value="40" [[!+fi.age:FormItIsChecked=`40`]]" />> 40 years
<input type="radio" name="age[]" value="50" [[!+fi.age:FormItIsChecked=`50`]]" />> 50 years
<input type="radio" name="age[]" value="60" [[!+fi.age:FormItIsChecked=`60`]]" />> 60 years
<input type="radio" name="age[]" value="70" [[!+fi.age:FormItIsChecked=`70`]]" />> 70 years
<input type="radio" name="age[]" value="80" [[!+fi.age:FormItIsChecked=`80`]]" />> 80 years

<br /><br />

<span>2. Married</span><br /> 

<input type="radio" name="married[]" value="yes" [[!+fi.married:FormItIsChecked=`yes`]]" />yes
<input type="radio" name="married[]" value="no" [[!+fi.married:FormItIsChecked=`50no]]" />no

<br /> <br /> 

<input class="button" type="submit" value="Weiter" />
</form>
4

1 回答 1

0

如果测试不成功,则 $result 未定义,因此在这种情况下不会替换占位符。用一个空值初始化它以避免这种情况。

请检查$age中的内容,它是一个数组,因为您使用了name="age[]"

顺便说一句: $married 在您的代码中从来没有值。

于 2016-07-26T09:12:14.907 回答