web-dev-qa-db-ja.com

コアエラーメッセージを変更するにはどうすればよいですか?

デフォルトのエラーメッセージをDrupalコアから変更します。

エラーメッセージは「有効なファイル形式を選択してください」です。

私の問題は以下に簡単です。

  • 「割り当て」というCCKを作成しました。
  • そこでユーザーにファイルをアップロードするオプションを与えました。
  • そのような場合、ユーザーが無効なファイル形式をアップロードすると、drupalは上記のエラーメッセージをスローします。
  • エラーメッセージを「ファイルアップロードフィールドで特定のファイルをアップロードできません」に変更する必要があります。

どうすればこれを達成できますか?

(文字列オーバーライドモジュールを使用しないでください)

前もって感謝します..

4
Fero

その文字列が t() 関数(おそらくそうである)を介して実行され、 String Overrides を使用したくない場合は、設定ファイルを更新できます。

Drupal 6の場合、これを "settings.php"ファイルに入れれば機能します。

$conf["locale_custom_strings_en"] = array(
  "Please Select the Valid File Format" => "The file upload field cannot upload the speicified filed",
);

Drupal 7では、次のように変更します

$conf["locale_custom_strings_en"][""] = array(
  "Please Select the Valid File Format" => "The file upload field cannot upload the speicified filed",
);

ただし、D6インストールのいずれにも「有効なファイル形式を選択してください」という文字列が表示されません。これは、間違ったファイルタイプまたはMIMEタイプでCCKファイルフィールドにアップロードしようとしたときに表示されるメッセージではありません。 tファイル拡張子と一致します。

3
mpdonadio
  1. drupal_get_messages() を使用してメッセージを取得します。 $clear_queueパラメータはデフォルトでtrueです。
  2. 結果の配列で関連メッセージを検索し、それらを置き換えます。結果の配列はメッセージタイプによってインデックスが付けられ、値はそのタイプのメッセージの配列です(特定のタイプのメッセージのみを取得する場合でも)。
  3. drupal_set_message() を使用して、メッセージをメッセージキューに戻します。

Drupalは関数 theme_status_messages() から呼び出されたメッセージキューを取得します template_preprocess_page() から呼び出されるため、これを実現する1つの場所がそのテーマ関数のオーバーライドになります。メッセージの正確な状況によっては、メッセージが生成された時点に近いフックが見つかる場合があります。

メッセージはtemplate_preprocess_page()でレンダリングされるため、ページが既にレンダリングされているときにこのフックが呼び出されるため、 hook_exit() の実装はオプションではありません。

ところで、私はしばしば hook_message_alter() を望みました。

3
Oswald

Template_preprocess_page()に次のコードを配置し、完全に機能しました。これが最善の方法であると私は完全には確信していませんが、カスタムエラーを生成するモジュールを構築するよりも高速でした。

これを行うために、drupal_get_messages()によって生成されたエラーメッセージをすべて調べ、それらを循環させました。彼らが探していた文字列と一致した場合、drupal_set_message()を使用して新しいテキストでエラーを生成します。最後のステップは、drupal_set_message()を介して残りのエラーを渡すことでした。そうしないと、それらは呼び出されません。

繰り返しますが、これがそれを実現する最良の方法であるとは確信していません。テーマレイヤーでこれを行う方法について何か提案があれば、ぜひ聞いてみたいと思います。

$getmsg = drupal_get_messages('error');
    if ($getmsg){
      foreach($getmsg['error'] as $err) {

          switch($err) {
          case 'SUBSCRIBE TO THE NEWSLETTER field is required.':
            drupal_set_message('Sorry, you must sign up to the newsletter to enter', 'error');
          break;
          case 'I AGREE WITH THE CONTEST RULES &amp; REGULATIONS</a> field is required.':
            drupal_set_message('Sorry, you must agree to the rules and regulations', 'error');
          break;
          default:
            drupal_set_message(t($err), 'error', FALSE);
          break;
        }

      }
    }
1
user1263437

Drupal 7

エンティティフィールドごとに Field validation を使用して、エラーメッセージをカスタマイズできます。

これを行うには、フィールド設定を編集し、検証に移動して、新しい検証ルールを追加します(必須フィールドルール)。そこでは、テキストフィールドを設定してそのフィールドのカスタムエラーメッセージにする必要があります。

0
kenorb

最も簡単な方法は String Overrides module を使用することです。

モジュールをインストールすると、文字列を独自の文字列に置き換えることができます。文字列オーバーライドモジュールでは、t()関数にラップされた文字列を置き換えることもできます。

0
harry