如果我错了,请纠正我,在阅读了drupal fapi相关文章后,我得到了fapi自己产生'id'属性的印象。它允许开发人员仅分配“名称”属性。如果是这样的话,有没有办法可以为元素设置欲望'id'值?因为,我希望我的元素具有有意义的'id',以便html / jquery代码更容易阅读,并节省我的时间,通过已经编写的jquery代码来改变那些我在里面使用的id。 / p>
P.S:drupal版本 - 6.x
答案 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
属性,以更改应该使用哪个函数来创建标记。