2

关于 Drupal webforms 的另一个问题——表单本身是由/includes/form.inc构建的

function theme_form_element($element, $value)

<label>并向 $output添加一个元素。我只想为一个网络表单删除该标签,因此我必须覆盖该功能。我怎样才能只为一个网络表单覆盖它,而在所有其他网络表单中保持不变?例如

if ($block == 'contact'):
  // only output <input> form element stored in $value
  function mytheme_html_form_element($element, $value) {
    $t = get_t();
    $output .= " $value\n";
    return $output;
  }
endif;

这可能吗,如果条件是什么?

4

3 回答 3

6

如果您只是想删除标签,您还可以使用hook_form_alter()并检查 $form_id 是否等于相关的网络表单。id 的格式为:webform_client_form_N 其中 N 是 webform 的节点 ID。

在正确的表单上操作后,您可以使用例如以下代码取消设置标签:

 unset($form['submitted']['first_name']['#title']);

这将取消设置名为 first_name 的字段的标签。

于 2010-01-21T22:07:00.740 回答
1

我确实必须做一个 hook_form_alter,但标签本身在 ['submitted'] 元素中。这是代码

  if($form_id == 'webform_client_form_18') {
    $form['submitted']['#children'] = '
    <input
     type="text" 
     maxlength="128"
     name="submitted[email]"
     id="edit-submitted-email"
     value="' . $form['submitted']['email']['#default_value']. '"
     class="form-text required"
    />
  ';
  }

以不同的形式,删除#title 有效(为你+1!),但这是另一种情况。

于 2010-01-25T14:21:39.937 回答
0

我不会取消设置表单元素标题。当您的表单被主题引擎呈现时,您可能会得到意想不到的结果。

您可以通过以下几种方式进行操作:

使用 with 为每个元素或整个表单设置主题'#theme' => 'my_callback'

您还可以使用使用相应主题挂钩的 hook_elements 创建自己的表单元素。

看:

http://api.drupal.org/api/drupal/developer--topics--forms_api_reference.html

http://api.drupal.org/api/function/hook_elements/6

于 2010-01-24T02:42:46.253 回答