[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
4
8 124
+3
Поблагодарить автора Отправить деньги

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

Адиль
12 декабря 2015, 20:02
0
А возможен ли вариант, чтоб форма выбора города не всплывала на экран, а была просто форма в которой можно выбрать город. Я знаю что можно но в Ява скрипте не так силен. Помогите кто чем может
    Володя
    12 декабря 2015, 20:32
    1
    0
    да вполне можно.
    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
      0
      Добрый день, прошу прощения, но почему-то скрипт не работает
    Артем
    12 декабря 2015, 21:36
    0
    Какая-то беда с кодировкой в названии ресурсов

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

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

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

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

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

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

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

                                  1. Можно-ли как-то присвоить класс к текущему городу в списке выбора городов? Что-то в этом духе:
                                  [[!gl.location?
                                                  &hereClass=`active` 
                                              ]]
                                  2. Можно при клике на изменить город сразу выводить попап со списком городов минуя диалог «Ваш город Москва? Да Изменить»
                                    Володя
                                    12 сентября 2017, 18:06
                                    0
                                    Добрый вечер.
                                    Можно-ли как-то присвоить класс к текущему городу в списке выбора городов? Что-то в этом духе:
                                    можно в чанке 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
                                    0
                                    Можно при клике на изменить город сразу выводить попап со списком городов минуя диалог «Ваш город Москва?
                                    изменить чанк tpl.gl.modal
                                      raffx
                                      12 сентября 2017, 18:50
                                      0
                                      Спасибо большое!

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

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

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

                                      Я сейчас исполизую его как:
                                      [[!*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
                                        0
                                        Здравствуйте Владимир! Мы подключили модуль geolocation к нашему сайту, но он не запоминает выбор города. Могли-бы вы посмотреть?
                                        Сейчас могу скинуть вам тестовый вариант страницы
                                        www.tdsevcable.ru/test1.html
                                          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                                          53