0

たとえば、登録フォームには、「ユーザー名」と、その入力 type="text" name="name" を持つテキスト フィールドがあります ....

入力フィールドの名前からタイトルを取得する方法を知る必要があります。

私は次のような機能を期待しています:

$title = get_title_for_element('name');

結果:

assert($title == 'Username'); // is true

Drupal でこのようなものはありますか?

ありがとう。

4

2 に答える 2

2

検証関数で使用できるフォームとフォーム状態変数があります。エラーを設定するには、 form_set_error()を使用する必要があります。

値配列からフォーム配列にマップされる関数はありません。しかし、それを解決することは難しくありません。フォームのデータ構造を理解することは、drupal を構築する際に必要な重要なスキルの 1 つです。

この場合、問題のフォームはuser_edit_formによって (迂遠な方法で) 生成され、そこにデータ構造が表示されます。 $form['account']['name']ユーザー名フィールドです。タイトルの配列キーは、'#title'フォーム要素のほとんどの場合と同じです。

于 2010-07-06T10:53:41.547 に答える
0

私が見ているように、あなたはそれを2つの異なる方法で行うことができます。mycustomvalidation.moduleというモジュールを作成しましょう( mycustomvalidation.infoファイルも作成することを忘れないでください)。

注:以下のコードはテストされていないため、若干の調整が必要になる場合があります。ちなみにこれはDrupal6.xコードです。

1)使用hook_user()

必要なのは、hook_user() http://api.drupal.org/api/function/hook_user/6の独自の実装を含むカスタムモジュールです。

<?php
function mycustomvalidation_user($op, &$edit, &$account, $category = NULL) {
  if ($op == 'validate') {
    // Checking for an empty 'profile_fullname' field here, but you should adjust it to your needs.
    if ($edit['profile_fullname'] != '') {
      form_set_error('profile_fullname', t("Field 'Fullname' must not be empty."));
    }
  }
}
?>

2)form_alter()カスタム検証機能の使用

個人的には、このオプションを選択するのは、よりクリーンで「正しい」と思うからです。ここでは、プロファイルフィールドにカスタム検証関数を追加しています。

<?php
function mycustomvalidation_form_alter(&$form, $form_state, $form_id) {
  // Check if we are loading 'user_register' or 'user_edit' forms.
  if ($form_id == 'user_register' || $form_id == 'user_edit') {
    // Add a custom validation function to the element.
    $form['User information']['profile_fullname']['#element_validate'] = array('mycustomvalidation_profile_fullname_validate');
  }
}

function mycustomvalidation_profile_fullname_validate($field) {
  // Checking for an empty 'profile_fullname' field here, but you should adjust it to your needs.
  if ($field['#value'] != '') {
    form_set_error('profile_fullname', t("Field %title must not be empty.", array('%title' => $field['#title']));
  }
}
?>
于 2010-07-06T15:04:40.600 に答える