web-dev-qa-db-ja.com

登録フォームのカスタムフィールドのオートコンプリートが機能しなくなった

読んでくれてありがとう。

組織名を含むデータベーステーブルがあります。ユーザーがウェブサイトに登録すると、既存の組織に接続する方法として、私が追加したテキストフィールドを使用します。これは、既存の組織名でオートコンプリートします。これは以前は正常に機能していましたが、おそらく更新の1つを行った後では、今はそうではないようです。入力したときに何も読み込まれなくなりましたが、接続されていることを示す小さな円が表示されます。

これがコードです:

$items['org/autocomplete'] = array(
  'page callback' => '_org_autocomplete',
  'access callback' => TRUE,
  'type' => MENU_CALLBACK
);

...そして...

function _org_autocomplete($string = '') {
  $matches = array();
  $query = db_select('org_orgs', 'c'); // I've checked that the table exists, contains data, and is of this name - that's fine
  $return = $query
    ->fields('c', array('name'))
    ->condition('c.name', '%' . db_like($string) . '%', 'LIKE')
    ->range(0, 10)
    ->execute();

  foreach($return as $row) {
    $matches[$row->name] = $row->name;
  }
  if ($_SERVER['HTTP_REFERER'] == url('user/register', array('absolute' => TRUE))){
    drupal_json_output($matches);

    // The if statement surrounding this line prevents users
    // from viewing the full list by going directly to the
    // /org/autocomplete URL. In removing the if statement, I can
    // test to see if it works at the URL, and it does just fine

  }
}

テーブルが存在し、データが含まれていて、この名前であることを確認しました-結構です。 drupal_json_output()行を囲むifステートメントは、ユーザーがURLに直接アクセスして完全なリストを表示できないようにします。 ifステートメントを削除すると、URLで機能するかどうかをテストできます。

function org_form_user_register_form_alter(&$form, &$form_state, $form_id) {
  $form['field_organisation']['und'][0]['value']['#autocomplete_path'] = 'org/autocomplete';
  // Though no results appear, the 'org/autocomplete' path
  // is confirmed as the correct path because changing it to
  // anything else removes the little autocomplete circle.
  $form['field_organisation']['und'][0]['value']['#description'] = 'If your organisation appears in the above predefined dropdown menu, please select it.';
  $form['#validate'][] = 'org_form_validate';
  $form['#submit'][] = 'org_form_submit';
}

結果は表示されませんが、「org/autocomplete」パスを他のパスに変更すると小さなオートコンプリートサークルが削除されるため、正しいパスとして確認されます。

何が問題になっているのか、そうでない場合は、私が調査するために何ができるのかについての考えはありますか?

さらに、解決策を検索したところ、drupal update: http://drupal.org/node/1901518 これが原因である可能性がありますか? 、それを修正するにはどうすればよいですか?

ありがとう

1
Carl

あなたが言うことはそれが問題であるこの行だと示唆しています:

 if ($_SERVER['HTTP_REFERER'] == url('user/register', array('absolute' => TRUE))){

したがって、リファラーURLとurl()関数によって生成されたURLの間には、おそらくいくつかの違いがあるでしょう。その上に行を追加して、ウォッチドッグを使用して2つの値を記録することができます。これにより、コード内のそのポイントに到達していることが確認され、問題の診断に役立ちます。

1

問題の原因はreCAPTCHAモジュールにあることがわかりました。これを解決するには、構成ページでAJAX APIを無効にします。

0
Carl