具有自定义ID的Drupal表单

时间:2010-05-14 01:12:47

标签: drupal forms element drupal-fapi

如果我错了,请纠正我,在阅读了drupal fapi相关文章后,我得到了fapi自己产生'id'属性的印象。它允许开发人员仅分配“名称”属性。如果是这样的话,有没有办法可以为元素设置欲望'id'值?因为,我希望我的元素具有有意义的'id',以便html / jquery代码更容易阅读,并节省我的时间,通过已经编写的jquery代码来改变那些我在里面使用的id。 / p>

P.S:drupal版本 - 6.x

4 个答案:

答案 0 :(得分:2)

好的找到了解决方案。我可以使用#attributes元素的$form键来设置任何其他属性(例如class,id等)。感谢您的帮助。

答案 1 :(得分:1)

我有类似的问题需要处理。我需要在同一页面上有多个表单,所以我必须更改表单及其元素的ID以防止重复的ID。我做了类似以下的事情:

function voci_comment_form($form, &$form_state, $cid) {
  $form['#attributes']['id'] = 'voci-comment-form-' . $cid;
  $form['#attributes']['class'][] = 'voci-comment-form';
  $form['body'] = array(
    '#title' => 'Post a comment',
    '#type' => 'textarea',
    '#resizable' => FALSE,
    '#rows' => 1,
  );
  $form['comment'] = array(
    '#type' => 'submit',
    '#value' => 'Comment',
  );

  foreach ($form as $k => &$element) {
    $k = str_replace('_', '-', $k);
    $element['#attributes']['id'] = "edit-$k-$cid";
    $element['#attributes']['class'][] = "edit-$k";
  }

  return $form;
}

这基本上根据传入的$ cid设置唯一ID。代码还为表单中的每个元素添加类,以便您可以轻松地设置样式。我确信一个更强大的解决方案是可能的,但这是基本的想法。在Drupal 7中测试过。

答案 2 :(得分:1)

您可以设置$element['#attributes']['id'],这将适用于表单字段。但是,它会破坏Drupal 7中的标签和#states,因为渲染管道的其余部分会从其他位置读取ID。因此,对于您的标签和#states继续工作,请使用将ID设置为$element['#id'](一个未记录的属性,尽管如此,表单API在内部监视ID)。

确保通过drupal_html_id传递您的ID,以确保没有冲突。

答案 3 :(得分:0)

这个问题与Drupal-FAPI本身并没有多大关系,但更多的是关于Drupal主题的形式(创建标记)。

  • 如果要更改网站上的所有表单,可以覆盖用于表单的主题函数和不同类型的表单字段。

  • 如果您只想覆盖某些表单或表单字段,可以在表单或元素上设置#theme属性,以更改应该使用哪个函数来创建标记。