嗨。這幾天在研究美化註冊頁面這個主題,因為希望能完全/最多的掌控整個註冊表單,所以做了custom模組,裡面寫了form alter。
目前有個問題是:
註冊頁面除了原本的form之外,有因為模組而跑出來的:
(1)username_check
(2)mollom
(3)content profile
(4)user term
(5)picture with register
問題是,我用print_r($form)的時候,只有(4),(5)有顯示出來,其他都沒有被print出來,讓我沒辦法form_alter,很奇怪。
我的原始碼如下:<?php
function bhuntr_register_form_form_user_register_alter(&$form) {
//account fieldset
$form['account']['name']['#description']='帳號只能包含英文字元和數字,並以英文字元起首,介於3~14個字元';
$form['account']['name']['#size']=30;
$form['account']['mail']['#size']=30;
//image fieldset
$form['picture']['#title']='個人頭像';
$form['picture']['picture_upload_register']['#description']='上傳你的個人照片或是頭像,最大500x500';
//print_r
$admin = user_access('administer users');
if($admin){
drupal_set_message('
' . print_r($form, TRUE) . '
');
}
//drupal_set_message('
' . print_r(&$form, TRUE) . '
');
}
?>
有沒有人可以指點?
Re: 給user_register form做form alter的問題
alter 的時候,會有模組呼叫順序的問題
會依照 module_implements() 取得的模組清單來呼叫,如:
Array
(
[0] => color
[1] => comment
[2] => locale
[3] => menu
[4] => node
[5] => taxonomy
[6] => update
[7] => upload
[8] => content
[9] => wikitools
)
可以看出來並非單純依照模組名稱排序
可能你自製的模組被呼叫的順序剛好在別的模組前面
所以就不會有其他模組 alter 到 user_register 表單裡的內容
至於呼叫順序是怎麼決定的我就不清楚了
上述狀況的解決方案
就是等所有模組都 alter 完之後再 alter 你的部份
就不會有所缺漏
6.x 把 form_alter 拆成兩個階段
第一階段是呼叫所有 {module_name}_form_{form_id}_alter 的函式
第二階段就是 5.x 原有的 hook_form_alter,所以依然能夠使用 hook_form_alter 來修改所有的表單內容
如果還有缺漏的部份,那就只能使用表單的 theme 來修改了