Красивое решение выбора города при Регистрации

1586
У нас уже было Красивое решение выбора города в профиле, теперь оно у нас будет и при регистрации:

1. Качаем Архив с базой от Madmax /users/files/download613.html;
2. Распаковываем архив в корень своего сайта и через phpmyadmin вставить дамп базы в свою базу данных сайта;
3. Открываем файл /templates/ВАШ_ШАБЛОН/components/com_registration.tpl и добавляем туда вверху запись:
Код PHP:
{add_js file='components/users/js/city.js'}
{literal}
	<style>
            .region, .city {display:none}
            strong {display:block;width:100px}
            div {margin-bottom:3px}
	</style>
{/literal}
В любое желаемое место, в этом же файле, этот код:

Код PHP:
<tr>
	<td valign="top" class="">
		<div><strong>Город</strong></div>
		<div><small>Выберите место своего рождения или пребывания</small></div>
	</td>
	<td valign="top" class="">
		<div>
			<strong>Страна:</strong>
			<select name="country" id="country" type=hidden>
				<option value="" selected>Выберите страну</option>
			</select>
		</div>
		<div class="region">
			<strong>Регион:</strong>
			<select name="region" id="region">
				<option value="">Выберите регион</option>
			</select>
		</div>
		<div class="city">
			<strong>Город:</strong>
			<select name="city" id="city">
				<option value="">Выберите город</option>
			</select>
		</div>
	</td>
</tr>
4. Открываем файл /components/registration/frontend.php находим строчку:
Код PHP:
// Проверяем каптчу
$code = $inCore->request('code', 'str');
и выше нее добавляем:
Код PHP:
$city = $inCore->request('city', 'str');
в результате получаем:
Код PHP:
$city = $inCore->request('city', 'str');
// Проверяем каптчу
$code = $inCore->request('code', 'str');
Потом находим запись:
Код PHP:
if ($new_user_id){

$usr = $inDB->fetch_assoc($result);
$sql = "INSERT INTO cms_user_profiles (user_id, city, description, showmail, showbirth, showicq, karma, imageurl, allow_who)
VALUES (".$new_user_id.", '', '', '0', '0', '1', '0', '', 'all')";
$inDB->query($sql) ;

$user_array['id'] = $new_user_id;
cmsCore::callEvent('USER_REGISTER', $user_array);

}
И заменяем ее на:
Код PHP:
if ($new_user_id){

$usr = $inDB->fetch_assoc($result);
$sql = "INSERT INTO cms_user_profiles (user_id, city, description, showmail, showbirth, showicq, karma, imageurl, allow_who)
VALUES (".$new_user_id.", '$city', '', '0', '0', '1', '0', '', 'all')";
$inDB->query($sql) ;

$user_array['id'] = $new_user_id;
cmsCore::callEvent('USER_REGISTER', $user_array);

}
5. Кто хочет сделать выбор города обязательным, в файле /components/registration/frontend.php после этого кода:
Код PHP:
$city = $inCore->request('city', 'str');
добавляем этот:
Код PHP:
if(!$city) {
  $msg  .= 'Не указан <b>Город</b>!
';
}
.
Вот и все!!! Все благодарности за базу и идею к Madmaxу.
Кому нужно вот Демо
Кнопки Добавить в друзья и Отправить сообщение в Списке Пользователей - Хак
Комментарии (50)
Blit 9 сентября 2011 в 16:46 0
Спасибо, уже собирался это делать.
Эдька 9 сентября 2011 в 21:01 0
посмотрел пример! вот хотелось когда выбрал страну, далее ждешь пока загрузится область что бы писал "подождите" а там "выберите"
Эдька 9 сентября 2011 в 21:56 0
http://vpobede.com/registration проблема кажись с кодировкой
Patriot 10 сентября 2011 в 03:40 0
Такая же проблема наблюдалась и у меня...Кодирнул в UTF-8 и было мне счастье! )
DS Soft 10 сентября 2011 в 09:39 +1
При импорте в базу выбери кодировку cp1251
Эдька 10 сентября 2011 в 12:24 0
у меня нет такой кодировки  при загрузке((
Blit 10 сентября 2011 в 12:31 0
Вставляй не через окно "sql" а через "Импорт"
bawarec 10 сентября 2011 в 17:47 0
у тебя кстати верстка меню немного поползла, да собственно говоря как и у меня после всего вышеперечисленного
bawarec 10 сентября 2011 в 17:33 0
нет выбора страны и немного сползает верстка шаблона
http://www.bmwts.ru/registration
bawarec 10 сентября 2011 в 18:21 0
опытным путем выяснил что верстка сползает при выполнении 3го пункта данной инструкции, помогите пожалуйста исправить этот баг
DS Soft 10 сентября 2011 в 19:19 +1
В 3ем пункте обязательно подключить city.js и стиль
Код PHP:
.region, .city {display:none}
а это под свой шаблон меняйте или удалите:
Код PHP:
strong {display:block;width:50px}
div {margin-bottom:3px}
У вас на сайте http://www.bmwts.ru/registration не подключен city.js
bawarec 10 сентября 2011 в 19:38 0
Спасибо, с версткой разобрался а вот со скриптом остаются вопросы ...
В сотый раз перепроверил com_registration.tpl - все верно, но все равно не работает. Игрался с правами на city.js эффект тот же
DS Soft 10 сентября 2011 в 19:44 +1
Проверьте какой у вас в БД префикс стоит у инстант CMS. И переименуйте таблицы cms_Geo_Cities   cms_geo_countries   cms_geo_regions    вместо cms_ поставьте свой префикс
flighteasy 11 сентября 2011 в 19:52 0
Видимо теже проблемы! При utf8 вместо городов и стран вопросительные знаки. http://avpopov.ru/registration
а 1251 ВЫДАЕТ ОШИБКУ
flighteasy 11 сентября 2011 в 19:52 0
EXID 12 сентября 2011 в 01:06 0
Спасибо, классно!
russianru 12 сентября 2011 в 19:03 0
у меня фа;л в базу совсем несодится ошибку пишит
russianru 12 сентября 2011 в 19:07 0
Ошибка
Алфей 13 сентября 2011 в 00:34 0
Спасибо, все работает!!!
Вопрос на засыпку: Кто нибудь может подсказать, как сделать чтобы в профиле отображалось страна и регион!?
Patriot 13 сентября 2011 в 03:05 0
У меня с кодировкой всё в норме, но сейчас заметил другую проблему. Зарегил аккаунт и после регистрации город в профиле не появился... Через настройки профиля город установился, все нормально, а вот при регистрации не хочет он светиться. ) Где копать подскажите плиз?!
DS Soft 13 сентября 2011 в 07:21 0
4й пункт данной инструкции выполнял?
Можешь посмотреть на http://даг05.рф/registration зарегистрируйся и зайди в свой профиль все работает.
Patriot 14 сентября 2011 в 18:44 0
Да,выполнял. Но почему то не работает...
Ingvarruss 21 сентября 2011 в 15:34 0
На 1.8 всё отлично работает, спасибо. Вопрос, можно ли такое сделать в доске объявлений?
Ne OS 22 сентября 2011 в 21:23 0
+++
Установил всё пашет... только вот вопрос:
Как сделать при регистрации выбор города обязательным?
DS Soft 23 сентября 2011 в 13:45 +1
В /components/registration/frontend.php после этого:
Код PHP:
$city = $inCore->request('city', 'str');
Добавить это:
Код PHP:
if(!$city) {
  $msg  .= 'Не указан <b>Город</b>!<br/>';
}
Ilekor 23 сентября 2011 в 13:55 0
Только вошел, что бы дать ответ, а вы опередили
Код PHP:
$city = $inCore->request('city', 'str');
if(!$city){
 $msg .= 'Выбирете ваш город!<br/>';
        }
Ilekor 23 сентября 2011 в 13:59 +1
Что бы добавить звездочки к полям выбора города, откройте /templates/ВАШ_ШАБЛОН/components/com_registration.tpl
Вместо
Код PHP:
<tr>
	<td valign="top" class="">
		<div><strong>Город</strong></div>
		<div><small>Выберите место своего рождения или пребывания</small></div>
	</td>
	<td valign="top" class="">
		<div>
			<strong>Страна:</strong>
			<select name="country" id="country" type=hidden>
				<option value="" selected>Выберите страну</option>
			</select>
		</div>
		<div class="region">
			<strong>Регион:</strong>
			<select name="region" id="region">
				<option value="">Выберите регион</option>
			</select>
		</div>
		<div class="city">
			<strong>Город:</strong>
			<select name="city" id="city">
				<option value="">Выберите город</option>
			</select>
		</div>
	</td>
</tr>
Вставьте

Код PHP:
                <tr>
	<td valign="top" class="">
		<div><strong>Город</strong></div>
		<div><small>Выберите место своего рождения или пребывания</small></div>
	</td>
	<td valign="top" class="">
		<div>
			<strong>Страна:</strong>
			<select name="country" id="country" type=hidden>
				<option value="" selected>Выберите страну</option>
			</select>
            <span class="regstar">*</span>
		</div>
		<div class="region">
			<strong>Регион:</strong>
			<select name="region" id="region">
				<option value="">Выберите регион</option>
			</select>
            <span class="regstar">*</span>
		</div>
		<div class="city">
			<strong>Город:</strong>
			<select name="city" id="city">
				<option value="">Выберите город</option>
			</select>
            <span class="regstar">*</span>
		</div>
	</td>
</tr>
Ne OS 27 сентября 2011 в 03:53 0
Ну DagStudent как всегда в нужное время на нужном месте!
llekor: ты опередил следующий вопрос! ))

++
DenzeL 30 сентября 2011 в 19:24 0
Все сделал по инструкции, Страну выбирает, регион выбирает, а при выборе города, пишет выбрать город и все, а городов не видно.. подскажите где искать плиз.
Leo 1 октября 2011 в 12:27 0
Аналогичная проблема бьюсь уже третий день :)
DenzeL 1 октября 2011 в 12:47 0
У меня такое ощущение что это у всех, зашел на сайт к пареньку по ссылке наверху, http://www.bmwts.ru/registration у него работает, пообщался через личку, говорит тоже самое было, и что заказывал доработку у спеца, дал мне аську.. я туда написал,но пока ни ответа ни привета.. Кто смог исправить молчит как в танке.. Лео может скинемся по 50, и назначим приз тому кто поможет а? :)))
Leo 1 октября 2011 в 12:52 0
да не вопрос, с разработчиком общался в личке,  пришли к выводу, что у меня возможно конфликтует с каким-то скриптом :). дальше дела не пошли :(
DenzeL 2 октября 2011 в 09:21 0
Кто поможет? кому 100 ка нужна?
RooKee 12 ноября 2011 в 01:36 0
логичнее было бы брать город как компонент карты, т.е. автоматически =)
Alex Broun 26 ноября 2011 в 20:24 0
Если в списке кодировок нет cp1251, а utf-8 пишет вместо слов "?????????", то какую кодировку выбрать?
Анатолий 7 декабря 2011 в 09:34 0
версия 1.9, итог внедрения: сделал все по инструкции, регистрация проходит успешно, но в новых пользователях не появляется новый зарегистрированный и при попытке зайти к нему в профиль выдает ошибку 404!!! Вообщем, не пошел этот хак на 1.9 :(
Ingvarruss 25 января 2012 в 09:27 0
Скорее всего вам нужно разблокировать пользователя в админке, поскольку наверное стоит активация по e-mail.
P.S. На 1.9 всё нормально работает.
Rossoman 25 января 2012 в 11:13 0
У меня отлично работает под 1.9
Ссылку кинул в личку
Def 22 февраля 2012 в 22:56 0
а как сделать, чтобы по умолчанию предлагал нужный мне город, т.к сайт больше расчитан на отдельный регион, откуда чаще и регаются?
Patriot 23 февраля 2012 в 02:06 0
Нужно сделать обязательным к заполнению, поле выбор города. Подскажите решение плиз!
Patriot 24 февраля 2012 в 00:57 0
Кто нибудь подскажет?
• Mike • 24 февраля 2012 в 02:52 +1
Patriot 26 февраля 2012 в 20:28 0
• Mike • спасибо! Что то я пропустил в комментах решение.
GarikKR 2 марта 2012 в 23:25 0
После регистрации город в профиле не появился... Через настройки профиля город установился, все нормально, а вот при регистрации не хочет он светиться. ) Где копать подскажите плиз?!
GarikKR 3 марта 2012 в 00:19 0
Все решил проблему
vpugachev 24 марта 2012 в 10:25 0
Спасибо очень нужное решение. Есть несколько вопросов:
1) Как сделать, что бы при неверном заполнении какого-либо поля и последующим сообщением об этом на вновь открывшейся странице регистрации данные о выбранном городе сохранялись.

2) Можно ли рядом с полем выбора города, например под фразой "Выберите место своего рождения или пребывания", разместить несколько городов при нажатии на которые автоматом выбирался этот город?

3) Можно ли выполнить какой то sql-запрос, что бы у уже зарегистрированных пользователей на сайте, у которых не выбран город он изменился на нужный?
Ne OS 27 марта 2012 в 23:36 +1
Пункт 3) было бы неплохо реализовать!
stasis 24 марта 2012 в 15:31 0
Поставил на 1.9... отлично работает
СПАСИБО!
[email protected] 8 июня 2013 в 14:50 0
А вот интерестно на 1,10,1 работать будет ? Ктонибуть пробывал?
Ingvarruss 6 августа 2013 в 22:43 0
У меня практически получилось, только один пункт сделать не смог, в /components/registration/frontend.php этого куска кода нет уже.
if ($new_user_id){

$usr = $inDB->fetch_assoc($result);
$sql = "INSERT INTO cms_user_profiles (user_id, city, description, showmail, showbirth, showicq, karma, imageurl, allow_who)
VALUES (".$new_user_id.", '', '', '0', '0', '1', '0', '', 'all')";
$inDB->query($sql) ;

$user_array['id'] = $new_user_id;
cmsCore::callEvent('USER_REGISTER', $user_array);