2017-01-25 13 views
0

Limesurvey - выберите URL опроса, предлагает пользователю разрешить или заблокировать расположениеLime Survey - геолокация ответа (город, страна) Params возвращается в конец URL

т.е.. сценарий геолокации запустить & вернуть текущий город & страна в конце URL.

Возможно или нет. Ниже приведен мой сценарий, как реализовать это в обзоре извести.

Любые предложения, пожалуйста,

<script type="text/javascript"> 

    var geocoder; 

    if (navigator.geolocation) { 
navigator.geolocation.getCurrentPosition(successFunction, errorFunction); 
    } 

    function initMap(){ 
    } 

    //Get the latitude and the longitude; 
    function successFunction(position) { 
    var lat = position.coords.latitude; 
    var lng = position.coords.longitude; 
    codeLatLng(lat, lng) 
} 

function errorFunction(){ 
alert("Geocoder failed"); 
} 

function codeLatLng(lat, lng) { 

alert("Latitude: "+lat); 
alert("Longtude: "+lng); 

geocoder = new google.maps.Geocoder(); 

var latlng = new google.maps.LatLng(lat, lng); 
geocoder.geocode({'latLng': latlng}, function(results, status) { 
    if (status == google.maps.GeocoderStatus.OK) { 
    //console.log(results)  
    if (results[1]) { 
    //formatted address     
    alert(results[0].formatted_address)   
    //find country name 
    for (var i=0; i<results[0].address_components.length; i++) { 
     for (var b=0;b<results[0].address_components[i].types.length;b++) { 

     //there are different types that might hold a city admin_area_lvl_1 usually does in come cases looking for sublocality type will be more appropriate 
      if (results[0].address_components[i].types[b] == "administrative_area_level_1") { 
       //this is the object you are looking for 
       city= results[0].address_components[i]; 
       break; 
      } 
      if(results[0].address_components[i].types[b] == 'country'){ 
       country = results[0].address_components[i]; 
       break; 
      } 
     } 
    }   
    //city data 
    alert(city.short_name + " " + city.long_name) 
    //country data 
    alert(country.short_name + " " + country.long_name) 

    } else { 
     alert("No results found"); 
    } 
    } else { 
    alert("Geocoder failed due to: " + status); 
    } 
}); 
} </script> 
<script async defer src="https://maps.googleapis.com/maps/api/js?key=YOUR_KEY&callback=initMap" 
type="text/javascript"></script> 

Любая помощь? Заранее спасибо.

ответ

1

Если ваш код работает (иначе: сначала просмотрите свой код). Я говорил только для части LimeSurvey.

  1. Создать множественный тип текста вопроса:
    • код GEO
    • Добавить 2 суб вопрос, код города и Contry
  2. Добавить класс (с помощью дополнительных настроек) hidden тогда вопрос являются не показано.
  3. Деактивировать HTML редактор и поместить скрипт внутри jquery ready (использование раствора альтернативного addScriptToQuestion плагин)
  4. Добавить пробел или перевод строки после каждого { у вас в коде JS (и пробел перед каждым })
  5. заменить вам последнее предупреждение (где у вас есть city.data и coutry.data) по
    • $("#answer{SGQ}CITY").val(city.short_name + " " + city.long_name); для города
    • $("#answer{SGQ}COUNTRY").val(country.short_name + " " + country.long_name); для страны
  6. Вы можете использовать {GEO_CITY} и {GEO_COUNTRY} в опросе (после этой страницы)
  7. Затем вы можете использовать его в URL http://example.org/?city={GEO_CITY}&country={GEO_COUNTRY}

Использование LimeSurvey 2,50 и до версии (еще нужно некоторое Javascript, чтобы скрыть этот вопрос)

+0

Денис, у вас есть опечатка во втором селекторе - должно быть $ ("# answer {SGQ} COUNTRY") – tpartner

+0

Да, исправлено. Но глядя на оригинальный код js: unsure он работает здесь;) –

+0

Денис, большое вам спасибо, можно хранить город, страну в таблице ответов извести, когда я отправляю опрос. –

1

Это сокращенная версия работает для меня, когда размещена в источнике скрытого несколько короткого текст вопроса, как Денис говорит: `

var geocoder; 

if (navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(successFunction, errorFunction); 
} 

//Get the latitude and the longitude; 
function successFunction(position) { 
    var lat = position.coords.latitude; 
    var lng = position.coords.longitude; 
    codeLatLng(lat, lng) 
} 

function errorFunction(){ 
    console.log("Geocoder failed"); 
} 

function codeLatLng(lat, lng) { 

    geocoder = new google.maps.Geocoder(); 

    var latlng = new google.maps.LatLng(lat, lng); 
    geocoder.geocode({ 
    'latLng': latlng }, 
    function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      if (results[1]) { 
       for (var i=0; i<results[0].address_components.length; i++) { 
        for (var b=0;b<results[0].address_components[i].types.length;b++) { 
         // Find city name 
         // There are different types that might hold a city 
         // "locality" works for most of North America 
         // See here for types - https://developers.google.com/maps/documentation/geocoding/intro 
         if (results[0].address_components[i].types[b] == "locality") { 
          //this is the object you are looking for 
          city= results[0].address_components[i]; 
          break; 
         } 
         // Find country name 
         if(results[0].address_components[i].types[b] == 'country'){ 
          country = results[0].address_components[i]; 
          break; 
         } 
        } 
       }   
       // City data 
       //console.log(city.short_name + " " + city.long_name); 
       $("#answer{SGQ}CITY").val(city.long_name); 
       // Country data 
       //console.log(country.short_name + " " + country.long_name); 
       $("#answer{SGQ}COUNTRY").val(country.long_name); 
      } 
      else { 
       console.log("No results found"); 
      } 
     } else { 
      console.log("Geocoder failed due to: " + status); 
     } 
    }); 
} 

+0

Большое вам спасибо. –

 Смежные вопросы

  • Нет связанных вопросов^_^