1

Drupal 7 我遇到了与之前提出的问题类似的问题,但到目前为止,我无法提出任何建议。我有内容类型为“软件产品”的“产品”页面。我想在产品页面上放置一个指向 Web 表单“请求信息”的链接我想在表单上填充一个(隐藏)字段,其中产品名称也是引用产品页面的标​​题。我已经尝试了以下方法,但这只会导致显示表单的标题 - 而不是引用页面。

<?php  
/** 
*  Implementation of hook_form_alter(). 
*/  
function AddNodeInfoToForm_form_alter(&$form, $form_state, $form_id) {  
  switch($form_id) {  
       case 'webform_client_form_10': // the id of the form  
               {$current_object = menu_get_object(); 
               $product_title = $current_object->title; 
               $form['submitted']['product']['#default_value'] = $product_title; }
           return $form;
       }

我将不胜感激任何指针 - 我是 Drupal 的新手

4

1 回答 1

1

这是一种非常混乱的方式来做你需要做的事情,你应该将产品 nid 作为产品页面链接中查询字符串的一部分放在 URL 中,然后从网络表单中加载它。

在您的节点模板/预处理中:

$webform_path = 'node/10'; // Or whatever the webform's nid is
$link = l('Request Information', $webform_path, array(
  'query' => array(
    'product_nid' => $product_node->nid
  )
));
echo $link;

然后在您的表格中更改:

function AddNodeInfoToForm_form_alter(&$form, $form_state, $form_id) {  
  if ($form_id == 'webform_client_form_10' && isset($_GET['product_nid']) && is_numeric($_GET['product_nid'])) {
    $product_node = node_load($_GET['product_nid']);
    if ($product_node) {
      $product_title = $product_node->title; 
      $form['submitted']['product']['#default_value'] = $product_title;
    }
  }
}

请注意,您不会从hook_form_alter函数中返回表单,$form变量是通过引用传入的,因此以这种方式存储更改。

于 2011-12-14T14:01:31.213 回答