Реализация выбора региона/страны пользователем на сайте

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Реализация выбора региона/страны пользователем на сайте
Простая
от 1 рабочего дня до 3 рабочих дней
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    874
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    851

Реализация выбора региона/страны пользователем на сайте

Выбор страны или региона — элемент, который встречается в регистрационных формах, настройках профиля, фильтрах каталога и лендингах с локализованным контентом. Реализация зависит от количества вариантов и сценария использования.

Варианты реализации

<select> с полным списком стран — самый простой способ. Достаточно для форм, где геовыбор не критичен. Недостаток: 200 стран в обычном дропдауне неудобно листать.

Searchable dropdown — поле ввода + фильтруемый список. Библиотеки: react-select, downshift, headlessui Combobox. Оптимально для большинства случаев.

Флаги + код страны — для телефонных форм, где пользователь выбирает код (+7, +380). Библиотека react-phone-number-input решает эту задачу в комплексе.

Карта — для выбора региона внутри страны. Реализуется через SVG-карту или Leaflet/Mapbox с кликабельными полигонами.

Searchable dropdown на примере React

import { Combobox } from '@headlessui/react';
import { useState } from 'react';
import { countries } from './countries-data'; // ISO 3166-1 список

function CountrySelector({ value, onChange }) {
  const [query, setQuery] = useState('');

  const filtered = query.length < 1
    ? countries
    : countries.filter(c =>
        c.name.toLowerCase().includes(query.toLowerCase()) ||
        c.code.toLowerCase().includes(query.toLowerCase())
      );

  return (
    <Combobox value={value} onChange={onChange}>
      <Combobox.Input
        onChange={e => setQuery(e.target.value)}
        displayValue={c => c?.name ?? ''}
        placeholder="Выберите страну"
        className="country-input"
      />
      <Combobox.Options className="country-dropdown">
        {filtered.length === 0 && query.length > 0 ? (
          <div className="country-empty">Страна не найдена</div>
        ) : (
          filtered.map(country => (
            <Combobox.Option key={country.code} value={country}>
              {({ active }) => (
                <div className={`country-option ${active ? 'active' : ''}`}>
                  <img
                    src={`/flags/${country.code.toLowerCase()}.svg`}
                    width={20}
                    alt=""
                    aria-hidden
                  />
                  {country.name}
                  <span className="country-code">{country.code}</span>
                </div>
              )}
            </Combobox.Option>
          ))
        )}
      </Combobox.Options>
    </Combobox>
  );
}

Данные: откуда брать список стран

  • Статический JSON — файл с ISO 3166-1 (код, название на нужных языках, dial-код). Пакет world-countries (~180 KB) или собственный облегчённый список
  • REST Countries APIhttps://restcountries.com/v3.1/all — актуальные данные, но внешняя зависимость
  • База на сервере — таблица countries с переводами, фильтрация по активным регионам поставки

Автоопределение по IP

Предустанавливать страну по геолокации — улучшает UX, но требует бэкенда:

// Laravel + Torann/GeoIP или MaxMind
public function detectCountry(Request $request): JsonResponse
{
    $geo = geoip()->getLocation($request->ip());
    return response()->json([
        'country_code' => $geo->iso_code,
        'country_name' => $geo->country,
    ]);
}

На фронте:

useEffect(() => {
  fetch('/api/geo/country')
    .then(r => r.json())
    .then(geo => {
      const detected = countries.find(c => c.code === geo.country_code);
      if (detected && !value) onChange(detected); // только если не выбрано вручную
    });
}, []);

Сроки

Searchable dropdown с флагами, поиском и автоопределением по IP — 1–2 рабочих дня.