• Willkommen, Gast!
  • Dienstag, 29. September 2020, 10:17:07
Position: Home » Boardsolution » Boardsolution v1.4x » Mod-Anleitungen » Google-Membermap für API v3
Thema: Google-Membermap für API v3 [Seite 1 ]

Kein neuer Beitrag Rafioso , 01.05.2014, 02:32
Beitrag #1   

IP: n/a
Rang: * * * * * * *
Registrierung: 30.08.2006, 22:31
Homepage: http://HomepageStarter.de
Wohnort: O-BW
 

Forum-Gott mit 1723 Punkte, 1537 Beiträge
Hallo,

mit dieser Modifikation wird der Wohnort eurer User auf einer Google-Maps-Karte per Marker und
Infofenster dargestellt, sofern der User es im Profil eingetragen hat.

Klickt man auf einen Marker, werden genauere Daten angezeigt.

Anders als in der veralteten Version, die noch die Google Maps API v2 genutzt hat, habe ich diese
Modifikation auf die Version 3 der API aktualisiert, den Code optimiert und ein Caching mit
eingebaut.

Die Modifikation sieht dann z.B. so aus:

uploads/membermap_141.jpg


Diese Mod beinhaltet folgende Sprachen:

  • "ger_du" direkt eingetragen.



Kompatibel und getestet mit:
  • Boardsolution 1.45



#### Systemvoraussetzungen

Damit die neue Membermap funktioniert, muss euer Hoster die SimpleXML-Klasse unterstützen und
allow_url_fopen aktiviert haben. Im Archiv habe ich eine check.php mit eingefügt, die in jedem
beliebigen Ordner auf dem Webserver hochgeladen werden kann, um zu testen, ob die Modifikation mit
eurem Server kompatibel ist. Einfach hochladen und im Browser aufrufen.


#### Hinweis

Solltet ihr bereits die alte API v2-Version eingesetzt haben, müssen die von den Usern
eingetragenen Wohnort-Daten zwischengespeichert werden! Dies muss nach der Installation
durchgeführt werden. Ladet einfach den Ordner tools auf den Webserver und ruft dann die
recmembermapcoords.php im Browser auf. Die Hinweise sollten selbsterklärend sein. Je nachdem, wie
viele User die Wohndaten eingetragen haben, kann die Zwischenspeicherung eine Weile dauern.

#### Installation

Lade einfach den Ordner front aus dem Anhang hoch.

Öffne nun mit einem Editor die membermap.htm aus dem Anhang und ändere DEIN_API-V3_CODE
HTML:
1
<script src="http://maps.googleapis.com/maps/api/js?sensor=false&amp;key=DEIN_API-V3_CODE" type="text/javascript">
in dein Google-API-V3-Code.
Weitere Infos zur Nutzung der API und wie man an den Google-API-V3-Code kommt, findest du hier.
Lade danach die Template-Datei membermap.htm nach themes/<style>/templates hoch.

Öffne nun die themes/<style>/templates/inc_footer.htm und füge vor
HTML:
1
2
</body>
</html>

folgendes ein:
HTML:
1
2
3
{if map_vars}
{map_vars}
{endif}



#### Installation der Profilfelder

Gehe in den Adminbereich und anschließend nach User >> Zusätzliche Profilfelder.
Klicke dort jeweils auf "Neues Feld hinzufügen" und trage folgende Daten ein:
Zitat:

Feldname: Membermap
Angezeigter Name: Membermap

Feldtyp: Text (255)

Anzeigen:
Beiträge: Nein
Registrierung: Nein
User-Details: Nein
User-Profil: Ja

Pflichtfeld: Nein
Immer anzeigen: Nein

Suffix:
Bearbeitungshinweis: Hier kannst du deinen Wohnort in die Membermap eintragen. Der Wohnort wird nur
in der Membermap angezeigt. Je genauer die Wohnortbeschreibung, desto genauer landet der Marker auf
der Karte. Beispiel: "D, 88888 Testhausen, Teststraße 1" -> "Land, PLZ Stadt, Straße
Hausnummer"

Benutzerdefinierte Darstellung:
Eingabe-Überprüfung:


Zitat:

Feldname: Membermap_Lat
Angezeigter Name: Membermap_Lat

Feldtyp: Text (20)

Anzeigen:
Beiträge: Nein
Registrierung: Nein
User-Details: Nein
User-Profil: Nein

Pflichtfeld: Nein
Immer anzeigen: Nein

Suffix:
Bearbeitungshinweis:

Benutzerdefinierte Darstellung:
Eingabe-Überprüfung:


Zitat:

Feldname: Membermap_Lng
Angezeigter Name: Membermap_Lng

Feldtyp: Text (20)

Anzeigen:
Beiträge: Nein
Registrierung: Nein
User-Details: Nein
User-Profil: Nein

Pflichtfeld: Nein
Immer anzeigen: Nein

Suffix:
Bearbeitungshinweis:

Benutzerdefinierte Darstellung:
Eingabe-Überprüfung:



#### Änderung am BS-Code

Öffne die /front/module/userprofile/action_updateinfos.php und ersetze die Zeilen 75 - 87

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
    foreach($cfields->get_fields_at(BS_UF_LOC_USER_PROFILE) as $field)
    {
      /* @var $field FWS_AddField_Field */
      $value = $field->get_value_from_formular();
      if(($error = $field->is_valid_value($value)) !== '')
        return sprintf($locale->lang('error_add_field_'.$error),$field->get_data()->get_title());
      
      $sql_val = $field->get_value_to_store($value);
      
      $fieldname = $field->get_data()->get_name();
      $sql_fields['add_'.$fieldname] = $sql_val;
      $user->set_profile_val('add_'.$fieldname,$sql_val);
    }

gegen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
    foreach($cfields->get_fields_at(BS_UF_LOC_USER_PROFILE) as $field)
    {
      /* @var $field FWS_AddField_Field */
      $value = $field->get_value_from_formular();
      if(($error = $field->is_valid_value($value)) !== '')
        return sprintf($locale->lang('error_add_field_'.$error),$field->get_data()->get_title());
      
      $sql_val = $field->get_value_to_store($value);      
      $fieldname = $field->get_data()->get_name();
      
      if($fieldname == 'Membermap')
      {
        if($sql_val != '')
        {
          $data_xml = implode (''file ('http://maps.googleapis.com/maps/api/geocode/xml?sensor=false&address='.urlencode($sql_val)));
            
          $xml = new SimpleXMLElement($data_xml);
          $lat = $xml->result[0]->geometry[0]->location[0]->lat;
          $lng = $xml->result[0]->geometry[0]->location[0]->lng;
      
          $sql_fields['add_Membermap_Lat'] = (float)$lat;
          $sql_fields['add_Membermap_Lng'] = (float)$lng;
          $user->set_profile_val('add_Membermap_Lat'$sql_fields['add_Membermap_Lat']);
          $user->set_profile_val('add_Membermap_Lng'$sql_fields['add_Membermap_Lng']);
          $sql_fields['add_'.$fieldname] = $sql_val;
          $user->set_profile_val('add_'.$fieldname,$sql_val);
        }
        else 
        {
          $sql_fields['add_Membermap_Lat'] = 0;
          $sql_fields['add_Membermap_Lng'] = 0;
          $user->set_profile_val('add_Membermap_Lat'$sql_fields['add_Membermap_Lat']);
          $user->set_profile_val('add_Membermap_Lng'$sql_fields['add_Membermap_Lng']);
          $sql_fields['add_'.$fieldname] = $sql_val;
          $user->set_profile_val('add_'.$fieldname,$sql_val);
        }
      }
      else
      {
        $sql_fields['add_'.$fieldname] = $sql_val;
        $user->set_profile_val('add_'.$fieldname,$sql_val);
      }
    }


Öffne die /acp/module/user/actionedit.php und ersetze die Zeilen 106 - 117

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
      foreach($fields as $field)
      {
         $fdata = $field->get_data();
         $value = $field->get_value_from_formular();
         
         // admins may leave required fields empty
         if(!$field->is_empty($value) && ($error = $field->is_valid_value($value)) !== '')
            return sprintf($locale->lang('error_add_field_'.$error),$fdata->get_title());
         
         $sql_val = $field->get_value_to_store($value);
         $sql_fields['add_'.$fdata->get_name()] = $sql_val;
      }

gegen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
      foreach($fields as $field)
      {
         $fdata = $field->get_data();
         $value = $field->get_value_from_formular();
         
         // admins may leave required fields empty
         if(!$field->is_empty($value) && ($error = $field->is_valid_value($value)) !== '')
            return sprintf($locale->lang('error_add_field_'.$error),$fdata->get_title());
         
         $sql_val = $field->get_value_to_store($value);
         
         if($fdata->get_name() == 'Membermap')
         {   
            if($sql_val != '')
            {
               $data_xml = implode ('', file ('http://maps.googleapis.com/maps/api/geocode/xml?sensor=false&address='.urlencode($sql_val)));
               
               $xml = new SimpleXMLElement($data_xml);
               $lat = $xml->result[0]->geometry[0]->location[0]->lat;
               $lng = $xml->result[0]->geometry[0]->location[0]->lng;

               $sql_fields['add_Membermap_Lat'] = (float)$lat;
               $sql_fields['add_Membermap_Lng'] = (float)$lng;
               $sql_fields['add_'.$fdata->get_name()] = $sql_val;
            }
            else
            {
               $sql_fields['add_Membermap_Lat'] = 0;
               $sql_fields['add_Membermap_Lng'] = 0;
               $sql_fields['add_'.$fdata->get_name()] = $sql_val;
            }
         }
         else 
            $sql_fields['add_'.$fdata->get_name()] = $sql_val;
      }


Die Installation wäre hiermit abgeschlossen. Jetzt sollte der obige Hinweis beachtet werden!

Aufgerufen wird die Map mit index.php?action=membermap

##############################################


Das war's.

Viel Spaß damit :)

PS: Solltet ihr einen Hoster haben, der eher auf curl setzt, statt auf fopen, kann ich auch dafür
eine Lösung bereit stellen.

//Edit 11.05.2014
Eine kleine Korrektur in der check.php wurde durchgeführt. In der Tabelle bei "allow_url_fopen"
aktiviert
wurde das falsche Ergebnis dargestellt, jedoch wurde im Allgemeinen nichtsdestotrotz das
korrekte Gesamtergebnis, ob die Mod einsetzbar ist, oder nicht, angezeigt.

MfG
Rafioso
Anhänge:
membermap_145.zip 283.886 Bytes 3 Downloads

Aktuellste Boardsolution-Version: v1.46
Kommende Boardsolution-Version: TBA
-----------------------------------------------------
Ich erstelle nur noch Modifikationen
für aktuelle Versionen!
-----------------------------------------------------
Dieser Beitrag wurde insgesamt 4 mal editiert. Das letzte Mal 11.05.2014, 17:11 von Rafioso.

Abonnieren Druckansicht

n/a n/a 1     (Anzeige: 1 – 1; insgesamt: 1) n/a n/a
User in diesem Thema: 0 Registrierte, 0 Versteckte, 2 Gäste, 0 Bots
Keine
Legende: Administratoren, User, Moderatoren
Themenaktionen:
Beiträge verschieben

Toggle Ähnliche Themen zu „Google-Membermap für API v3“
  Antworten Aufrufe Themeneröffnung Letzter Beitrag
Keine neuen Beiträge, nicht wichtig Keine neuen Beiträge, „heißes Thema“
Keine neuen Beiträge, offen Keine neuen Beiträge, nicht verschoben
Thema Boardsolution v1.46 0 214756 13.05.2017, 21:15
Von: Nils
13.05.2017, 21:15
Von: Nils Zum letzten Beitrag
Keine neuen Beiträge, nicht wichtig Keine neuen Beiträge, „heißes Thema“
Keine neuen Beiträge, offen Keine neuen Beiträge, nicht verschoben
  "Liveticker" 5 145583 16.09.2016, 00:49
Von: Tobi
19.09.2016, 20:30
Von: Rafioso Zum letzten Beitrag
Keine neuen Beiträge, nicht wichtig Keine neuen Beiträge, „heißes Thema“
Keine neuen Beiträge, offen Keine neuen Beiträge, nicht verschoben
  Vorschläge für mehr Aktions-Logging 4 109140 26.01.2016, 12:23
Von: Rafioso
05.02.2016, 20:27
Von: Mars Zum letzten Beitrag
Keine neuen Beiträge, nicht wichtig Keine neuen Beiträge, „heißes Thema“
Keine neuen Beiträge, offen Keine neuen Beiträge, nicht verschoben
Thema Integration von BS v1.4x in Joomla! 2.5.x sow ... 2 182662 18.11.2014, 10:35
Von: herzdrache
13.11.2015, 20:01
Von: Nils Zum letzten Beitrag
Keine neuen Beiträge, nicht wichtig Keine neuen Beiträge, „heißes Thema“
Keine neuen Beiträge, offen Keine neuen Beiträge, verschoben
  [WIP] [REL v2.00] [WIP v2.10] BoardSolution 1 ...   Seiten 1 2 3 4  ...6 ] 85 489457 29.01.2010, 02:53
Von: Rafioso
07.10.2015, 20:24
Von: Mars Zum letzten Beitrag
  • 0.030946 Sek., 12 DB-Zugriffe, 911.266 KiB
  • Powered by Boardsolution v1.46