Создание модуля с автозаполнением и принятием нескольких значений в текстовом поле
Я создаю свою собственную форму в своем модуле, используя API формы.
Как ввести несколько значений в текстовое поле ниже, чтобы оно было автоматически заполнено и предложено (например, разделено запятыми)?
Прямо сейчас все, что находится в поле текстового поля, воспринимается как одна большая строка.
$form['keywords'] = array(
'#type' => 'textfield',
'#title' => t('Keywords'),
'#size' => '40',
'#multiple' => TRUE,
'#autocomplete_path' => 'papers_pub_search/keywords_autocomplete'
);
function _autosearch($string) {
$query = "SELECT name FROM users WHERE name LIKE :name";
$result = db_query($query, array(':name'=> '%' . db_like($string) . '%'));
foreach($result as $row) {
$match[$row->name] = check_plain($row->name);
}
drupal_json_output($match);
}
4
Author: kiamlaluno, 2012-11-21
1 answers
Вы можете использовать следующий код.
function _autosearch($string) {
$matches = array();
if ($string) {
$items = array_map('trim', explode(',', $string));
$last_item = array_pop($items);
$prefix = implode(', ', $items);
$result = db_select('users')->fields('users', array('name'))->condition('name', '%' . db_like($last_item) . '%', 'LIKE')->range(0, 10)->execute();
foreach ($result as $user) {
$value = !empty($prefix) ? $prefix . ', ' . $user->name : $user->name;
$matches[$value] = check_plain($value);
}
}
drupal_json_output($matches);
}
Вот результат.
Если вы хотите избежать того, чтобы имя пользователя можно было использовать более одного раза, то вы можете использовать следующий код.
function _autosearch($string = '') {
$matches = array();
if ($string) {
$items = array_map('trim', explode(',', $string));
$last_item = array_pop($items);
$prefix = implode(', ', $items);
$result = db_select('users')->fields('users', array('name'))->condition('name', '%' . db_like($last_item) . '%', 'LIKE')->range(0, 10)->execute();
foreach ($result as $user) {
if (!in_array($user->name, $items)) {
$value = !empty($prefix) ? $prefix . ', ' . $user->name : $user->name;
$matches[$value] = check_plain($value);
}
}
}
drupal_json_output($matches);
}
13
Author: kiamlaluno, 2012-11-22 01:36:21