drupal7 form模板複寫方法

給form製做一個template

從官方的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
  }
}
相關文章
相關標籤/搜索