Widgets

user_register_form 是個很有趣,也很方便當做 Drupal Module 開發入門的切入點。大部分客戶需求的修改,都可以透過變更 $form 這個有點複雜的陣列 (array) 內容達成目的。今天在這舉個簡單的例子。

客戶需求:

  • 希望採用 email 作為使用者帳號,方便未來串接 OpenID 等會員認證方式。
  • 因為採用 email 作為使用者帳號,希望取消原本的「會員帳號名稱」欄位。


系統背景狀況:

  • 在一個 Drupal 7 環境中,已安裝正體中文語系與翻譯。
  • 在一個 Drupal 7 環境中,已安裝模組「LoginToboggan」,並設定:
    • 「Allow users to login using their e-mail address」:Enabled
    • 有客製化翻譯部分 LoginToboggan 的前台用字語句。
練習一:觀察會員註冊表單 $form 的內容
  • 檔案位置:該 Drupal 7 系統中所使用的 theme 目錄底下的 template.php
function [your_theme_name]_form_user_register_form_alter(&$form, &$form_state, $form_id) {

  print_r($form);

}
然後到 Drupal 7 網站前端觀察這一頁「http://your_website_domain/user/register」,應該可以看到完整的 $form 內容,以下擷取一小段我的環境中的片段範例:
Array ( 
  [#user] => stdClass Object ( 
    [uid] => 0 
    [hostname] => xxx.xxx.xxx.xxx
    [roles] => Array ( [1] => anonymous user ) 
    [cache] => 0 ) 
  [#user_category] => register 
  [#attached] => Array ( 
    [library] => Array ( 
      [0] => Array ( 
        [0] => system 
        [1] => jquery.cookie ) ) ) 
  [#attributes] => Array ( 
    [class] => Array ( 
      [0] => user-info-from-cookie ) ) 
  [#validate] => Array ( 
    [0] => user_account_form_validate 
    [1] => user_validate_picture 
    [2] => user_register_validate 
    [3] => logintoboggan_user_register_validate ) 
  [account] => Array ( 
    [#weight] => -10 
    [name] => Array ( 
      [#type] => textfield 
      [#title] => 使用者名稱 
      [#maxlength] => 60 
      [#description] => 可以使用空格; 除了半形句點、連結線和底線 (. - _) 之外,不可使用其他符號。 
      [#required] => 1 
      [#attributes] => Array ( 
        [class] => Array ( 
          [0] => username ) ) 
      [#default_value] => 
      [#access] => 1 
      [#weight] => -30 ) 
    [mail] => Array ( 
      [#type] => textfield 
      [#title] => 電子郵件地址 
      [#maxlength] => 254 
      [#description] => 一個有效的電子郵件地址,所有由系統發出的電子郵件將往此地址。此電子郵件地址位址不會被公開,並且只在您想要申請新的密碼,或是接收某些新聞或通知時,我們才會用此電子郵件地址寄信給您。 
      [#required] => 1 
      [#default_value] => 
      [#weight] => -29 ) 
    [pass] => Array ( 
      [#type] => password_confirm 
      [#size] => 25 
      [#description] => 為新帳號設定密碼。請輸入兩次密碼。 密碼長度至少需有 6 個字元。 
      [#required] => 1 ) 

這當中,我們可以觀察到「account」 有兩個屬性「required」和「access」是可以動手腳來達成我們所需要的目的。嘗試看看在 theme 目錄底下的 template.php 中做些調整:
function [your_theme_name]_form_user_register_form_alter(&$form, &$form_state, $form_id) {

  $form['account']['name']['#access'] = FALSE;
  $form['account']['name']['#required'] = FALSE;

}

即可達成這次的客製化任務 :)
9/26: 看來還需要處理 form submit 之後。目前暫時解法是把 email 中的 username 字段直接送到 account name 欄位去,以避開 form validate。再找看看有沒有比較漂亮的解法。

Brought to you by

0 Comments:

Post a Comment

 
Top