К содержанию

[GeoLocation] - геолокации пользователя. (1.0.3)

[GeoLocation] — компонент реализует функционал геолокации. Используется библиотека SxGeo.
Изменения:
— доработан функционал выбора по умолчанию
— добавлены поля «ресурс» и «изображение»
— добавлена возможность форматирования данных
— добавлена работа c INLINE чанками

выбор по умолчанию
в чанк tpl.gl.modal добавлен вызов значения по умолчанию
<ul class="gl-default-list" style="display: none;">
[[!gl.location?
	&class=`[[+class]]`
        &where=`{"name_ru":"[[+gl.current.city.name_ru]]"}`
]]
</ul>
вы можете как и прежде использовать для подтверждения значение по умолчанию, а можете установить реальное местоположение пользователя.

поля «ресурс» и «изображение»
Добавлены поля «ресурс» и «изображение»

так же в дефолтный js добавлен переход на страницу ресурса при выборе локации, если ресурс не установлен то страничка просто перезагружается как и прежде.
$(document).bind('gl_select', function(e, data, response) {
	$.colorbox.close();
        if (response.object.current.data['resource_url'] != '') {
        	document.location.href = response.object.current.data['resource_url'];
        }
        else {
                location.reload();
        }
});

возможность форматирования данных
Добавлен класс Format
по умолчанию данные пропускаются через processData, если существует метод обработки для данного ключа массива то данные пропускаются через него.

в качестве примера добавлено поле resource_url
public function formatResourceUrl($resource = 0)
{
	$url = '';
	$args = array();
	if (!empty($resource)) {
		$url = $this->modx->makeUrl($resource, '', $args, 'full', array('xhtml_urls' => false));
	}
	return $url;
}

вывод всех городов России
С помощью pdoResources
[[!pdoResources?
	&class=`glCity`
	&leftJoin=`{
		"glRegion": {
			"class": "glRegion",
			"on": "glRegion.id = glCity.region_id"
		}
	}`
	&select=`{
		"glCity": "*",
		"glRegion": "country"
	}`
	&showLog=`1`
	&limit=`0`
	&sortby=`glCity.id`
	&sortdir=`ASC`
	&where=`{
		"glRegion.country":"RU"
	}`
	&tpl=`@INLINE [[+country]]-[[+name_ru]]
`
]]

обновление пакета
Сей скорое обновление пакета появилось благодаря донату, за что вам спасибо!
пример работы как и прежде можно посмотреть тут — location.vgrish.ru/index.php?id=7
Код на github, создавайте isuue
Всем спасибо!
Володя
Володя
12 декабря 2015, 08:23
modx.pro
9 152
Поблагодарить автора Отправить деньги
Реклама

Комментарии: 53

Адиль
Адиль Старожил
12 декабря 2015, 20:02
А возможен ли вариант, чтоб форма выбора города не всплывала на экран, а была просто форма в которой можно выбрать город. Я знаю что можно но в Ява скрипте не так силен. Помогите кто чем может
    Володя
    Володя Эксперт
    12 декабря 2015, 20:32
    да вполне можно.
    location.vgrish.ru/index.php?id=9

    пример вызова
    [[!gl.modal?
    	&tpl=`_tpl.gl.modal`
    	&modalShow=`0`
    	&frontendJs=`[[+assetsUrl]]js/web/_default.js`
    ]]

    чанк _tpl.gl.modal
    <div class="gl-modal">
        <div class="gl-change-select" >
            <h5>Выберите Ваш город</h5>
            
            <p class="desc">
                Введите название вашего города
            </p>
            
            <div class="gl-change-input-block">
                <select name="location" value="" style="width: 100%" class="select2 " multiple>
                </select>
            </div>
    
            <ul class="gl-change-list">
                [[!gl.location?
                    &class=`[[+class]]`
                ]]
            </ul>
            
        </div>
    
    </div>

    _default.js
    добавить
    $(document).ready(function() {
         gl.location.input.load('location');
                
         if (glConfig.modalShow) {
             gl.location.modal();
         }
    });
      Павел
      Павел Проверенный
      01 июня 2016, 15:03
      Добрый день, прошу прощения, но почему-то скрипт не работает
    Артем
    Артем Старожил
    12 декабря 2015, 21:36
    Какая-то беда с кодировкой в названии ресурсов

      Лев Вербицкий
      Лев Вербицкий Проверенный
      12 декабря 2015, 22:03
      Полагаю, у вас проблема с бдшкой, а именно с ее кодировкой.
        Артем
        Артем Старожил
        13 декабря 2015, 07:26
        Еще вызвал как в примере, выбрал город, а окно не закрывается и изменение города не происходит. ЧТЯДНТ?

          Володя
          Володя Эксперт
          13 декабря 2015, 09:52
          смотрите в консоли браузера, наверно есть какие то ошибки…
            Артем
            Артем Старожил
            13 декабря 2015, 10:41
            Ок, на тестовом сайте такая же петрушка
            s3750.h2.modhost.pro/
            s3750
            938DW01cBPjs
              Володя
              Володя Эксперт
              13 декабря 2015, 11:03
              понял о чем вы, это происходит когда не заданы данные для геообъекта.
              сейчас поправлю.
                Володя
                Володя Эксперт
                13 декабря 2015, 11:40
                готово )
                  Артем
                  Артем Старожил
                  13 декабря 2015, 12:29
                  Спасибо!
                  Артем
                  Артем Старожил
                  13 декабря 2015, 12:53
                  А от этого как избавиться? Я вроде не тупой, но я правда не понимаю логики работы.
                    Василий Столейков
                    Василий Столейков Проверенный
                    13 декабря 2015, 13:05
                    Может нужно сперва в админке накачать все базы?
                      Артем
                      Артем Старожил
                      13 декабря 2015, 13:13
                      Это тестовый сайт, там все настроено и скачано
                        Василий Столейков
                        Василий Столейков Проверенный
                        13 декабря 2015, 13:15
                        Просто у меня та же картина была и я подумал на недокачанность нужной базы.
                        P.S. Моя страна Молдова.
                      Володя
                      Володя Эксперт
                      13 декабря 2015, 13:20
                      мне вот непонятно про что вы спрашиваете.
                      Картинка модального окна, избавится от чего? От окна? От вопроса? От чего?
                      Старайтесь формулировать вопрос чтоб была понятна суть.
                      Спасибо!
                        Василий Столейков
                        Василий Столейков Проверенный
                        13 декабря 2015, 13:24
                        Наверное имелось ввиду пустота после тире. Если город не определился автоматом, то может туда подставить что-то типа «неизвестен» или «указать» с той же ссылкой что и на «Изменить».
                        Я уже не могу показать скрин, т.к. я по вручную изменил город и он у меня сохранился по умолчанию.
                          Артем
                          Артем Старожил
                          13 декабря 2015, 13:41
                          При первичном заходе на страницу сайта содержащую этот программный код, происходит затемнение фона браузера и появление небольшего модального окна. В центре модального окна находится лишенный всякого смысла текст: «Ваш город — ?». Предположительно, там должен быть выбранный администратором сайта вариант местоположения по умолчанию, либо автоматически определенное местоположение, однако, пользователи из нескольких стран видят там всего лишь знак вопроса (?). Суть вопроса: как избавится от вопроса (?).
                          Спасибо!
                            Володя
                            Володя Эксперт
                            13 декабря 2015, 15:24
                            открываете чанк tpl.gl.modal
                            в нем есть строчка что вам нужна
                            <h5>Ваш город — <b>[[+gl.current.city.name_ru]]</b>?</h5>
                            но по идее там должен выводится текст — «По умолчанию». Если есть возможность скиньте на почту доступ к админке сайта, посмотрю в чем дело.
              wgame
              wgame Старожил
              13 декабря 2015, 15:29
              а можно ли как то сделать чтобы по умолчанию показывалось реальное месторасположение пользователя и при смене города показывалось уже выбранное, попробовал сделать так
              [[+gl.current.city.name_ru:is=``:then=`[[!+gl.real.city.name_ru]]`:else=`[[!+gl.current.city.name_ru]]`]]
              но показывает по умолчанию всегда
                Володя
                Володя Эксперт
                13 декабря 2015, 15:32
                ну так может gl.current.city.name_ru != пусто?
                  Володя
                  Володя Эксперт
                  13 декабря 2015, 15:34
                  а так
                  [[!+gl.current.city.name_ru:is=`По умолчанию`:then=`[[!+gl.real.city.name_ru]]`:else=`[[!+gl.current.city.name_ru]]`]]
                    wgame
                    wgame Старожил
                    13 декабря 2015, 15:38
                    да спасибо, что то про такое условие не подумал
                      Володя
                      Володя Эксперт
                      13 декабря 2015, 15:39
                      ну и хорошо )
                  Дмитрий
                  Дмитрий Старожил
                  01 февраля 2016, 19:13
                  Добрый день! Владимир, компонент отличный. Спасибо!

                  Есть сайт (http://bankrot1.abu-design.ru/). Сейчас реализовано несколько регионов (Москва, СПб, Архангельск) с помощью Вашего компонента. Контент (адреса, некоторые блоки информационные) при смене или определении региона меняется с помощью компонента If (проверяя выбранный город). Есть условие для региона «По умолчанию».

                  Суть вопроса: если регион не определиться, либо он не будет загружен в базу, то регионом станет регион «По умолчанию»?

                  Спасибо!
                    Володя
                    Володя Эксперт
                    01 февраля 2016, 20:59
                    добрый вечер.
                    Суть вопроса: если регион не определиться, либо он не будет загружен в базу, то регионом станет регион «По умолчанию»?
                    да, по идее так задумано.
                    пожалуйста!
                    Александр
                    Александр Старожил
                    15 марта 2016, 18:22
                    Подскажите, как быть, если определяются не все города?
                    К примеру, в Красноярском крае явно не 13 городов, а определяет именно столько.
                    Как-то можно добавить ещё другие города?
                      Володя
                      Володя Эксперт
                      15 марта 2016, 18:44
                      Возможно стоит добавить создание локаций вручную. Но тогда вопрос как они будут определяться если их нет в базе SxGeo? Добавлять таблицу ip и заполнять?
                        Александр
                        Александр Старожил
                        15 марта 2016, 18:57
                        Честно говоря, не представляю, как это реализовать (это я про таблицы ip). Как-то это сложно, по-моему.

                        Я думал, в SxGeo есть что-то вроде уровней городов по величине/населению, и из-за этого не подгрузились более мелкие города.
                      alex
                      alex Старожил
                      19 марта 2016, 17:08
                      Добрый день, подскажите пожалуйста в чем может быть проблема.

                      При переносе сайта на хостинг jino.ru — перестал определяться реальный город пользователя.
                      Т.е. реальное местоположение всегда равно значению `По умолчанию`
                      echo '
                      '; print_r($_SESSION['gl']); echo '<pre>'; 
                      массив с данными ниже
                      http://joxi.ru/KAg8aaBfgkv1Nr
                        Андрей Копп
                        Андрей Копп Старожил
                        07 апреля 2016, 01:11
                        Использую на странице сниппет [[!gl.modal]] скажите пожалуйста что нужно прописать ссылке, чтобы при клике открывалось это модальное окно? Голова что-то не соображает(
                          Володя
                          Володя Эксперт
                          07 апреля 2016, 09:02
                          gl-current-select
                          Алексей
                          Алексей Старожил
                          05 июля 2016, 08:42
                          Доброго дня! Подскажите пожалуйста, возможно ли использовать данный модуль на EVO? Если нет, то есть ли возможность портировать его на данную систему, и в какую сумму это выльется? Спасибо.
                            Константин Ильин
                            02 сентября 2016, 13:51
                            Приветствую Володя!
                            Я больше программист, чем продвиженец, поэтому вопрос:
                            У меня стоит вывод города для H1. Например «Товары в г. Уфа», соответственно Уфа меняется в зависимости от геолокации. Проиндексирует ли гугл или яндекс сайт по всем городам? т.е. в выдаче например в Кирове будет писаться «Товары в г. Киров»?
                              Володя
                              Володя Эксперт
                              02 сентября 2016, 15:04
                              Привет.
                              Смотря с какого ip зайдет бот, какой город у него определится — такой и проиндексирует наверно.
                              KSin
                              KSin Старожил
                              12 сентября 2016, 13:06
                              Ребят, подскажите… Заметил такую неприятную особенность на сайте.
                              Если человек первый раз заходит на сайт, появляется модальное окно GeoLocation с ссылками «Да» и «Изменить город». Но если человек не готов еще сделать выбор и жмет на крестик, то окно закрывается. Посетитель переходит на другую страницу сайта и модальное окно GeoLocation опять появляется, жмет опять крестик и все по-новой.
                              Как бы сделать так, чтобы при нажатии на крестик, модальное окно больше не доставало пользователей?
                                Володя
                                Володя Эксперт
                                12 сентября 2016, 13:14
                                Задайте параметр modalShow = 0 тогда окно не будет всплывать.
                                Или обработайте закрытие окна и например установите значение по дефолту.
                                  KSin
                                  KSin Старожил
                                  12 сентября 2016, 13:35
                                  modalShow = 0 — тогда вообще не всплывает никогда. Так ведь?
                                  А как можно обработать закрытие окна?
                                    Володя
                                    Володя Эксперт
                                    12 сентября 2016, 13:52
                                    А как можно обработать закрытие окна?
                                    на событие закрытия отправить например
                                    gl.location.select({action:'select',id:1,class:'glCity'})
                                      KSin
                                      KSin Старожил
                                      12 сентября 2016, 13:57
                                      А где это нужно прописать?
                                Сергей
                                Сергей Старожил
                                26 февраля 2017, 13:56
                                Подскажите кто нибудь, пожалуйста. Как отсортировать список городов при выводе из сниппета
                                [[!gl.location? &sortby=`glCity.Id` &sortdir=`ASC` &limit=`0` &where=`{«default»:0}`]],
                                по порядковому номеру как он находится на вкладке «Данные»?
                                  Володя
                                  Володя Эксперт
                                  26 февраля 2017, 15:00
                                  В шапке есть пример вывода с помощью pdoResources. Вам нужно только немного изменить вызов
                                  [[!pdoResources?
                                  	&class=`glData`
                                  	&leftJoin=`{
                                  	    "glCity": {
                                  			"class": "glCity",
                                  			"on": "glCity.id = glData.identifier AND glData.class = 'glCity'"
                                  		},
                                  		"glRegion": {
                                  			"class": "glRegion",
                                  			"on": "glRegion.id = glCity.region_id"
                                  		}
                                  	}`
                                  	&select=`{
                                  		"glData": "*",
                                  		"glRegion": "country"
                                  	}`
                                  	&limit=`0`
                                  	&sortby=`glData.id`
                                  	&sortdir=`ASC`
                                  	&tpl=`@INLINE [[+id]]-[[+name_alt]]`
                                  ]]
                                    Сергей
                                    Сергей Старожил
                                    26 февраля 2017, 15:04
                                    Огромное спасибо)
                                      Sergey (Sentinel)
                                      Sergey (Sentinel) Проверенный
                                      15 апреля 2019, 15:45
                                      Как можно по умолчанию город первым в списке поставить?
                                    raffx
                                    raffx Старожил
                                    12 сентября 2017, 17:44
                                    Добрый день!

                                    1. Можно-ли как-то присвоить класс к текущему городу в списке выбора городов? Что-то в этом духе:
                                    [[!gl.location?
                                                    &hereClass=`active` 
                                                ]]
                                    2. Можно при клике на изменить город сразу выводить попап со списком городов минуя диалог «Ваш город Москва? Да Изменить»
                                      Володя
                                      Володя Эксперт
                                      12 сентября 2017, 18:06
                                      Добрый вечер.
                                      Можно-ли как-то присвоить класс к текущему городу в списке выбора городов? Что-то в этом духе:
                                      можно в чанке tpl.gl.location поставить проверку
                                      <li>
                                          <span class="gl-list-location [[+name_ru:is=`[[!+gl.selected.city.name_ru]]`:then=`active`]]" data-id="[[+id]]" data-class="[[+class]]">[[+name_ru]]</span>
                                      </li>
                                      Володя
                                      Володя Эксперт
                                      12 сентября 2017, 18:07
                                      Можно при клике на изменить город сразу выводить попап со списком городов минуя диалог «Ваш город Москва?
                                      изменить чанк tpl.gl.modal
                                        raffx
                                        raffx Старожил
                                        12 сентября 2017, 18:50
                                        Спасибо большое!

                                        Насколько я понял, компонент умеет перенаправлять пользователя на нужную страницу при выборе города, если поле «Ресурс» указан в настройках. Я ресурс указываю, но при выборе города не происходит перенаправление на нужную страницу. Не знаете в чем может быть проблема?

                                        Тестирую тут: mirk-test.ci01926.tmweb.ru/

                                          Владимир
                                          Владимир Старожил
                                          12 октября 2017, 23:12
                                          Тоже столкнулся с такой проблемой, решение описал в комментарии modx.pro/help/13518/
                                            raffx
                                            raffx Старожил
                                            18 октября 2017, 22:40
                                            Благодарю! Заработало :)
                                        Vas
                                        Vas Старожил
                                        09 декабря 2019, 02:33
                                        Доброго. Подскажите как обновить базу айпи адресов. А то некоторых не распознает ( или подскажите алтернативу плз.

                                        Я сейчас исполизую его как:
                                        [[!*country-block:notempty=`
                                        [[!+gl.real.country.name_en:is=`[[*country-block]]`:then=`
                                        <script>document.getElementById("video").innerHTML= '<div class="tabs-content"> <div id="video" class="tab-content"> <div class="video-block tab-content clearfix active"> <div class="status-bg alert-bg"><span class="fa fa-info" style="margin-right:5px"></span>Видео недоступно на территории Российской Федерации</div> </div> </div> </div>'</script>
                                        <style>
                                        .alert-bg {
                                            background: rgba(255,102,102,.2);
                                            color: #f66;
                                        }
                                        .status-bg {
                                            padding: 5px 10px;
                                            position: relative;
                                            margin-bottom: 10px;
                                        }
                                        </style>
                                        `]]`]]
                                        Для того чтоб определить, если посетитель из определенной страны то удалить блок с видео.

                                        Пробовал так:
                                        [[!#[[*parent]].country-block:notempty=`
                                        <?php
                                        $.get("https://ipinfo.io", function(response) {
                                            if(response.country == "RU") {
                                                $("#video").html("<div class="tabs-content"> <div id="video" class="tab-content"> <div class="video-block tab-content clearfix active"> <div class="status-bg alert-bg"><span class="fa fa-info" style="margin-right:5px"></span>Видео недоступно на территории Российской Федерации</div> </div> </div> </div>");
                                            }
                                        }, "jsonp");
                                        ?>
                                        `]]
                                        И не работает (

                                        И так пробовал:
                                        [[!#[[*parent]].country-block:notempty=`
                                        <script src="//api-maps.yandex.ru/2.0-stable/?load=package.standard&lang=en-EN" type="text/javascript"></script>
                                        
                                        <script type="text/javascript"> 
                                          window.onload = function () {
                                           var country = ymaps.geolocation.country;
                                            if(country == '[[#[[*parent]].country-block]]'){
                                               jQuery("#video").text('<div class="tabs-content"> <div id="video" class="tab-content"> <div class="video-block tab-content clearfix active"> <div class="status-bg alert-bg"><span class="fa fa-info" style="margin-right:5px"></span>Видео недоступно на территории Российской Федерации</div> </div> </div> </div>');
                                             } else {
                                               
                                           }
                                        }
                                        </script>
                                        `]]
                                          Михаил
                                          Михаил Старожил
                                          07 декабря 2020, 09:19
                                          Здравствуйте Владимир! Мы подключили модуль geolocation к нашему сайту, но он не запоминает выбор города. Могли-бы вы посмотреть?
                                          Сейчас могу скинуть вам тестовый вариант страницы
                                          www.tdsevcable.ru/test1.html
                                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                                            53