我创建了自己的模块“cssswitch”。我正在尝试创建自己的html布局来显示模块的管理表单部分。我理解如何使用hook_form_alter()来修改表单元素,但我需要创建整个表单布局以使某些字段彼此相邻。 看来我需要的东西就像我使用theme_cssswitch_display()显示的节点的前端视图,但是对于节点的管理部分。
function cssswitch_form_alter(&$form, $form_state, $form_id) {
switch($form_id) {
case 'cssswitch_node_form':
$form['hour_start']['#prefix'] = '<div class="start-box">';
$form['ampm_start']['#suffix'] = '</div>';
$form['ampm_start']['#attributes'] = array("style" => "border-width:2px;");
break;
}
}
function cssswitch_theme() {
return array(
'cssswitch_display' => array(
'arguments' => array('node'),
),
);
}
// to display the view of the node
function theme_cssswitch_display($node) {
$output = '<div class="cssswitch-cssfilename">Filename: '.
check_plain($node->cssfilename). '</div>';
$output .= '<div class="cssswitch-time_start">Start: '.
check_plain($node->hour_start). ':'.check_plain($node->minute_start).' '.check_plain($node->ampm_start).'</div>';
$output .= '<div class="cssswitch-time_end">End: '.
check_plain($node->hour_end). ':'.check_plain($node->minute_end).' '.check_plain($node->ampm_end).'</div>';
return $output;
}
感谢您的帮助
答案 0 :(得分:2)
我现在整理好了。 我的hook_theme是这样的:
function cssswitch_theme() {
return array(
'cssswitch_display' => array(
'arguments' => array('node'),
),
'cssswitch_node_form' => array(
'arguments' => array('form' => NULL),
'template' => 'cssswitch-node-form.tpl.php',
),
);
}
我创建了文件themes / garland / cssswitch-node-form.tpl.php 然后我可以控制放置任何表单元素的位置:
<style>
#edit-hour-start-wrapper, #edit-minute-start-wrapper, #edit-ampm-start-wrapper, #edit-hour-end-wrapper, #edit-minute-end-wrapper, #edit-ampm-end-wrapper {
float:left;
margin-right:25px;
}
</style>
<div id="regform1">
<?php print drupal_render($form['title']); ?>
<?php print drupal_render($form['cssfilename']); ?>
<fieldset class="group-account-basics collapsible">
<legend>Time Start</legend>
<?php print drupal_render($form['hour_start']); ?>
<?php print drupal_render($form['minute_start']); ?>
<?php print drupal_render($form['ampm_start']); ?>
</fieldset>
<fieldset class="group-account-basics collapsible"><legend>Time end</legend>
<?php print drupal_render($form['hour_end']); ?>
<?php print drupal_render($form['minute_end']); ?>
<?php print drupal_render($form['ampm_end']); ?>
</fieldset>
</div>
<?php print drupal_render($form['options']); ?>
<?php print drupal_render($form['author']); ?>
<?php print drupal_render($form['revision_information']); ?>
<?php print drupal_render($form['path']); ?>
<?php print drupal_render($form['attachments']); ?>
<?php print drupal_render($form['comment_settings']); ?>
<?php print drupal_render($form); ?>
答案 1 :(得分:1)
hook_form_alter
。由于您正在定义表单,因此您无需更改表单,而只需按您的意愿定义它。
更改表单标记需要使用的是表单本身和/或元素的#theme
属性。有了它,您可以使用自己的主题函数来呈现表单及其元素。
在Drupal's FAPI reference中寻求帮助。
答案 2 :(得分:0)
我发现了我现在需要的大部分内容。我不得不使用Themer Info“给我的”cssswitch_node_form“的”建议“表单ID。我在我的表单构建函数中使用了这个名为”cssswitch_form()的代码: $ form ['#theme'] ='cssswitch_node_form';
我还需要在这个函数中使用该名称:
function cssswitch_theme() {
return array(
'cssswitch_display' => array(
'arguments' => array('node'),
),
'cssswitch_node_form' => array(
'arguments' => array('form' => NULL),
),
);
这是同名的功能,但前面加上“theme_”:
function theme_cssswitch_node_form($form) {
$output='';
$output.='<span>testing 123</span>';
$output.=drupal_render($form['hour_start']['name']);
$output.=drupal_render($form['minute_start']);
$output .= drupal_render($form);
return $output;
}
我仍然有自动包含表单元素的html代码问题,这不是我想要的。在这种情况下,我想并排放置一些表单元素。我猜这就是drupal_render()的功能。是否有函数调用只给我一个没有所有html标记的表单元素?
感谢