@kabashowlab

Как реализовать определение городов пользователя?

Доброго времени суток.
Время от времени делаю сайты на Битриксе.
Но никогда не делал определения магазина, где нужно определить город пользователя и показать ему цены,
для его города и товар тоже который есть у него в городе. У меня есть созданные города, есть разделенный товар по городам и есть разные цены. Теперь вопрос, как определить координаты ( геолокация не главная проблема) и показать (!)
товары из нужного города. Если есть подсказки или конкретные примеры или же способ реализации, или же где почитать чтобы разобраться, буду благодарен.
  • Вопрос задан
  • 2214 просмотров
Решения вопроса 1
Пригласить эксперта
Ответы на вопрос 2
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
https://sypexgeo.net/ru/
Бесплатной версии хватит.
Ответ написан
Всего 3 строчки кода:
<?php
require $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php';// подключаем пролог Bitrix
require_once($_SERVER["DOCUMENT_ROOT"] . "/ADRES_DO_CLASSA_OTNOSITELNO_KORNYA_SAITA/nikolaevevgeIpGeo.php");// подключаем класс библиотеки
var_dump(nikolaevevgeIpGeo::getInfoByIp($_SERVER["REMOTE_ADDR"]));// получаем var_dump массива в результате работы библиотеки по определению географии клиента по IP-адресу

Сам класс библиотеки доступен по ссылке blog.ivru.net/?id=82

Установка библиотеки:

- в первом листинге(по указанной выше ссылке) информация как осуществляется получение данных от удалённого сервера о географии IP адресов;
- второй листинг - SQL код для создания таблицы в базе данных битрикс, куда будет сохраняться кеш для IP адресов по которым осуществлялся запрос к удалённому серверу, чтобы не выполнять повторных удалённых соединений, а так же для снижения времени определения;
- третий листинг - это сам класс библиотеки, его код нужно сохранить например в файл nikolaevevgeIpGeo.php и подключить в первой строке кода который я привёл в своём ответе.

Описание работы класса библиотеки:

Библиотека достаточно простая. Содержит методы для преобразования IP адресов в целое число без точек и наоборот, а так же методы поиска по кешу в локальной базе данных, сохранению новых данных кеш, и метод для запроса информации с сервера где хранится база данных по адресам.

Информация о географии определённая по одному IP адресу в рамках единой PHP-сессии, не создаёт повторных обращений к кешу базы данных и удалённому серверу, за счёт сохранения информации о IP-адресе в статической переменной класса библиотеки, то есть если информация о IP есть в указанном массиве запросы к удалённому серверу или базе данных выполняться не будут. Такой подход работает даже если Вы будите использовать определение из разных модулей Bitrix.

Настройки библиотеки(не обязательно):

В классе библиотеки есть такие строчки:
// [НАЧАЛО] !! Настройки !!
static public $timeToUpdate = 1728000;// Время в секундах через которое записи о IP-адресах в базе данных считаются устаревшими(1728000 = 20 дней).
static public $tableName = "useripdata";// Имя таблицы в базе данных
// [КОНЕЦ] !! Настройки !!
В первой переменной Вы можете задать время хранения кеша с информацией о IP адресе, по умолчанию 20 дней.
В второй переменной задаётся имя таблицы в базе данных которое Вы хотите использовать для хранения кеша с гео-информацией о IP-адресе(а если точнее о стеке IP-адресов), если Вы будите использовать отличное от useripdata, то не забудте поменять название таблицы при создании в базе данных а именно в строчке CREATE TABLE IF NOT EXISTS `useripdata` (

Скрины с примерами кода и демонстрацией результата:

5d8b6d09186ea243230798.jpeg
5d8b6d113549f347192529.jpeg
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы