从官方的drupal api document中可获得form有#theme这个参数,它能够指定form使用一个模板来用于form的基本布局,#theme的值必须是经过hook_theme声明的key。通常状况下,即便不去声明#theme,#theme也会有一个与本form同名的默认值,因此只须要用hook_theme声明一个与form name同样的key就能够。php
mymodule.module:api
function mymodule_form(){ // ... return $form; } function mymodule_theme() { return array( // theme name与form ID同样。这是因为每一个form[#theme]都有一个等于form ID的默认值。 'mymodule_form' => array( 'render element' => 'form', 'template' => 'mymodule-form', // 对应文件名mymodule-form.tpl.php ), ); }
mymodule-form.tpl.php (其它HTML代码随意):函数
<?php $form = $variables['form'];?> <?php echo drupal_render($form['name']); // 'name' form element ?> <?php echo drupal_render_children($form); // print other all form element ?>
能够使用hook_form_alter修改form的内容,前提是获得form ID(drupal中全部form都会有一个form ID,通常与建立form的函数名相同)
http://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_form_alter/7
如下方法能够输出全部form的form ID,获得form ID才能够对form进行单独操做,建议加到theme下的template.php中,命名为mytheme_form_alter (mytheme要改成当前theme的名字)布局
function mytheme_form_alter(&$form, &$form_state, $form_id) { $print = '<pre>' . print_r($form, TRUE) . '</pre>'; if (module_exists('devel')) { dsm($form_id); // print form ID to messages } else { drupal_set_message($form_id); // print form ID to messages } if (module_exists('devel')) { dsm($form); // pretty print array using Krumo to messages } else { drupal_set_message($print); // print array to messages } }