2010-05-10 355 views
5

使用drupal 6.16的問題。以下代碼爲hook_form_alter不起作用。林只是想改變「登錄」到「登錄」用戶登錄表單hook_form_alter不能正常工作

<?php 
//$Id$ 

function helloworld_form_alter($form_id,&$form) { 
    switch ($form_id) { 

     case 'user_login_form': 

    // Change 'Log in' to 'Sign in'. 
    $form['submit']['#value'] = t('Sign in'); 


     break; 
    } 
} 

的提交按鈕的任何方式解決這一問題?

請幫忙。 謝謝。

回答

5

我覺得它更容易使用的主題功能改變形式 - 在你的主題的template.php剛剛創建此:

function YOURTHEMENAMEHERE_user_login_form($form) { 
    $form['submit']['#value'] = t('Sign in'); 
    //dsm($form); 
    return drupal_render($form); 
} 

註釋掉線(DSM)是Drupal devel module - 我會也建議安裝。一旦你安裝了這個併爲你的管理角色設置了權限以便你可以使用它,你將會得到一個新的標籤,它可以顯示你的頁面是如何構建的以及哪些數組是做什麼的。

按照數組中的線索,你可以在你的網站上的任何主題。

編輯 - 哦好的:P我注意到的一件事,以前沒有使用過這個鉤子,API中的例子有3個變量,但你有2個!有一個錯配意味着你可能被送入了錯誤的變量:

function modulename_form_alter(&$form, $form_state, $form_id) { 
    switch ($form_id) { 
    case 'contact_mail_page': 
    $form['submit']['#value'] = t('Sign in'); 
    break; 
    } 
} 
+0

感謝您的回覆hfidgen。那麼,我的目標不是更改登錄按鈕的文本。我只是爲了確保form_alter被調用。所以,我確實需要爲form_alter編寫代碼。 – 2010-05-10 16:35:03

+0

heh np - 我在那裏做了一個編輯,這有幫助嗎? – MrFidge 2010-05-10 16:53:51

+0

固定簽名應該有幫助(+1),但他也需要修復他檢查的實際表單ID - 請參閱我的單獨答案。 – 2010-05-10 17:20:14

6

兩個錯誤在你的代碼:

  1. 函數簽名是錯誤,如已經指出的hfidgen(+1)。它需要是yourModuleName_form_alter(&$form, &$form_state, $form_id),所以在你的例子中,表單ID的開關永遠不會觸發。
  2. 您檢查了錯誤的表格編號。還有,你需要在這種情況下檢查兩個形式的ID,無一不是從您使用的一個不同:
    1. user_login_block可用的塊(在大多數頁面上常用)
    2. 小的登錄表單user_login了明確的登錄頁面(通常在「用戶/登錄」發現)

這兩種形式在結構上大多是相同的,所以通常可以在同一hook_form_alter實現中同時更改 - 只需添加另一個case語句檢查第二個版本。

+0

如果在模塊安裝後創建了hook_form_alter,則似乎有必要清除緩存。 – ndvo 2013-12-19 20:11:17

0

在開始任何表單修改之前,最好這樣做:查看錶單的源代碼並檢查隱藏字段的值form_id - 這會爲您提供需要使用的確切form_id。

3

對於這樣一個微不足道的變化,你不應該寫一個模塊。您爲了實現目標而犧牲的性能價格和浪費的時間只是高價。

您可以執行一個字符串替換,它將影響由t()函數處理的字符串。這是網站的settings.php配置文件。

以下是如何用「登錄」取代「登錄」...

$conf['locale_custom_strings_en'] = array(
    'Log In'  => 'Sign In', 
); 

這隻會影響英文字符串。隨意用特定的語言代碼(_fr,_ja,_es)替換尾部的_en以對其他語言執行相同的操作。