読んでくれてありがとう。
組織名を含むデータベーステーブルがあります。ユーザーがウェブサイトに登録すると、既存の組織に接続する方法として、私が追加したテキストフィールドを使用します。これは、既存の組織名でオートコンプリートします。これは以前は正常に機能していましたが、おそらく更新の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 これが原因である可能性がありますか? 、それを修正するにはどうすればよいですか?
ありがとう
あなたが言うことはそれが問題であるこの行だと示唆しています:
if ($_SERVER['HTTP_REFERER'] == url('user/register', array('absolute' => TRUE))){
したがって、リファラーURLとurl()関数によって生成されたURLの間には、おそらくいくつかの違いがあるでしょう。その上に行を追加して、ウォッチドッグを使用して2つの値を記録することができます。これにより、コード内のそのポイントに到達していることが確認され、問題の診断に役立ちます。
問題の原因はreCAPTCHAモジュールにあることがわかりました。これを解決するには、構成ページでAJAX APIを無効にします。