【问题标题】:modx revo formit hook not workingmodx revo formit 钩子不起作用
【发布时间】:2016-07-26 08:18:12
【问题描述】:

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

到目前为止,我有一个像这样的 sn-p/hook "calculating":

<?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-sn-p-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>

【问题讨论】:

  • 请您添加表单代码。

标签: php modx modx-revolution formit


【解决方案1】:

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

请检查一下,$age里面是什么,它是一个数组,因为你使用了name="age[]"

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

【讨论】:

  • 感谢 Jako 为您解答!通过添加 "$result = "";"在第 4 行,我没有得到“纯”占位符 ([[+all]]),而是得到了一个空白占位符,其中不包含任何内容。我还检查了 $age,但它肯定包含一个字符串/数字,它不是一个数组。我添加的“已婚”部分是为了展示我想要实现的目标,之前没有测试过,但你是对的......
  • 我通过将 name="age[]" 更改为 name="age" 取得了一点进展...现在是第一个变量被读取和计算...但是现在我有一个数组children[],已经检查了几个复选框并且数组作为不同的值;现在我正在尝试获取每一个选择并赋予每一个独特的价值......
  • 你可以使用 $children = $hook->getValue('children');并在这种情况下对 $children 进行 foreach。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多