将变量从一个页面传递到drupal

时间:2015-06-01 18:06:39

标签: php drupal drupal-webform

我正在尝试将一个变量从不同的产品页面传递到一个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>

问题是我没有地方可以放置这些代码,有什么方法可以解决这个问题,还是我可以使用任何模块解决这个问题?

2 个答案:

答案 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();
}