将变量从一个页面传递到 drupal 中的网络表单
Pass variables from one page to a webform in drupal
我正在尝试将一个变量从不同的产品页面传递到网络表单页面。每个产品页面都有一个会话变量,如 $_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>
问题是我没有地方放置这些代码,有什么办法可以解决这个问题,或者有什么模块可以解决这个问题吗?
您可以创建自定义模块,然后实现 hook_form__alter()
您需要找到您要定位的网络表单的 ID。
然后:
function mymodule_form_webform1_alter(&$form, &$form_state) {
array_unshift($form['products']['#options'], array($_SESSION["product_name"] => $_SESSION["product_name"]));
}
或类似
这可能是一种将会话值传递给网络表单选项默认值的方法。我正在使用 Drupal 7、Webform 4。不同产品页面上的会话值是:
$_SESSION["j_product_name"] = "haha1";
$_SESSION["j_product_name"] = "haha2";
首先我创建了一个自定义模块,.module部分是(还需要创建.info):
<?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;
}
?>
在网络表单 select 选项中,默认值应为 [jay_token:product_session]
,选项应为:
haha1|Product1
haha2|Product2
我正在尝试将一个变量从不同的产品页面传递到网络表单页面。每个产品页面都有一个会话变量,如 $_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>
问题是我没有地方放置这些代码,有什么办法可以解决这个问题,或者有什么模块可以解决这个问题吗?
您可以创建自定义模块,然后实现 hook_form__alter()
您需要找到您要定位的网络表单的 ID。
然后:
function mymodule_form_webform1_alter(&$form, &$form_state) {
array_unshift($form['products']['#options'], array($_SESSION["product_name"] => $_SESSION["product_name"]));
}
或类似
这可能是一种将会话值传递给网络表单选项默认值的方法。我正在使用 Drupal 7、Webform 4。不同产品页面上的会话值是:
$_SESSION["j_product_name"] = "haha1";
$_SESSION["j_product_name"] = "haha2";
首先我创建了一个自定义模块,.module部分是(还需要创建.info):
<?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;
}
?>
在网络表单 select 选项中,默认值应为 [jay_token:product_session]
,选项应为:
haha1|Product1
haha2|Product2