2

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

PS:drupal 版本 - 6.x

4

4 回答 4

2

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

于 2010-05-14T13:20:58.933 回答
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 中测试。

于 2011-02-10T05:11:48.953 回答
1

确实,您可以设置$element['#attributes']['id']并将其应用于表单字段。但是,它会破坏标签,并且#states在 Drupal 7 中,因为渲染管道的其余部分从其他地方读取 ID。因此,为了您的标签并#states继续工作,请改用将 ID 设置为$element['#id'](一个未记录的属性,但它是表单 API 在内部监视 ID 的方式)。

确保同时传递您的 ID drupal_html_id,以确保没有冲突。

于 2013-12-04T17:05:22.147 回答
0

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

  • 如果您想更改站点上的所有表单,您可以覆盖用于表单的主题功能和不同类型的表单字段。

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

于 2010-05-14T06:45:02.300 回答