当前位置:首页 > CMS教程 > 其它CMS > 列表

使用 Drupal Form Hooks 进行表单自定义修改

发布:smiling 来源: PHP粉丝网  添加日期:2014-12-05 14:26:24 浏览: 评论:0 

下面我们一起来看看使用 Drupal Form Hooks 进行表单自定义修改的具体过程,希望文章对大家会有所帮助.

Drupal使用或者开发过程中最常用到的Hooks(钩子)莫过于hook_form_alter,你所常见的Drupal网站中的内容创建,联系表单,Menu菜单,用户注册等等都会用到表单的钩子.

Drupal Form Hooks

hook_form_alter 中的hook直接替换为你的模块名称,代码如下:

  1. /** 
  2. * Implements hook_form_alter(). 
  3. */ 
  4. function custom_form_alter(&$form, &$form_state$form_id) { 
  5. switch($form_id) { 
  6. case ‘user_profile_form’: 
  7. //doing something 
  8. break

hook_form_FORM_ID_alter 是 hook_form_alter的一个变种,直接对某一个具体的表单进行修改,代码如下:

  1. /** 
  2. * Implements hook_form_FORM_ID_alter(). 
  3. */ 
  4. function custom_form_user_profile_form_alter(&$form, &$form_state) { 
  5. if ($form['#user_category'] == ‘settings’) { 
  6. if (variable_get(‘configurable_timezones’, 1)) { 
  7. system_user_timezone($form$form_state); 
  8. return $form

通过以上2个Hooks就可以轻松给Drupal 添加自定义的表单元素,每一个form都可以自定义theme前段元素,render的elements 都会通过variables传递给主题,代码如下:

  1. /** 
  2. * Implements hook_theme(). 
  3. */ 
  4. function custom_theme() { 
  5. return array
  6. ‘user_profile_form’ => array
  7. ‘render element’ => ‘form’, 
  8. ), 
  9. ); 

自定义form的element样式,代码如下:

  1. function theme_user_profile_form($variables) { 
  2. $form = $variables['form']; 
  3.  
  4. $output = drupal_render($form['info']); 
  5.  
  6. $header = array(t(‘Factor’), t(‘Weight’)); 
  7. foreach (element_children($form['factors']) as $key) { 
  8. $row = array(); 
  9. $row[] = $form['factors'][$key]['#title']; 
  10. $form['factors'][$key]['#title_display'] = ‘invisible’; 
  11. $row[] = drupal_render($form['factors'][$key]); 
  12. $rows[] = $row
  13. //开源软件:phpfensi.com 
  14. $output .= theme(‘table’, array(‘header’ => $header, ‘rows’ => $rows)); 
  15.  
  16. $output .= drupal_render_children($form); 
  17. return $output

通过 hook_preprocess_FORM_ID 在theme form element之前修改$variables,代码如下:

  1. function custom_preprocess_user_profile_form(&$variables) { 
  2. if ($variables['form’][‘actions]) { 
  3. //change the button name 
  4. // add new variable to theme form 

自定义form的html元素,可以将form的theme定义一个template,注意这样会降低drupal的性能,但是换来的好处是可以自定义html,代码如下:

  1. /** 
  2. * Implements hook_theme(). 
  3. */ 
  4. function lixiphp_theme($existing$type$theme$path){ 
  5. return array
  6. ‘user_profile_form’ => array
  7. ‘render element’=>’form’, 
  8. ‘template’ =>’templates/form/user-profile’, 
  9. ), 
  10. ); 

创建user-profile.tpl.php文件在templates/form目录下,代码如下:

  1. <?php 
  2. print drupal_render($form['form_id']); 
  3. print drupal_render($form['form_build_id']); 
  4. print drupal_render($form['form_token']); 
  5. ?> 
  6. <li class=“rows”> 
  7. <?php print drupal_render($form['actions']); ?> 
  8. </li> 

本文讲究的form自定义方法实用于Drupal6,Drupal7和Drupal8.

Tags: Drupal Hooks 表单自定义

分享到: