модификация автозаполнения поля город
#1
16 января 2013 в 16:23
Доброго времени! Тут: ПРИМЕР реализовано автозаполнение поля город. Нужно сделать тоже самое для поля профессия. т.е на странице регистрации будут несколько полей, из них поля город и профессия должны обладать автозаполнением по примеру выше. Как это сделать?
#2
16 января 2013 в 16:34
Как это сделать?
очевидно же что
по примеру выше
city на proff не поменять?
#3
16 января 2013 в 21:43
Пробовал, не работает! Я так понимаю, нужно править обработчик PHP, который делает выборку по базе и возвращает ответ в javascript. Как правильно его составить?
Сегодня в 13:46
#4
16 января 2013 в 22:23
ну так внутри файла city.php тоже поменяли? а запрос в базу не заменяли а добавили в него поле?
#5
17 января 2013 в 09:47
Изменил запрос на этот:
и в файле autocomplete.js добавил такие строки:
и вот тут:
работает все отлично! Но возникли проблемы с добавлением автозаполнения поля в профиле. В файле /components/users/frontend.php вставляю
не сохраняются изменения и выпадает ошибка: Выберите профессию из списка.
<?php include(PATH.'/core/cms.php'); $inCore = cmsCore::getInstance(); $inDB = cmsDatabase::getInstance(); $professia = $inCore->request('query', 'str'); //Идентификатор главной страны $id_main_country = 1; $sql = "SELECT id, professia, COUNT( id ) AS popule FROM cms_user_professions WHERE professia LIKE '{$professia}%' GROUP BY professia ORDER BY popule DESC , professia ASC"; $res = $inDB->query($sql); if ($inDB->num_rows($res)) { while($ress = $inDB->fetch_assoc($res)){ $suggestions[] = ($ress['popule'] > 10 ? '<b>' : '').$ress['professia']; } }
select: function (i) { var selectedValue, f; var selectedValue1, f; selectedValue = this.data[i].city; selectedValue1 = this.data[i].professia; if (selectedValue) { this.el.val(selectedValue); if (this.options.autoSubmit) { f = this.el.parents('form'); if (f.length > 0) { f.get(0).submit(); } } this.ignoreValueChange = true; this.hide(); this.onSelect(i); }
adjustScroll: function (i) { var activeItem, offsetTop, upperBound, lowerBound; activeItem = this.activate(i); offsetTop = activeItem.offsetTop; upperBound = this.container.scrollTop(); lowerBound = upperBound + this.options.maxHeight - 25; if (offsetTop < upperBound) { this.container.scrollTop(offsetTop); } else if (offsetTop > lowerBound) { this.container.scrollTop(offsetTop - this.options.maxHeight + 25); } this.el.val(this.getValue(this.data[i].city)); this.el.val(this.getValue(this.data[i].professia)); },
$city_int = cmsCore::request('city_int', 'int', 0); if(!$city_int){cmsCore::addSessionMessage('Город необходимо выбрать из вариантов!', 'error');$errors = true;} else{ $sql = "SELECT s.id_city, s.id_region, s.id_country, s.city_name_ru, r.region_name_ru, c.country_name_ru FROM cms_geo_cities s LEFT JOIN cms_geo_countries c ON s.id_country = c.id_country LEFT JOIN cms_geo_regions r ON s.id_region = r.id_region WHERE s.id_city={$city_int}"; $geo = $inDB->query($sql); if($inDB->num_rows($geo)){ $geo = $inDB->fetch_assoc($geo); $city= $geo['city_name_ru']; $geo = cmsCore::arrayToYaml($geo); }else{cmsCore::addSessionMessage('Город необходимо выбрать из вариантов!', 'error');$errors = true;} }
#6
17 января 2013 в 10:58
Ошибся выше. Вставляю вот это:
не сохраняются изменения и выпадает ошибка: Профессию необходимо выбрать из вариантов!
//Автозаполнение поля профессия $item['professia_int'] = cmsCore::request('professia_int', 'int', 0); $item['professia'] = cmsCore::request('professia', 'str', ''); if(!$item['city_int']){cmsCore::addSessionMessage('Профессию необходимо выбрать из вариантов!', 'error');$errors = true;} else{ $sql = "SELECT id, professia FROM cms_user_profession WHERE id={$item['professia_int']}"; $professia = $inDB->query($sql); if($inDB->num_rows($professia)){ $professia = $inDB->fetch_assoc($professia); $item['professia'] = $professia['professia']; $item['geo'] = cmsCore::arrayToYaml($city); }else{cmsCore::addSessionMessage('Профессию необходимо выбрать из вариантов!', 'error');$errors = true;} }
#7
17 января 2013 в 16:26
4 строка if(!$item['city_int'])
#8
17 января 2013 в 16:42
Тоже не работает
потому что тут бред написан :)
$professia = $inDB->fetch_assoc($professia);
$item['professia'] = $professia['professia'];
$item['geo'] = cmsCore::arrayToYaml($city);
вы отправляете массив в переменную сити
и причем тут гео?
$professia = $inDB->fetch_assoc($professia);
$item['professia'] = $professia['professia'];
$item['geo'] = cmsCore::arrayToYaml($city);
вы отправляете массив в переменную сити
и причем тут гео?
#10
17 января 2013 в 18:41
picaboo, Ну подскажи, как правильно все это организовать! Я готов заплатить за потраченное время!
#11
17 января 2013 в 18:43
Сделал вот так:
результат тот же
$item['professia_int'] = cmsCore::request('professia_int', 'int', 0); $item['professia'] = cmsCore::request('professia', 'str', ''); if(!$item['professia_int']){cmsCore::addSessionMessage('Профессию необходимо выбрать из вариантов!', 'error');$errors = true;} else{ $sql = "SELECT id, professia FROM cms_user_profession WHERE id={$item['professia_int']}"; $professia = $inDB->query($sql); if($inDB->num_rows($professia)){ $professia = $inDB->fetch_assoc($professia); $item['professia'] = $professia['professia']; $item['professia'] = cmsCore::arrayToYaml($professia); }else{cmsCore::addSessionMessage('Профессию необходимо выбрать из вариантов!', 'error');$errors = true;} }
#12
17 января 2013 в 19:23
весь код заново исправляйте. у вас почти в каждом примере js сити есть.
#13
17 января 2013 в 20:25
Все исправил. На странице регистрации все работает. Как все это засунуть в профиль? Например, что изменить тут:
$city_int = cmsCore::request('city_int', 'int', 0); if(!$city_int){cmsCore::addSessionMessage('Город необходимо выбрать из вариантов!', 'error');$errors = true;} else{ $sql = "SELECT s.id_city, s.id_region, s.id_country, s.city_name_ru, r.region_name_ru, c.country_name_ru FROM cms_geo_cities s LEFT JOIN cms_geo_countries c ON s.id_country = c.id_country LEFT JOIN cms_geo_regions r ON s.id_region = r.id_region WHERE s.id_city={$city_int}"; $geo = $inDB->query($sql); if($inDB->num_rows($geo)){ $geo = $inDB->fetch_assoc($geo); $city= $geo['city_name_ru']; $geo = cmsCore::arrayToYaml($geo); }else{cmsCore::addSessionMessage('Город необходимо выбрать из вариантов!', 'error');$errors = true;} }
#14
18 января 2013 в 12:53
Я заменил все city, но что делать с
$geo = cmsCore::arrayToYaml($geo);
$geo = cmsCore::arrayToYaml($geo);
а зачем вам arrayToYaml? у вас же профессия = одно слово в поле. или можно выбирать несколько профессий?
посмотрите лучше в сторону штатного jquery.autocomplete.min.js в инстанте.
Как работает можно увидеть в USERS, поиск по полю Город.
В том решении автокомплита который вы начали переделывать для вашего варианта, много лишнего.