将变量从一个页面传递到 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