Drupal - Webform元素主题

时间:2010-01-21 21:27:05

标签: php drupal drupal-webform

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

构建

function theme_form_element($element, $value)

并在$ output中添加<label>元素。我想只为一个webform删除该标签,所以我必须覆盖该功能。 如何只为一个webform覆盖它,而在其他所有webform中保留它相同? E.g。

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;

这是可能的吗?if条件是什么?

3 个答案:

答案 0 :(得分:6)

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

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

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

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

答案 1 :(得分: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 work(+1给你!),但这是另一种情况。

答案 2 :(得分:0)

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

您可以采用以下几种方式:

使用'#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