我正在使用Webform4。它使用Drupal的令牌,而不是它自己的%令牌,就像在版本3中一样,而我发现的几乎所有内容都与Webform 3有关。
说我要制作多页订阅表格。在第一页上只有一个电子邮件字段。在第二篇文章中,我想要一个标记,其内容应为:
molot@example.com的详细订阅配置
同样,我希望能够将它们用作将来字段的默认值,例如要求用户提供帐单地址,然后再提供送货地址。
是否有任何代币?我现在所做的是:
function mymodule_token_info() {
$type = array(
'name' => t('Webform submitted values'),
'description' => t('Tokens related to $_POST[\'submitted\'].'),
);
$tokens = array();
if(isset($_POST['submitted'])) {
foreach($_POST['submitted'] as $key => $val) { //discard $val now
$tokens[$key] = array(
'name' => $key,
'description' => "\$_POST['submitted']['$key']",
);
}
}
return array(
'types' => array('webform_submitted' => $type),
'tokens' => array('webform_submitted' => $tokens),
);
}
function mymodule_tokens($type, $tokens, $data, $options) {
if($type == 'webform_submitted') {
$replacements = array();
foreach ($tokens as $name => $original) {
//Hide errors below. We don't care if it really exists yet. If empty, so be it.
@$replacements[$original] = (string)$_POST['submitted'][$name];
}
return $replacements;
}
}
它可以工作,但只显示前一步的值,因此需要一些带有隐藏字段的肮脏技巧,才能跨多个步骤传递电子邮件值。我承认-那又快又脏。是否有任何内置方法可以做到这一点,或者为此目的适当维护了贡献模块?还是一种使该代码独立于$_POST['submitted']
,使其在多个步骤中都带有值并使其令牌(来自可用Webform元素)在编辑窗口中的令牌列表上可见的方法?
提交具有所需值的页面时,可以设置会话变量吗?
—
Darvanen
@Darvanen我可能可以,但是值已经保存在某个地方,对吗?所以我宁愿使用已经存在的东西。而且我几乎不相信我是第一个需要此功能的人。可能我只是找不到合适的解决方案?
—
Mołot
我不确定这个$ form_state ['storage'],但是我搜索了2或3个帖子,他们提到了所有存储在$ form_state ['storage']中的数据,所以我认为您可以访问数据,来源stackoverflow.com/questions/ 6408170 /…和drupal.org/node/717750
—
Bala
@Bala这适用于所有钩子更改形式。但是我如何获得令牌中的表单状态?我的意思是,我要在两周内辞掉这份工作。会照顾这种形式的家伙不是编码员,他可以做到,但这不是他的主要技能-这就是为什么我需要令牌。
—
Mołot
是的,您提到的未来需求我完全忘记了。
—
Bala 2015年