2010-05-10 2 views
5

drupal을 사용하는 Im 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에서 그냥 만들 : (DSM)

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

주석 처리 된 라인을 Drupal devel module입니다 - 어떤 내가 좋겠 설치를 권장합니다. 이 기능을 설치하고 관리 역할에 대한 사용 권한을 설정하여 사용할 수있게되면 페이지 구성 방법과 배열 기능을 정확하게 보여주는 새로운 탭이 나타납니다.

배열 내에서 흔적을 따라 가면 사이트의 주제가 될 수 있습니다.

EDIT - 오케이 : 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에 대한 코드를 작성해야합니다. –

+0

heh np - 내가 거기에서 편집했습니다. 도움이됩니까? – MrFidge

+0

고정 된 서명이 도움이되어야합니다 (+1). 그러나 그는 또한 그가 확인하는 실제 양식 ID를 수정해야합니다. 이에 대한 별도의 답변을 참조하십시오. –

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 구현 내에서 모두 변경할 수 있도록 두 가지 형태, 구조의 대부분 동일하다 - 또 다른 경우 문을 추가 두 번째 버전을 확인하십시오.

+0

모듈 설치 후 hook_form_alter가 작성되면 캐시를 지우는 것이 필요합니다. – ndvo

0

양식을 변경하기 전에이 작업을 수행하는 것이 가장 좋습니다. 양식의 소스 코드를보고 숨겨진 필드의 값을 확인하십시오. form_id - 사용자가 사용해야하는 정확한 form_id를 제공합니다.

3

이렇게 사소한 변경 사항이있는 경우 모듈을 작성하면 안됩니다. 실적 적중 및 낭비 측면에서 지불하는 가격은 목표 목표보다 높습니다.

t() 함수가 처리하는 문자열에 영향을 줄 문자열 교체를 수행 할 수 있습니다. 이것은 사이트의 settings.php 설정 파일입니다.

다음은 "로그인"을 "로그인"으로 대체하는 방법입니다.

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

영어 문자열에만 적용됩니다. 후행 _en을 특정 언어 코드 (_fr, _ja, _es)로 바꾸어 다른 언어에도 동일하게 적용하십시오.