Drupal自定义表单和自动完成问题

时间:2013-08-19 12:16:33

标签: autocomplete drupal-7 drupal-modules drupal-theming drupal-forms

我设法让它发挥作用。但结果仍然不是自动完成。

立即发布我的最新代码,

文本域代码

$form['town'] = array(
'#type' => 'textfield',
'#required' => TRUE,
'#autocomplete_path' => 'hfind/town/autocomplete',
);

菜单功能代码

function hfind_menu() {
  $items = array();
  $items['hfind/town/autocomplete'] = array (
    'title' => 'Autocomplete for cities',
    'page callback' => 'hfind_town_autocomplete',
    'access arguments' => array('use autocomplete'),
    'type' => MENU_CALLBACK
   );
return $items;
}

回调函数代码

function hfind_town_autocomplete($string){
  $matches = array();
  $result = db_select('towns', 't')
    ->fields('t', array('town_name'))
    ->condition('town_name', '%' . db_like($string) . '%', 'LIKE')
    ->execute();
  foreach ($result as $row) {
    $matches[$row->city] = check_plain($row->city);
  }
  drupal_json_output($matches);
}

我希望这可能是最后的编辑。

目前的情况是,自动完成功能正常工作

网址为hfind / town / autocomplete / mtw

但它无法从数据库中找到任何数据。我找到了原因,无法修复它。 这是因为在我上面添加的最后一个函数中,$ string需要是'搜索查询',但它总是将数据库查询为'autocomplete'。我的意思是$ string变量总是具有值'autocomplete'而不是用户输入的值。

另一个问题是,即使在向所有类型的用户提供访问表单上的搜索自动填充功能的权限之后,访客用户也无法使用该功能。

请有人帮助我..

1 个答案:

答案 0 :(得分:0)

`drupal_json_output()` instead of `drupal_to_js` and remove `print` .
<code>
hook_menu() {
$items['cnetusers/autocomplete'] = array(
    'title' => 'Auto complete path',
    'page callback' => 'cnetusers_employees_autocomplete',
    'page arguments' => array(2, 3, 4, 5),
    'access arguments' => array('access user profiles'),
    'type' => MENU_CALLBACK,
  );
return $item;
}
// my autocomplete function is like this
function cnetusers_employees_autocomplete() {
  // write your sql query
    $matches["$record->ename $record->elname [id: $record->uid]"] = $value;
  }
  if (empty($matches)) {
    $matches[''] = t('No matching records found.');
  }
  drupal_json_output($matches);
}

$form['disc_info']['approval'] = array(
      '#type' => 'textfield',
      '#title' => t('Approval By'),
      '#autocomplete_path' => 'cnetusers/autocomplete',
    );
</code>