Если вам надоело, что ваши юзеры указывают непонятно какие города и страны. Например: «росия»,«Росия»,«рося»,«Расия» и др., т.е. юзеров из одной страны и города найти практически невозможно :( Ответом на решение данного вопроса — является «хак выпадающее меню стран и городов».
UPDATE v.0.2
1. чуток переделал JS + проверил работоспособность на IE6-8,Opera10,FF3.5
2. остался глюк с 500 ошибкой, но это уже глюк библиотеки JsHttpRequest, там у автора написано: «For XML mode, 500 code is okay.» upgrade с версии 0.1 — просто обновить файлы, базу обновлять не надо
За стандарт было взято выпадающее меню с vkontakte.ru, потому что на мой взгляд оно самое интуитивно понятное из аналогичных ему.
Далее пришлось поискать базу городов и стран. После перебора нескольких, остановился на одной(по моему мнению самой большой и аккуратной), которую нашел здесь. Я ее слегка переделал под нужды хака, а именно добавил поле sort для base_country и base_city, это нужно было для того чтобы выводить связку только актуальных городов и стран, а не полный список разом.
Функционал:
1. Выпадающее меню «распространенных стран» и «всех стран».
2. Выпадающее меню «распространенных городов» и «всех городов» относительно страны.
3. Если города нет даже в полном списке городов, человек имеет возможность ввести свой город.
4. Связки «страна»->«распространненые города» существует только для «распространненых стран», информация и порядок вывода взяты с vkontakte.ru. Если выбрана страна из НЕраспространненых, то выводится только первые 10 городов.
Связки я забивал в полу-автоматическом режиме, так что сделал только для частых стран vkontakte.ru, если кому интересно дальше дозабить — you are welcome.
5. Подгрузка стран и городов сделана на ajax'e, чтобы не перегружать страницу.
6. Скрипт вывода и изменения уже зарегестрированных пользователей, которые неправильно указали страну или город.
Инсталяция:
1. Если изменений в сурсе livestreet'a нет, тогда тупо заменяем файлы из архива. Актуально для версии 0.3.1!
2. Восстанавливаем 3 таблицы в БД с livestreet(`base_country`,`base_city`,`base_region`) — на самом деле актуальны только первые две, третью я оставил — может кто-то активировал себе возможность указывания регионов(тогда придется доделать хак).
Я специально не менял структуру таблиц livestreet'a, чтобы в случае чего можно было быстро убрать этот хак, если он не нужен. Да и к тому же серъезные изменения в родных таблицах — это уже нужно что-то большее чем хак ;)
3. Дальше, можете пойти проверить у себя в изменении профиля — все ли правильно работает.
4. Напоследок заходим на скрипт yoursite.com/change_users.php и видим список всех юзеров, которые неправильно указали страну или город(сверка идет уже по восстановленным нами таблицам). При переходе по линку можно поменять страну и город.
Там есть небольшой баг: не выбирается ajax'ом город при сохранении профиля. Так как на ф-ционал это не влияет, я доделывать скрипт не стал. Эстетическая сторона вопроса нас не должна волновать, потому что скрипт будет запущен всего 1 раз вначале установки хака — потом уже юзеры выбирают из актуальных списков.
5. Не забываем удалить файл change_users.php, потому что я не делал там проверку на права администратора.
П.С. Хотел показать какие изменения были сделаны в файлах, но так как размер топика только 15тыщ. знаков, то не хватает :( Основные файлы изменены не сильно, а вот дополнительные мои файлы большие, поэтому пока только через архив(тем более что таблицы городов и стран нужны). Если есть желание посмотреть что добавлено, то все добавления обрамлены '##### [hack] country_list #####'(только мои файлы не имеют обрамления, а имеют данный заголовок в самом начале файла). Пример для linux, как найти все строчки такие:
ага… забыли совсем…
убирали по причине, чтобы спамеры не нашли, а потом начали заниматься развитием проекта и забыли(сегодня скинут 1к руб.)
спасибо, что напомнил
Я обновил, теперь все работает как надо. Правда потом попытался прикрутить «Регионы»… На том и застрял. Теперь страны и регионы работают, а города — нет :)
а что делать если вместо списка стран и городов показываются кракозябры? т.е. кодировка не та…
дамп заливал вот как
открыл пхпмайадмин->sql->вставил в окошко код (который уже был в краказябровой кодировке) и нажал кнопку
Причем в Кирове меня НЕТ, а в Кировской обл. я есть. Поправьте пожалуйста, а то бред получается.
Можете сами в БД подправить и оставить только город Киров, я же все 100+ стран и 18к+ городов — не могу идеально вылизать, к тому же и не должен.
Базу я нашел наиболее точную, но это не означает, что она идеальная.
Еще при редактировании своей записи не показан город для редактирования (только страна)
Если у вас ИЕ8, то как отметил выше тов. olegator — оно и не будет работать, я это подправлю на днях… В случае если баг у вас в другом браузере, прошу уточнить в каком? Все тестилось под ФФ(если в ФФ глюки, тогда прошу уточнить подробнее ваши действия)
1) надо change_users.php запустит и поправить всех «неправильных» юзеров
2) после, когда вы уверены что у вас все юзеры правильные, тогда надо залезть и подправить чуток `prefix_country` и `prefix_city`
например если у вас уже был забит «минск», и вы всех привели к «Минск»(через change_users.php), тогда идете в БД и находите «минск», просто mysql считает что «минск» и «Минск» это одно и тоже, поэтому приравнивает всех к «минск».
Что насчёт стран и городов для англоязычной аудитории? Скажем у меня есть список всех стран на англ языке, но городов нет. вы могли бы сделать аналогичный модуль для сайтов не на русском языке? Спасибо
там чуток надо переделать, а именно вместо `city_name_ru` заменить на `city_name_en` аналогично для country
отдельно делать не буду(разве что 10+ людем не понадобится), потому что это надо уже детально вылизывать… он на то и хак, что там не так много всяких изменений — можно и самому доделать
Почему фаербаг при каждом запросе показывает 500ую ошибку? Приэтом всё нормально выдаётся и работает.
Хотя не совсем. У меня рисунок загрузки не отображается…
ага, был глюк точно — я про него забыл, ну потому что все нормально подгружалось :)
ну… рисунок к аякс запросу отношения никакого не имеет, в смысле что он не подгружается через аякс, а всеголишь идикатор, который уже в шаблоне стоит
я скоро буду смотреть в чем дело, тут народ уже поделился что ИЕ8 и Опера глючит, так что буду доделывать
Теперь работает. Но есть замечания по модулю:
1. файл profile.tpl
исправить
<img src="/templates/skin/new/
на
<img src="{$DIR_STATIC_SKIN}/
2. зачем пользователя вводить в заблуждение целым языковым файлом, который наверняка у всех изменён. В ЛС система автоинклуда файлов а значит в папке language/modules/ создаём папку например city
3. Выбираем страну, выбираем город — всё отлично. Выбираем ручной ввод города, ничего не вводим и выбираем другую любую страну — поле выбора городов уже не появляется а должно :)
спасибо за замечания и баг-тест :)
1) исправил DIR_STATIC_SKIN
2) добавил по вашему совету в отдельный language-dir, глубоко LS не копал — не знал о такой его возможности
3) исправил баг с пропаданием селекта городов, пришлось подправить JS в profile.tpl
4) settings_profile_country_not_selected — добавил тоже
обновил хак, так что можете качать
##### [hack] country_list #####
public function GetCountryList($full,$userCountry=''){
if($full==1) $sql="SELECT * FROM `base_countries` ORDER BY `country_name_ru` ASC";
elseif($full==0) $sql="SELECT * FROM `base_countries` WHERE `sort`>0 OR `country_name_ru`= ? ORDER BY `sort` ASC";
$aReturn=array();
if($aRows=$this->oDb->select($sql,$userCountry))
foreach($aRows as $aRow) $aReturn[]=array("id"=>$aRow['id_country'],"name"=>$aRow['country_name_ru']);
return $aReturn;
}
public function GetCityListByCountry($full,$cid,$ext,$userCity=''){
if($full==0){
$sql="SELECT
`city_name_ru`,`id_country`
FROM
`base_cities`
WHERE
(`id_country`= ?d AND `sort`>0)
{ OR city_name_ru = ? }
ORDER BY `sort` ASC";
$aRows=$this->oDb->select($sql,$cid,($ext==0) ? $userCity : DBSIMPLE_SKIP);
$_arr=array(); foreach($aRows as $a) $_arr[]=$a['city_name_ru']; $_arr=array_unique($_arr); # bug with equal city names
if(sizeof($_arr)<=1){
$sql="SELECT `city_name_ru`,`id_country` FROM `base_cities` WHERE `id_country`= ?d ORDER BY `city_name_ru` ASC LIMIT 10";
$aRows=$this->oDb->select($sql,$cid);
}
}elseif($full==1){
$sql="SELECT `city_name_ru`,`id_country` FROM `base_cities` WHERE `id_country`= ?d ORDER BY `city_name_ru` ASC";
$aRows=$this->oDb->select($sql,$cid);
}
$aReturn=array();
if($aRows) foreach($aRows as $aRow)
if($full==0 && $aRow['id_country']==$cid) $aReturn[]=$aRow['city_name_ru'];
elseif($full==1) $aReturn[]=$aRow['city_name_ru'];
return $aReturn;
}
public function GetCountryNameByCID($cid){
$sql="SELECT `country_name_ru` FROM `base_countries` WHERE `id_country`= ?d LIMIT 1";
$aRow=$this->oDb->selectRow($sql,$cid);
return $aRow['country_name_ru'];
}
##### [hack] country_list #####
вы правы — это безопаснее, но я там у себя в country_list.php делаю проверку на ввод данных — так что тылы прикрыты :)
а если под стандарт все приводить — то ваш вариант конечно правильнее, в след. версии приведу к вашему виду — чтобы из стандарта не выбиваться
но у меня обычно свой стандарт — я первоначально change_users.php сделал полностью через родные ф-ции mysql — мне так было быстрее ) но потом, когда решил выложить хак — привел к стандартным классам, потому что это правильнее для дальнейшей разработки + поддержки различных версии LS
Уважаемый sys!
Подскажите, пожалуйста, сколько будет стоит доработка вашего хака, я имею ввиду прикрутить регионы. Много заплатить не могу, а у самого ничего не вышло. Может кто-то тоже на эту тему мучается и готов поучаствовать в оплате доработки?
сейчас сильно занят, так что — пока доработка не планируется
довел до стабильного состояния, остальное уже на совести opensource-комьюнити
п.с. как время будет — доработаю
Выход четвёртой версии не означает, что предыдущие сразу стали неработоспособными. Мне функционала хватает за глаза. Тем более, что с хаками я справляюсь успешнее, чем с плагинами.
открываем в пхпмуадмин базу данных куда установлен лайвстрит, жмем «SQL» (выполнить запрос к мускл) копируем туда содержимое файла country_list.SQL и жмем «ок»
пытаюсь сделать sql запрос, получаю такую ошибку:
Fatal error: Maximum execution time of 300 seconds exceeded in /usr/local/cpanel/base/3rdparty/phpMyAdmin/libraries/string_mb.lib.php on line 47
и что делать, кто-нибудь подскажет?
Верно, полностью согласен. Считаю нужным встроить в страницу регистрации сайта — example.com/registration/, как вот тут startuppoint.ru/registration и без возможности добавления собственного варианта.
92 комментария
спасибо за работу.
убирали по причине, чтобы спамеры не нашли, а потом начали заниматься развитием проекта и забыли(сегодня скинут 1к руб.)
спасибо, что напомнил
если можно, конкретные подробные действия при которых возникает глюк
дамп заливал вот как
открыл пхпмайадмин->sql->вставил в окошко код (который уже был в краказябровой кодировке) и нажал кнопку
Редактирую свой профиль (ранее не указано место проживания)
Живу в Кирове
Выбираю «Россия», далее в полном списке нахожу свой город, который указан так «Киров (Кировская обл.)»
Выбираю — жму «сохранить»
Захожу в список пользователей и вижу в облаке 2 новых региона — Киров и Киров (Кировская обл.)
Причем в Кирове меня НЕТ, а в Кировской обл. я есть. Поправьте пожалуйста, а то бред получается.
Еще при редактировании своей записи не показан город для редактирования (только страна)
Можете сами в БД подправить и оставить только город Киров, я же все 100+ стран и 18к+ городов — не могу идеально вылизать, к тому же и не должен.
Базу я нашел наиболее точную, но это не означает, что она идеальная.
Если у вас ИЕ8, то как отметил выше тов. olegator — оно и не будет работать, я это подправлю на днях… В случае если баг у вас в другом браузере, прошу уточнить в каком? Все тестилось под ФФ(если в ФФ глюки, тогда прошу уточнить подробнее ваши действия)
По поводу ИЕ-8 го… нет, у меня не ИЕ, а Опера 10-й версии. Это в ней такое дело
отпишусь здесь и версию обновлю, так что мониторьте
2) после, когда вы уверены что у вас все юзеры правильные, тогда надо залезть и подправить чуток `prefix_country` и `prefix_city`
например если у вас уже был забит «минск», и вы всех привели к «Минск»(через change_users.php), тогда идете в БД и находите «минск», просто mysql считает что «минск» и «Минск» это одно и тоже, поэтому приравнивает всех к «минск».
отдельно делать не буду(разве что 10+ людем не понадобится), потому что это надо уже детально вылизывать… он на то и хак, что там не так много всяких изменений — можно и самому доделать
Хотя не совсем. У меня рисунок загрузки не отображается…
ну… рисунок к аякс запросу отношения никакого не имеет, в смысле что он не подгружается через аякс, а всеголишь идикатор, который уже в шаблоне стоит
я скоро буду смотреть в чем дело, тут народ уже поделился что ИЕ8 и Опера глючит, так что буду доделывать
+ проверил сразу в ИЕ7 и Опера10
1. файл profile.tpl
исправить
на
2. зачем пользователя вводить в заблуждение целым языковым файлом, который наверняка у всех изменён. В ЛС система автоинклуда файлов а значит в папке language/modules/ создаём папку например city
в ней файл russian.php с содержимым:
разве так не проще? :)
3. Выбираем страну, выбираем город — всё отлично. Выбираем ручной ввод города, ничего не вводим и выбираем другую любую страну — поле выбора городов уже не появляется а должно :)
1) исправил DIR_STATIC_SKIN
2) добавил по вашему совету в отдельный language-dir, глубоко LS не копал — не знал о такой его возможности
3) исправил баг с пропаданием селекта городов, пришлось подправить JS в profile.tpl
4) settings_profile_country_not_selected — добавил тоже
обновил хак, так что можете качать
есть а в текстовке его нет :)
Вот так я думаю будет лучше…
а если под стандарт все приводить — то ваш вариант конечно правильнее, в след. версии приведу к вашему виду — чтобы из стандарта не выбиваться
но у меня обычно свой стандарт — я первоначально change_users.php сделал полностью через родные ф-ции mysql — мне так было быстрее ) но потом, когда решил выложить хак — привел к стандартным классам, потому что это правильнее для дальнейшей разработки + поддержки различных версии LS
Подскажите, пожалуйста, сколько будет стоит доработка вашего хака, я имею ввиду прикрутить регионы. Много заплатить не могу, а у самого ничего не вышло. Может кто-то тоже на эту тему мучается и готов поучаствовать в оплате доработки?
довел до стабильного состояния, остальное уже на совести opensource-комьюнити
п.с. как время будет — доработаю
Как это можно сделать?
Может, в отдельную тему вынести?
в profile.tpl
не отмечен метками [hack] авторский блок
будьте внимательны
его тоже надо перенести в ваш темплейт
Fatal error: Maximum execution time of 300 seconds exceeded in /usr/local/cpanel/base/3rdparty/phpMyAdmin/libraries/string_mb.lib.php on line 47
и что делать, кто-нибудь подскажет?
Какой-то код, зашифрованный, чем-то вроде зенда… опасно
непонятно, зачем они в архиве
А вот при выборе стран, города не подгружаются, при запросе к файлу
Ответ приходит такой: