我有一个定义内容类型的模块。假设我只有title
和body
字段。
当节点表单呈现时,它具有标准title (textfield)
和body (textarea)
.
我想将这两个字段包装成fieldset
.
这就是我实现这一目标的方式,但我认为这不是最好的方式。
/**
* Implements hook_form().
*/
function hook_form($node, $form_state) {
return node_content_form($node, $form_state);
}
/**
* Implements hook_form_FORM_ID_alter().
*/
function hook_form_node_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'content_type_name_node_form') {
$form['info'] = array(
'#type' => 'fieldset',
'#title' => t('Describe your content')
);
$form['info']['title'] = $form['title'];
unset($form['title']);
$form['info']['body'] = $form['body'];
unset($form['body']);
}
}
关于如何使它变得更好的任何建议?
更新
我想到的另一个变体。几乎是一样的,只是稍微改进了一点。
/**
* Implements hook_form_FORM_ID_alter().
*/
function hook_form_node_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'content_type_name_node_form') {
$groups = array(
'info' => array(
'title' => t('Describe your content'),
'fields' => array('title', 'body')
)
);
foreach ($groups as $key => $group) {
$form[$key] = array(
'#type' => 'fieldset',
'#title' => $group['title']
);
foreach ($group['fields'] as $field) {
$form[$key][$field] = $form[$field];
unset($form[$field]);
}
}
}
}