5

Drupal 6.16を使用しています。以下の 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;
  }
}

これを修正する方法はありますか?

助けてください。ありがとうございました。

4

4 に答える 4

6

コードに2 つのエラーがあります。

  1. hfidgen (+1) によって既に指摘されているように、関数の署名が間違っています。である必要があるyourModuleName_form_alter(&$form, &$form_state, $form_id)ため、この例では、フォーム ID のスイッチがトリガーされることはありません。
  2. 間違ったフォーム idをチェックします。この場合、確認する必要がある 2 つのフォーム ID があり、どちらも使用しているものとは異なります。
    1. user_login_blockブロックとして利用可能な小さなログインフォーム用 (ほとんどのページで一般的に使用されます)
    2. user_login明示的なログインページ用 (通常は「user/login」の下にあります)

両方の形式は構造がほとんど同じであるため、通常は同じhook_form_alter実装内で両方を変更できます。別の case ステートメントを追加して、2 番目のバージョンを確認するだけです。

于 2010-05-10T17:16:33.480 に答える
5

テーマ関数を使用してフォームを変更する方が簡単だと思います-テーマのtemplate.phpでこれを作成するだけです:

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

コメントアウトされた行 (dsm) はDrupal devel モジュール用です。これもインストールすることをお勧めします。これをインストールし、それを使用できるように管理者ロールに権限を設定すると、新しいタブが表示され、ページがどのように構築され、どのアレイが何を行うかを正確に示します。

配列内のトレイルをたどると、サイトのほとんどすべてをテーマにすることができます.

編集 - わかりました: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;
  }
}
于 2010-05-10T16:27:27.117 に答える
3

このような些細な変更の場合、モジュールを作成するべきではありません。パフォーマンスへの影響と無駄な時間という点で支払う代償は、目標の目標に対して単純に高すぎます。

t() 関数によって処理される文字列に影響を与える文字列置換を実行できます。これは、サイトの settings.php 構成ファイルで行われます。

「ログイン」を「サインイン」に置き換える方法は次のとおりです...

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

これは、英語の文字列のみに影響します。末尾の _en を特定の言語コード (_fr、_ja、_es) に置き換えて、他の言語でも同じことを行ってください。

于 2011-07-15T17:40:17.150 に答える
0

フォームの変更を開始する前にこれを行うのが最善です: フォームのソース コードを見て、非表示フィールド form_id の値を確認してください。これにより、使用する必要がある正確な form_id が得られます。

于 2010-05-12T09:58:46.653 に答える