Catalog und Google Maps verknüpfen (z.B. mit dlh_googlemaps)

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • olivgruen
    Contao-Nutzer
    • 26.07.2009
    • 64

    #61
    Hallo MacKP,

    das ist mir prinzipiell klar, hatte nur versucht, das auf eine Seite zu kriegen, weil ich das hier so verstanden hatte. Die Ausgabe mit nur einem Eintrag und der Markierung auf der Map funktioniert

    Aber ich habe noch irgendein Problem mit der Schleife, kenne mich leider nicht wirklich mit PHP, Javascript & Co aus. Jedenfalls erhalte meine Katalogeinträge ausgegeben, dann erscheint jedoch noch einer mit "Katalog-Eintrag nicht gefunden". Und meine Map ist ohne Markierung.

    Die Template-Anpassung ist wie im Thread auf S.1 von cubano gepostet, allerdings steht da auch noch was vom Template 'dynicons' - sowas gibt es gar nicht mehr - muss ich vielleicht im Googlemaps-Modul noch etwas anpassen?
    PHP-Code:
    <!-- indexer::stop --> 
    <div class="mod_cat_googlemaps block"> 
    <?php if (count($this->entries)): ?> 
    
    <?php  
      $mark = 0; 
    ?> 
    
    <script type="text/javascript"> 
    <!--//--><![CDATA[//><!-- 
    
    mapdata = new Array(); 
    mapdata['dhl_googlemap_1'] = new Array(); 
    mapdata['dhl_googlemap_1']['marker'] = new Array(); 
    
    <?php foreach ($this->entries as $entry): ?> 
    
    mapdata['dhl_googlemap_1']['marker'][<?php echo $mark; ?>] = new Array(); 
    mapdata['dhl_googlemap_1']['marker'][<?php echo $mark; ?>]['coords'] = '<?php echo $entry[data]['koordinaten']['value']; ?>'; 
    mapdata['dhl_googlemap_1']['marker'][<?php echo $mark; ?>]['icon'] = ''; 
    mapdata['dhl_googlemap_1']['marker'][<?php echo $mark; ?>]['icon_position'] = ''; 
    mapdata['dhl_googlemap_1']['marker'][<?php echo $mark; ?>]['icon_size'] = ''; 
    mapdata['dhl_googlemap_1']['marker'][<?php echo $mark; ?>]['shadow'] = ''; 
    mapdata['dhl_googlemap_1']['marker'][<?php echo $mark; ?>]['shadow_size'] = ''; 
    mapdata['dhl_googlemap_1']['marker'][<?php echo $mark; ?>]['infotext'] = '<?php echo $entry[data]['name']['value']; ?>'; 
    mapdata['dhl_googlemap_1']['marker'][<?php echo $mark; ?>]['info_position'] = ''; 
    mapdata['dhl_googlemap_1']['marker'][<?php echo $mark; ?>]['autoinfo'] = false; 
    
    <?php $mark++; ?> 
    <?php endforeach; ?> 
    //--><!]]> 
    </script> 
    
    <?php endif; ?>
    
    </div> 
    
    <!-- indexer::continue -->

    Kommentar

    • olivgruen
      Contao-Nutzer
      • 26.07.2009
      • 64

      #62
      Hat sich erledigt - mit dem Code von Hauge funktioniert's bestens. Hätte ich den mal eher ausprobiert

      Kommentar

      • olivgruen
        Contao-Nutzer
        • 26.07.2009
        • 64

        #63
        Hier gibt's noch ein funktionierendes Beispiel, bei dem sich die Koordinaten nicht im direkt ausgegebenen, sondern im referenzierten Katalog befinden. Falls jemand ähnlich wenig Ahnung hat wie ich und nicht so lange basteln mag Inklusive Ausgabe eines Icons als Marker, das an den Elementen des direkt aufgerufenen Katalogs hängt.

        PHP-Code:
        <!-- indexer::stop --> 
        <script type="text/javascript"> 
        //<![CDATA[
        
        <?php if (count($this->entries)): ?>
          <?php $i = 0; ?>
            function gmap1_dynmap(gmap1) {
              <?php foreach ($this->entries as $entry): ?>
        
                <?php foreach ($entry['data'] as $field=>$data): ?>
                  <?php foreach ($data['ref'] as $id=>$ref): ?>
                  <?php if($ref['breitengrad']):?>
              
                  var myLatlng_<?php echo $i; ?> = new google.maps.LatLng(<?php echo $ref['breitengrad']; ?>,<?php echo $ref['laengengrad']; ?>);
        
                  var gmap1_<?php echo $i; ?>_marker = new google.maps.Marker({
                  position: new google.maps.LatLng(<?php echo $ref['breitengrad']; ?>,<?php echo $ref['laengengrad']; ?>), 
                  map: gmap1,
                  icon: '<?php echo $entry['data']['icon']['raw']; ?>'
                  });
        
                  var gmap1_<?php echo $i; ?>_infowindow = new google.maps.InfoWindow({
                  content: '<?php echo $entry['data']['title']['value']; ?>',
                  });
                  google.maps.event.addListener(gmap1_<?php echo $i; ?>_marker, 'click', function() {
                  gmap1_<?php echo $i; ?>_infowindow.open(gmap1,gmap1_<?php echo $i; ?>_marker);
                  });
                  <?php endif; ?>
                  <?php endforeach; ?>
        
                <?php endforeach; ?>
                
              <?php $i++; ?>
            <?php endforeach; ?> 
          }
        <?php endif; ?>
        
        //]]>
        </script>
        <!-- indexer::continue -->
        Zuletzt geändert von olivgruen; 12.02.2012, 18:08.

        Kommentar

        • Hauge
          Contao-Fan
          • 31.01.2010
          • 643

          #64
          Maximale Einträge &gt; Begrenzung?

          Hallo zusammen,

          ich arbeite aktuell wieder an der Thematik und habe wie oben bereits beschrieben einige Einträge aus dem Catalog mit dem Listermodul in die googlemap integriert.
          Aktuell stehe ich vor dem Problem, dass ich bei mehr als 62 Katalogeinträgen keine Anzeige mehr erhalte.

          Ich habe mehrere Varianten getestet und aktuell das Limit des Listers auf 62 Einträge eingestellt. Ab 63 Einträgen erhalte ich keine Einträge mehr.

          Es macht zwar wenig Sinn, zu viele Einträge auf einer Seite anzeigen zu lassen, ich habe jedoch vor, verschiedene Filter in eine Gesamtübersicht der Einträge einzubauen und dann kann es ggf. ab und an zu mehr als 62 Einträgen kommen. Der User hat dann aber eine leere map vor sich und erhält erst nach der Filterung entsprechende Anzeigen in der Map. Da es sich um ca. 1000 Einträge handelt kann es sein, dass er mehrmals filtern muss bevor er eine Anzeige erhält...

          Meine Frage(n): gibt es da von Haus aus ein Limit oder kann das Problem auch Serverseitig sein?
          Das bringt mich noch auf eine Idee: kann ich ggf. auch pro Zoom-Ebene unterschiedliche Einträge anzeigen lassen >>> Zeige pro Zoomebene maximal 50 Einträge >>> Lister mit Bedingung >>> die "wichtigsten" immer anzeigen usw.
          Zuletzt geändert von Hauge; 13.02.2012, 14:54.

          Kommentar

          • MacKP
            Contao-Yoda
            • 15.06.2009
            • 13315

            #65
            Hallo Hauge,
            vllt fragst du besser im Thread der Erweiterung von google-maps nach. Der Catalog hat auf jeden Fall nicht so eine Beschränkung ;-)
            Ich schätze mal in dem anderen Thread wirst du eher eine Antwort bekommen ^^

            Aber an sich könnte ich mir auch vorstellen, das Google dem ganzen einen Riegel vor schiebt (zu viele Verbindungen). Da könntest ja mal nach googlen *g*

            Viele Grüße
            Contao Pool | C-C-A | MetaModels | [Internetseite -> Mediendepot Ruhr]
            [Arbeitet bei -> Paus Design & Medien]
            "I can EXPLAIN it to you, but I can't UNDERSTAND it for you."

            Kommentar

            • christian
              Alter Contao-Hase
              • 15.06.2009
              • 1039

              #66
              Hallo Hauge,

              es gibt zwar keine feste Begrenzung, aber irgendwann ist natürlich Ende mit Arbeitsspeicher, wenn Du tausende von Markern in das Javascript reinschreibst... Ich denke, Du wirst die Filterung ohne Markierungen machen müssen. Bei den "nur" 62 Stück würde ich aber eher auf irgendein Zeichen "'" oder sowas tippen, was die Verarbeitung stoppt.

              Grüße,

              Christian
              Contao-Partner am Niederrhein
              Templating - Komplettservice - Erweiterungen
              Infos: http://delahaye.de

              Kommentar

              • Hauge
                Contao-Fan
                • 31.01.2010
                • 643

                #67
                @Christian:
                Danke - lag an einem Sonderzeichen...

                @macKP:
                vllt fragst du besser im Thread der Erweiterung von google-maps nach
                Hast absolut recht

                @den, den es interessiert aus:
                Ja, Du kannst der Karte auch die Marker dynamisch übergeben. Guck Dir dazu (mit einem einzeln angelegten Marker) im Quelltext an, wie die grafischen Marker erzeugt werden. Hier findest Du ein Beispiel (allerdings nur mit einer Sorte Icon, aber daraus kannst Du ja auch mehrere machen).
                Meine Version des (zumindest bei mir funktionierenden) Codes inklusive dynamischen Icons im Cataloglister-Modul:
                Code:
                <script type="text/javascript"> 
                //<![CDATA[
                
                <?php if (count($this->entries)): ?>
                    <?php $i = 0; ?>
                    function gmap1_dynmap(gmap1) {
                        <?php foreach ($this->entries as $entry): ?>
                    var premicon_<?php echo $i; ?> = new google.maps.MarkerImage(
                      '<?php echo $entry['data']['icon']['raw']; ?>',
                    new google.maps.Size(25, 29),
                    new google.maps.Point(0,0),
                    new google.maps.Point(12,15)
                    ); 
                        var myLatlng_<?php echo $i; ?> = new google.maps.LatLng(<?php echo $entry['data']['googlemap']['value']; ?>);
                        var gmap1_<?php echo $i; ?>_marker = new google.maps.Marker({
                        position: new google.maps.LatLng(<?php echo $entry['data']['googlemap']['value']; ?>), 
                        map: gmap1,
                                icon: premicon_<?php echo $i; ?>
                        });
                    var gmap1_<?php echo $i; ?>_infowindow = new google.maps.InfoWindow({
                          content: '<?php echo $entry['data']['name']['value']; ?></br><?php echo $entry['data']['picture']['value']; ?></br><?php echo $entry['data']['int_link']['value']; ?>',
                        });
                    google.maps.event.addListener(gmap1_<?php echo $i; ?>_marker, 'click', function() {
                        gmap1_<?php echo $i; ?>_infowindow.open(gmap1,gmap1_<?php echo $i; ?>_marker);
                        }); 
                        <?php $i++; ?>
                        <?php endforeach; ?> 
                        }
                <?php endif; ?>
                
                //]]>
                </script>
                Zudem noch eine Version für den Reader inkl. Routenplaner:
                Code:
                <?php if (count($this->entries)): ?>
                
                
                
                <div class="layout_full">
                
                
                <?php foreach ($this->entries as $entry): ?>
                <div class="item<?php echo $entry['class'] ? ' '.$entry['class'] : ''; ?>">
                <?php if($entry['linkEdit']): ?><?php echo $entry['linkEdit']; ?><?php endif; ?>
                <?php foreach ($entry['data'] as $field=>$data): ?>
                <?php if (strlen($data['raw']) && !in_array($field, array('catalog_name','parentJumpTo'))): ?>
                <div class="field <?php echo $field; ?>">
                    <div class="value"><?php echo $data['value']; ?></div>
                  </div>
                <?php endif; ?>
                <?php endforeach; ?></div>
                <?php endforeach; ?>
                <script type="text/javascript">
                //<![CDATA[
                
                function gmap1_dynmap(gmap1) {
                
                    var gmap1_2_marker = new google.maps.Marker({
                        position: new google.maps.LatLng(<?php echo $entry[data]['googlemap']['value']; ?>), 
                        map: gmap1, 
                        title:'<?php echo $entry[data]['name']['value']; ?>',
                        
                        });
                    var gmap1_2_infowindow = new google.maps.InfoWindow({
                        content: '<?php echo $entry[data]['name']['value']; ?><div class="routinglink"><a href="http://maps.google.com/[B]HIER_DEN_LINK_FÜR_DIE_EXTERNE_ROUTENPLANERSEITE[/B]" onclick="window.open(this.href); return false;">Routenplanung</a><br /><form action="http://maps.google.com/maps" method="get" target="_new"><input type="hidden" name="daddr" value="<?php echo $entry[data]['street']['value']; ?>,<?php echo $entry[data]['plz']['value']; ?>,<?php echo $entry[data]['country']['value']; ?>" /><input type="hidden" name="ie" value="UTF8" /><input type="hidden" name="hl" value="de" /><input type="text" class="text" name="saddr" value="[B]HIER DIE ADRESSE DES STARTPUNKTES[/B] " /><input type="submit" class="submit" value="ok" /></form></div>'
                        });
                    google.maps.event.addListener(gmap1_2_marker, 'click', function() {
                        gmap1_2_infowindow.open(gmap1,gmap1_2_marker);
                        });
                    gmap1_2_infowindow.open(gmap1,gmap1_2_marker);
                   
                
                }
                //]]>
                </script></div>
                
                <?php else: ?>
                <p class="info"><?php echo $this->noItemsMsg; ?></p>
                <?php endif; ?>

                Alle Codes wurden auf Grundlage von christians (soliden) Erweiterungen erstellt - Dennoch kann ich für einen einwandfreie Funktionalität nicht garantieren, da ich als "Pixelschubser" nicht weiß, inwiefern ich da aus solide den Status unsolide gemacht habe
                Zuletzt geändert von Hauge; 12.03.2012, 11:41.

                Kommentar

                • mamboo
                  Contao-Fan
                  • 04.03.2010
                  • 334

                  #68
                  Hallo zusammen

                  Ich steh vor demselben Problem, dass ich die marker nicht angezeigt kriege. Hab inzwischen alle Versionen durchgespielt mit demselben Resultat. Im Quelltext stehen alle Daten drin, aber die karte ist immer leer.
                  Ich verwende: contao V 2.9.5, catalog 2.0.0 beta, catalog_simple.tpl und dlh_googlemaps 1.1.1

                  Code:
                  <script type="text/javascript"> 
                  <!--//--><![CDATA[//><!--
                  
                  <?php if (count($this->entries)): ?>
                  <?php $i = 0; ?>
                  function gmap2_dynmap(gmap2) {
                  // Kartenmitte verschieben
                      <?php foreach ($this->entries as $entry): ?>
                  
                  // Markierung         
                      var gmap2_<?php echo $i; ?>_marker = new google.maps.Marker({
                      position: new google.maps.LatLng(<?php echo $entry['data']['dealer_breitengrad']['value'] . ", " . $entry['data']['dealer_laengengrad']['value']; ?>), 
                      map: gmap2
                      });
                      var gmap2_<?php echo $i; ?>_infowindow = new google.maps.InfoWindow({
                      content: '<?php echo $entry['data']['dealer_name']['value']; ?><br><?php echo $entry['data']['dealer_address']['value']; ?><br><?php echo $entry['data']['dealer_location']['value']; ?><br><?php echo $entry['data']['dealer_website']['value']; ?>',
                      });
                      google.maps.event.addListener(gmap2_<?php echo $i; ?>_marker, 'click', function() {
                      gmap2_<?php echo $i; ?>_infowindow.open(gmap2,gmap2_<?php echo $i; ?>_marker);
                      });
                          
                      <?php $i++; ?>
                      <?php endforeach; ?> 
                  }
                  <?php endif; ?>
                  
                  //--><!]]>
                  </script>
                  und vorab das Litermodul:
                  PHP-Code:
                  <?php if (count($this->entries)): ?>
                  
                  <div class="layout_simple">
                  
                  <?php foreach ($this->entries as $entry): ?>
                  <div class="item<?php echo $entry['class'] ? ' '.$entry['class'] : ''; ?>">
                  <?php foreach ($entry['data'] as $field=>$data): ?>
                  <?php if (!in_array($field, array('catalog_name','parentJumpTo'))): ?>
                  <div class="field <?php echo $field; ?>">
                      <div class="label"><?php echo $data['label']; ?></div>
                      <div class="value"><?php echo $data['value']; ?></div>
                  </div>
                  <?php endif; ?>
                  <?php endforeach; ?>
                  
                  <?php if ($entry['showLink'] && $entry['link']): ?>
                  <div class="link"><?php echo $entry['link']; ?></div>
                  <?php endif; ?>
                  <?php if ($entry['linkEdit']): ?>
                  <div class="linkEdit"><?php echo $entry['linkEdit']; ?></div>
                  <?php endif; ?>
                  </div>
                  
                  <?php endforeach; ?>
                  </div>
                   
                  <?php else: ?>
                  
                  <?php if ($this->condition): ?>
                  <div class="condition"><?php echo $this->condition; ?></div>
                  <?php else: ?>
                  <p class="info">There are no entries matching your search.</p>
                  <?php endif; ?>
                  
                  <?php endif; ?>
                  Kann mir jemand einen Tipp geben oder ein Codebeispiel, das auch in meiner Seite funktioniert.
                  Vielen Dank schon mal
                  Grüsse mamboo

                  Kommentar

                  • mamboo
                    Contao-Fan
                    • 04.03.2010
                    • 334

                    #69
                    Hat niemand eine Idee? Im Quelltext hab ich alles aber die Karte bleibt leer. Ich find den Fehler nicht.
                    Grüsse mamboo

                    Kommentar

                    • Hauge
                      Contao-Fan
                      • 31.01.2010
                      • 643

                      #70
                      @mamboo:
                      Vorab 2 Fragen:
                      Koordinatenn werden im Lister auch angezeigt?
                      Richtige Karte gewählt?

                      Die ersten Tests die bei mir zum Ergebnis geführt haben:
                      zuerst mal probeweise nur 1 Eintrag freigeben und die Koordinaten zwischendurch manuell in den Code schreiben um rauszufinden wo der Fehler liegt.
                      Zudem mal probieren, ob ggf. ein Eintrag dabei ist welcher nicht erlaubte Zeichen enthält (Ich habe anderen Katalog angelegt und 2 einfache Standardeinträge ohne irgendwelche Sonderzeichen verwendet) > Alternativ kannst du bei:
                      PHP-Code:
                      content: '<?php echo $entry['data']['dealer_name']['value']; ?><br><?php echo $entry['data']['dealer_address']['value']; ?><br><?php echo $entry['data']['dealer_location']['value']; ?><br><?php echo $entry['data']['dealer_website']['value']; ?>',
                      anstatt der Inhalte einfach mal einen Testtext reinschreiben...

                      Das wären mal die ersten Ansätze für die Fehlersuche...
                      Zuletzt geändert von Hauge; 15.04.2012, 06:57.

                      Kommentar

                      • Hauge
                        Contao-Fan
                        • 31.01.2010
                        • 643

                        #71
                        Catalog &amp; Google Maps verknüpfen &gt; Hinweis für IE6 und IE7

                        Servus,

                        möchte an dieser Stelle noch einen wichtigen Hinweis bezüglich der Verwendung unter IE6 und IE7 von cubano posten:

                        Verwendung von catalog & google maps unter IE6 und IE7

                        Kommentar

                        • Tim G
                          Contao-Urgestein
                          • 13.02.2010
                          • 2212

                          #72
                          Hi,
                          das ganze ist gar nicht so aufwendig:

                          Für einen Auftrag ging es auch darum ein Händlerverzeichnis abzubilden und mit googlemaps zu verknüpfen.
                          Das ganze Template brauch man gar nicht zu posten, hier der wichtigste Auszug zur Erstellung der Karte (oben einfügen) und die Variablen durch Eure Felder ersetzen.
                          Eine Info-Grafik wird gleich mit erstellt.

                          Die Id ist hier zum Test gerade fix. Die könnte natürlich noch für jede Katalog-Liste dynamisch gesetzt werden.


                          PHP-Code:
                          <?php if (count($this->entries)): ?>
                          
                          <?php 
                          $coords = $this->entries[0]['data']['geocoords']['value'];
                          $title = $this->entries[0]['data']['name']['value'];
                          $street = $this->entries[0]['data']['street']['value'];
                          $zip = $this->entries[0]['data']['zip']['value'];
                          $city = $this->entries[0]['data']['city']['value'];
                          $id = 3;
                          ?>
                          
                          <script type="text/javascript">
                          //<![CDATA[
                          // Google Maps Integration
                          function gmap<?php echo $id; ?>_dynmap(gmap<?php echo $id; ?>) {
                              
                              // Center map
                              gmap<?php echo $id; ?>.center = new google.maps.LatLng(<?php echo $coords; ?>);
                              
                              // Zoom
                              gmap<?php echo $id; ?>.zoom = 15;
                              gmap<?php echo $id; ?>.mapTypeId=google.maps.MapTypeId.ROADMAP;
                              
                              // Set marker
                              var gmap<?php echo $id; ?>_marker = new google.maps.Marker({
                                  position: new google.maps.LatLng(<?php echo $coords; ?>), 
                                  map: gmap3
                                  });
                              var gmap<?php echo $id; ?>_infowindow = new google.maps.InfoWindow({
                                  options:    {},
                                  content:    '<div class="infoWindow">' +
                                              '<p class="title"><b><?php echo $title; ?></b><p>' + "" +
                                              '<?php echo $street; ?>' + "<br />" +
                                              '<?php echo $zip; ?>' + ", " + '<?php echo $city; ?>' +
                                              '</div>'
                                  });
                              google.maps.event.addListener(gmap<?php echo $id; ?>_marker, 'click', function() {
                                  gmap<?php echo $id; ?>_infowindow.open(gmap<?php echo $id; ?>,gmap<?php echo $id; ?>_marker);
                                  });
                          }
                          //]]>
                          </script>

                          Grüße,
                          Tim
                          http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

                          Kommentar

                          • mamboo
                            Contao-Fan
                            • 04.03.2010
                            • 334

                            #73
                            Danke für Eure Hilfe. Ich probier's gleich mal...
                            Grüsse mamboo

                            Kommentar

                            • mamboo
                              Contao-Fan
                              • 04.03.2010
                              • 334

                              #74
                              @hauge

                              Herzlichen Dank für Deine Hilfe.

                              Der Grund war schlussendlich das fehlende UTF-8 Format und 2 Hochkommas in den Adressen... :-(
                              Jedenfalls werden jetzt die Marker korrekt angezeigt.

                              @ Allgemein
                              Gibt es einen Weg um Sonderzeichen z.B. Hochkommas abzufangen resp. ignoreren zu können, damit man nicht jede CSV-Datei vor dem Import durchackern müsste?
                              Grüsse mamboo

                              Kommentar

                              • Tim G
                                Contao-Urgestein
                                • 13.02.2010
                                • 2212

                                #75
                                PHP-Code:
                                @ Allgemein
                                Gibt es einen Weg um Sonderzeichen z.B. Hochkommas abzufangen resp. ignoreren zu können, damit man nicht jede CSV-Datei vor dem Import durchackern müsste? 
                                
                                Innerhalb von contao kannst du
                                PHP-Code:
                                standardize($strMeinString); 
                                
                                nutzen
                                http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

                                Kommentar

                                Lädt...