我正在尝试将一个变量从不同的产品页面传递到一个webform页面。每个产品页面都有一个会话变量,如$_SESSION["product_name"] = "Product1";
。同样,其他产品页面包含$_SESSION["product_name"] = "Product2";
$_SESSION["product_name"] = "Product3";
我的问题是如何将这些变量传递到不同的网页表单页面。我正在使用“webform”模块,我想要完成的是应该有一个<select>
标签,还有像
<select>
<option value="<?php echo $_SESSION["product_name"]; ?>" selected><? php echo $_SESSION["product_name"]; ?></option>
<option value="Product2">Product2</option>
<option value="Product3">Product3</option>
<option value="Product4">Product4</option>
</select>
问题是我没有地方可以放置这些代码,有什么方法可以解决这个问题,还是我可以使用任何模块解决这个问题?
答案 0 :(得分:1)
您可以创建自定义模块,然后实现hook_form__alter()
您需要找到要定位的网络表单的ID。
然后:
function mymodule_form_webform1_alter(&$form, &$form_state) {
array_unshift($form['products']['#options'], array($_SESSION["product_name"] => $_SESSION["product_name"]));
}
或类似的
答案 1 :(得分:0)
这可能是将会话值传递给webform选项默认值的一种方法。我使用的是Drupal 7,Webform 4.不同产品页面上的会话值是:
<?php
function jay_tokens_token_info() {
$types['jay_token'] = array(
'name' => t("Jay Tokens"),
'description' => t("Jay custom tokens"),
);
$jay_token['product_session'] = array(
'name' => t("Product Name"),
'description' => t("product_name session value"),
);
return array(
'types' => $types,
'tokens' => array(
'jay_token' => $jay_token,
),
);
}
/**
* Implements hook_tokens().
*/
function jay_tokens_tokens($type, $tokens, array $data = array(), array $options = array()) {
$replacements = array();
if ($type == 'jay_token') {
foreach ($tokens as $name => $original) {
switch ($name) {
case 'product_session':
$replacements[$original] = $_SESSION["j_product_name"];
break;
}
}
}
return $replacements;
}
?>
首先我创建了一个自定义模块,.module部分是(也需要创建.info):
[jay_token:product_session]
在网络表格选择选项中,默认值应为haha1|Product1
haha2|Product2
,选项应为:
function error() {
alert('You must enter a name.');
}
var Name = prompt('What is your name?', 'Name');
function repeat() {
var Name = prompt('What is your name?', 'Name');
if(Name === '') {
error();
repeat();
}
}
if(Name === '') {
error();
repeat();
}