Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Benutzerhandbuch › Fortgeschrittene › Tutorials & How To's - Tipps & Tricks ›

Umkreissuche mit Location- und Views-Modul

Eingetragen von TobiasR (134) am 18.09.2009 - 02:20 Uhr in
  • Drupal 6.x

Ziel:
Inhalte (Nodes) sollen einen Ort zugewiesen bekommen. Anschließend soll über eine Umkreissuche ermittelt werden, welcher Ort (genauer: welche Postleitzahl) welchen Abstand zu den Inhalten besitzt.

Zur Realisierung der hier beschriebenen Umkreissuche werden folgende Module benötigt:

  • Location
    (6.x-3.1-rc1)
  • Views
    (6.x-2.6)

Die Beschreibung hier bezieht sich auf Drupal 6.
Da beide Module auch in Version 5 vorhanden sind, sollte die Umkreissuche auch dort funktionieren. Die genaue Funktionsweise von Views und Location wird hier nur teilweise erörtert, es wird davon ausgegangen, dass man sich mit beiden Modulen zumindest kurz vorher beschäftigt hat.

  1. Installation der beiden Module
  2. Um eine Umkreissuche zu realisieren, muss in der Datenbank eine Tabelle zipcodes erstellt werden und mit den Postleitzahlen des Landes gefüllt werden, in dem die Umkreissuche möglich sein soll (können auch mehrere Länder sein). In dieser Tabelle findet eine Zuordnung von Postleitzahlen zu Geokoordinaten (lattitude/longitude) statt. Ein SQL-Dump für Deutschland und einige andere Länder wird mit dem Modul direkt ausgeliefert. Weitere Beschreibungen hierzu sind in der Datei "install.txt" im Location-Modul zu finden.
  3. In der Version 6.x-3.1-rc1 ist in der Datei supported/location.de.inc nicht die Funktion location_latlon_rough_de($location = array()) implementiert. Dies hat zur Folge, dass die Umkreissuche in Deutschland (und auch in einigen anderen Ländern) nicht funktioniert, da diese Funktion veraltet ist und nur noch wegen der Abwärtskompatibilität mitgeführt wird. Für die Umkreissuche ist diese aber unverzichtbar, daher muss diese wieder neu eingefügt werden. Folgender Code muss in der "location.de.inc" ergänzt werden:
                function location_latlon_rough_de($location = array()) {
                return location_get_postalcode_data_de($location);
                }

    Weitere Informationen hierzu unter http://drupal.org/node/343487.


    Als Alternative (oder auch als Ergänzung) kann auch noch die location.inc (ca. in Zeile 269) ergänzt werden:
    <?php
    function location_latlon_rough($location = array()) {
      if (!isset(
    $location['country']) || !isset($location['postal_code'])) {
        return
    NULL;
      }


    location_load_country($location['country']);
     
    $latlon_function = 'location_latlon_rough_'. $location['country'];
      if (
    function_exists($latlon_function)) {   // <<-- prüft ob location_latlon_rough_de vorhanden ist
       
    return $latlon_function($location);
      }
      else {
        return
    location_latlon_exact($location); // <<--- statt false gehen wir hier auf die exact
     
    }
    }
    ?>

    Dies führt dazu, dass wenn eine PLZ nicht gefunden wird oder die location_latlon_rough_de($location = array()) nicht ergänzt wird, auf die Geolokalisierung von Google zurückgegriffen wird. Hierfür wird ein "Google Maps API Key" benötigt, der kostenlos bei Google zu erhalten ist. Es sollte allerdings darauf hingewiesen werden, dass dieser Schlüssel an die AGBs von Google gebunden ist und die AGBs daher zu beachten sind.
  4. Als nächstes müssen den Inhalten Orte zugewiesen werden. Unter Inhaltsverwaltung->Inhaltstypen können unter bearbeiten die Location-Einstellungen pro Inhaltstypen bearbeitet werden. Ein Inhaltstyp, der später in den Suchergebnissen auftauchen soll, sollte mindestens eine Location zugewiesen bekommen. Wichtig ist, dass auf jeden Fall die Postleitzahl (postal code) unter "Collection settings" auf "Require" gesetzt wird. Bei Nutzung von Google Maps muss dies nicht unbedingt sein, ist aber nicht von Nachteil.
  5. Jetzt kann die eigentliche Umkreissuche erstellt werden:
    • Bei der Umkreissuche handelt es sich um einen View. Daher unter Verwalten -> Strukturierung -> Ansichten eine neue Ansicht hinzufügen.
    • Als Ansichtstyp kann sowohl Node als auch Location (Ort) gewählt werden.
    • Unter Felder Node:Titel einfügen. Dadurch sollten die Titel von allen auf der Seite befindlichen Nodes ausgegeben werden.
    • Als nächstes wird unter Filter der Filter Ort: Distance / Proximity hinzugefügt. Dieser Filter muss nun hervorgehoben (exposed Filter) werden. Bei Form mode Postal Code / Country auswählen und den Filter aktualisieren.
    • Für die Optik fügen wir nun noch das Feld Ort: Distance / Proximity bei den Feldern ein. Bei den besonderen Einstellungen unter Origin:
      Use Distance / Proximity filter einsetzen. Nun sollte neben dem Titel des Nodes auch der Abstand Postleitzahl stehen, die im Filter verwendet wird.

Hier noch der View (zum Importieren), wonach ich diese Anleitung geschrieben habe:

    $view = new view;
    $view->name = 'Umkreissuche';
    $view->description = '';
    $view->tag = '';
    $view->view_php = '';
    $view->base_table = 'node';
    $view->is_cacheable = FALSE;
    $view->api_version = 2;
    $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
    $handler = $view->new_display('default', 'Standards', 'default');
    $handler->override_option('fields', array(
    'title' => array(
    'label' => 'Titel',
    'alter' => array(
    'alter_text' => 0,
    'text' => '',
    'make_link' => 0,
    'path' => '',
    'link_class' => '',
    'alt' => '',
    'prefix' => '',
    'suffix' => '',
    'help' => '',
    'trim' => 0,
    'max_length' => '',
    'word_boundary' => 1,
    'ellipsis' => 1,
    'strip_tags' => 0,
    'html' => 0,
    ),
    'link_to_node' => 0,
    'exclude' => 0,
    'id' => 'title',
    'table' => 'node',
    'field' => 'title',
    'relationship' => 'none',
    ),
    'distance' => array(
    'label' => 'Distance / Proximity',
    'alter' => array(
    'alter_text' => 0,
    'text' => '',
    'make_link' => 0,
    'path' => '',
    'alt' => '',
    'link_class' => '',
    'prefix' => '',
    'suffix' => '',
    'trim' => 0,
    'max_length' => '',
    'word_boundary' => 1,
    'ellipsis' => 1,
    'strip_tags' => 0,
    'html' => 0,
    'help' => '',
    ),
    'origin' => 'tied',
    'units' => 'km',
    'latitude' => '',
    'longitude' => '',
    'exclude' => 0,
    'id' => 'distance',
    'table' => 'location',
    'field' => 'distance',
    'relationship' => 'none',
    ),
    ));
    $handler->override_option('filters', array(
    'distance' => array(
    'operator' => 'mbr',
    'value' => array(
    'latitude' => '',
    'longitude' => '',
    'postal_code' => '',
    'country' => 'de',
    'search_distance' => '100',
    'search_units' => 'km',
    ),
    'group' => '0',
    'exposed' => TRUE,
    'expose' => array(
    'use_operator' => 0,
    'operator' => 'distance_op',
    'identifier' => 'distance',
    'label' => 'Ort: Distance / Proximity',
    'optional' => 1,
    'remember' => 0,
    ),
    'type' => 'postal',
    'identifier' => 'dist',
    'id' => 'distance',
    'table' => 'location',
    'field' => 'distance',
    'relationship' => 'none',
    ),
    ));
    $handler->override_option('access', array(
    'type' => 'none',
    ));
    $handler->override_option('cache', array(
    'type' => 'none',
    ));
    $handler = $view->new_display('page', 'Seite', 'page_1');
    $handler->override_option('path', 'Umkreissuche');
    $handler->override_option('menu', array(
    'type' => 'none',
    'title' => '',
    'description' => '',
    'weight' => 0,
    'name' => 'navigation',
    ));
    $handler->override_option('tab_options', array(
    'type' => 'none',
    'title' => '',
    'description' => '',
    'weight' => 0,
    ));

‹ Titel mit Stil nach oben Usergalerie mit ImageCache, CCK, Views + Thickbox ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

geocoding über google

Eingetragen von Blackice2999 (55)
am 18.09.2009 - 08:43 Uhr

Hallo TobiasR,

vielen Dank für Deine Anleitung, hätte ich 3 Tage früher gebraucht :) - Ich habe es bei mir etwas anders gelöst und zwar ergänze ich nicht die location.de.inc um diese Funktion, sondern verweise von location_latlon_rough auf die location_latlon_exact() diese Funktion hat den Vorteil das die Google Geocoding funktionen verwendet werden (vorausgesetzt man hat sie eingestellt und nutzt diese) - Evtl. sollte man das nochmal überdenken und beides kombiniert einsetzen. Erst Google und dann location_latlon_rough_de als fallback.

location.inc ca. Zeile 269

<?php
function location_latlon_rough($location = array()) {
  if (!isset(
$location['country']) || !isset($location['postal_code'])) {
    return
NULL;
  }

 
location_load_country($location['country']);
 
$latlon_function = 'location_latlon_rough_'. $location['country'];
  if (
function_exists($latlon_function)) {   // <<-- prüft ob location_latlon_rough_de vorhanden ist
   
return $latlon_function($location);
  }
  else {
    return
location_latlon_exact($location); // <<--- statt false gehen wir hier auf die exact
 
}
}
?>

Gruß Dennis

  • Anmelden oder Registrieren um Kommentare zu schreiben

Guter Einwand

Eingetragen von TobiasR (134)
am 18.09.2009 - 11:26 Uhr

Hallo Dennis,

vielen Dank für den Hinweis. Ich werde dies in die Anleitung mit aufnehmen. Man sollte aber dann noch darauf eingehen, wann und wie das Geocoding von Google einsetzen darf. Das reine Codieren von Geodaten ist über Google nur erlaubt, wenn man es mit Google Maps kombiniert verwendet.

Bin mir auch noch nicht sicher, ob man zurerst Google und dann nach PLZ gehen sollte. Ich würde es eher anders herum machen. Diese Problematik/Entscheidung müsste man dann wohl auch in die Anleitung mit aufnehmen.

Werde am Wochenende die Anleitung ergänzen.

Viele Grüße,
Tobias

  • Anmelden oder Registrieren um Kommentare zu schreiben

WOW!

Eingetragen von aze2009 (68)
am 19.01.2010 - 14:22 Uhr

Danke für diese tollte Anleitung!!!

Eine Frage bleibt mir da nur noch, wie kann ich die Eingabe der Postleitzahl und Distanz einmalig in der Datenbank ablegen (User-Profil), damit ich nicht ständig die Distanz und Postleitzahl eingeben muss ?

Also ich hätte gerne die Funktion, wenn ein user sich anmeldet er automatisch seine Daten (Postleitzahlt, Distanz) als werte übernimmt und diese danna uch verwendet werden _OHNE_ die Eingaben manuell in die Felder zu tippen.

Ist das möglich? Wenn ja wie?

Ist es eine Filterfunktion, ein Argument? Was muss beachtet und umgesetzt werden, damit das oben bschirebene funktionieren kann?

Vielen Dank für jegliche Hilfestellung im Vorraus!!!

Schöne Grüße

  • Anmelden oder Registrieren um Kommentare zu schreiben

Auch ohne Hacks möglich?

Eingetragen von Tekl (135)
am 26.01.2010 - 16:07 Uhr

Kann man die Änderungen irgendwie auch über Overrides lösen, so dass sie nicht bei jedem Update manuell einzupflegen sind?

--
Tekl

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hilfe, Umkreissuche funktioniert nicht

Eingetragen von naddl (104)
am 27.03.2010 - 11:40 Uhr

Hallo an alle,

die Anleitung ist klasse, habe nun alles bestimmt dreimal durchgearbeitet. Ich habe auch mehrere Nodes mit PLZs in meiner Umgebung erstellt. Diese werden aber nur angezeigt, wenn ich bei der Suche unter "Distanz" eine "0" eingebe. Sobald ich einen Wert größer "0" eingebe, wird nir gar nichts mehr angezeigt. Ich mach schon viele Stunden daran herum und bin ziemlich verzweifelt. Weiß jemand Rat?

Herzlichen Dank schonmal im Voraus.

Naddl

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hilfe, Umkreissuche funktioniert nicht

Eingetragen von naddl (104)
am 27.03.2010 - 11:50 Uhr

Hallo an alle,

hat keiner eine Idee?

Verzweifelte Grüße

Naddl

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hatte das Problem anfangs

Eingetragen von Tekl (135)
am 15.04.2010 - 17:02 Uhr

Hatte das Problem anfangs auch, weiß aber nicht mehr genau was die Ursache war. Ich glaube ich habe den Vorschlag hier nicht ganz sauber durchgeführt oder die Zipcodes waren nicht korrekt in der Datenbank.

  • Anmelden oder Registrieren um Kommentare zu schreiben

bezieht sich das auch alles

Eingetragen von blackhawk (25)
am 05.05.2010 - 11:18 Uhr

hi,
ich habe den View importiert und die location.de.inc ergänzt.
Nun erhalte ich leider folgende Fehlermeldung:
Fatal error: Call to undefined function location_latlon_rough() in /kunden/216246_22057/rp-hosting/2110/2209/sites/all/modules/location/handlers/location_views_handler_filter_proximity.inc on line 170

In Zeile 170 steht ja folgendes:
if ($coord) {
$this->value['latitude'] = $coord['lat'];
$this->value['longitude'] = $coord['lon'];
}

Anscheinend hat er Probleme es longitude oder latitude zuzuordnen. Aber ich weiß nicht woran das liegen könnte?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Umkreissuche klappt nicht.

Eingetragen von JuergenDi (8)
am 13.05.2010 - 11:15 Uhr

Ich habe eigentlich alles so gemacht, wie oben beschrieben. Die Datenbanktabelle ist auch befüllt, das habe ich sogar kontrolliert, aber ich bekomme keine Ergebnisse angezeigt.
Die Ansicht erscheint, Eingabemasken funktioniert alles, aber leider wenn ich auf Anwenden gehe, erscheinen keine Ergebnisse, also es passiert nichts. Der Browser zeigt in der Statuleiste fertig an, aber es hat sich sonst nichts getan. Die Ansicht der Eingabe ist da, wie zuvor.
Woran kann das liegen?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Interessante Fragen...

Eingetragen von TobiasR (134)
am 14.05.2010 - 18:22 Uhr

Ist schon ein wenig her, als ich die Anleitung hier geschrieben habe.

Bei klappt es soweit. Hatte anfangs auch ein paar Probleme, hier noch ein paar Hinweise:

Grundsätzlich können zwei Fehler auftauchen:

  1. Das Geocoding funktioniert nicht. Dies könnt Ihr überprüfen, indem ihr in der Tabelle "location" nachschaut, ob für die entsprechende Location Werte für "latitude" und "longitude" gesetzt sind.
  2. Der View an sich funktioniert nicht. Hier hatte ich eigentlich gar keine Probleme. Ihr solltet beachten, dass sich die Anleitung auf eine bestimmte Views- und Location-Version bezieht. Probleme liegen hier aber wahrscheinlich eher in der Location-Version.

Genauer kann ich so spontan leider auch nicht helfen, da ich aktuell nicht besonders gut in das Modul eingearbeitet bin.
Grüße,
Tobias

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hallo Tobias, vielen Dank für

Eingetragen von Ionit (1802)
am 17.05.2010 - 15:11 Uhr

Hallo Tobias,

vielen Dank für das Tutorial.

Ich konnte es wunderbar nochvollziehen und umsetzen. Mit Hilfe Deines Patches von http://drupal.org/node/343487 konnte das Problem behoben werden, dass bei der Umkreissuche nur Distance: = 0 Ergebnisse lieferte. ich hatte schon graue Harre bekommen.

Jetzt funktioniert alles wie es soll ;-)

Danke und schöne Grüße

Matthias

  • Anmelden oder Registrieren um Kommentare zu schreiben

Viewtype = Node

Eingetragen von K32 (20)
am 28.06.2010 - 23:24 Uhr

Hallo,
kurzer Hinweis zu Punkt 5:

Zitat:

Als Ansichtstyp kann sowohl Node als auch Location (Ort) gewählt werden.

Ich hatte auch zuerst Location gewählt, allerdings gibt es dann Probleme wenn man noch Taxonomie mit in die Suche aufnehmen möchte, siehe Unknown column 'location.vid'. Mit ViewType = Node klappt es nun problemlos.
Ansonsten: Vielen Dank für die Super-Anleitung!!!

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Advertising Modul gesucht
  • Mysql Ver 8.0.41 zu MariaDB 10.11.11
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Doppelte Einträge verhindern
  • [abgeschlosen] PHP Composer von Plesk + .bashrc nicht vorhanden
  • Drupal 7 Focal Point – Bild auf Desktop vollständig anzeigen, nur in Responsive zuschneiden
  • ECA validiere Felder mit unlimitierter Eingabe
  • Zugriff auf Webform beschränken/gewähren
  • Drupal 10.4.5 und Bootstrap 3.x.
  • Probleme mit Drupal 10 - HTTP Statuscode 403 (gelöst)
  • View mit mehreren Ansichten, übersteuert nicht
  • [gelöst] Wiederherstellen mit backup&migrate
Weiter

Neue Kommentare

  • War Eure Suche erfolgreich?
    vor 2 Tagen 12 Stunden
  • V-Server ..
    vor 1 Woche 2 Tagen
  • ... generelle
    vor 1 Woche 2 Tagen
  • oder..
    vor 2 Wochen 4 Tagen
  • Also ich will dich ja nicht
    vor 2 Wochen 4 Tagen
  • nochmal MariaDB vs Mysql
    vor 2 Wochen 4 Tagen
  • Vielen Dank - feedback zu den Videos
    vor 4 Wochen 1 Tag
  • Falls dieses Thema noch mal
    vor 4 Wochen 4 Tagen
  • Prima, dann schreib bitte
    vor 4 Wochen 5 Tagen
  • Ah perfekt. Es hat an der
    vor 4 Wochen 5 Tagen

Statistik

Beiträge im Forum: 249988
Registrierte User: 20278

Neue User:

  • CharlestydaY
  • Darrenwem
  • DavidSeero

» Alle User anzeigen

User nach Punkten sortiert:
wla9454
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3855
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 13 Gäste online.

DrupalCenter durchsuchen:

Benutzerhandbuch

  • FAQ - Häufig gestellte Fragen.
  • Links & Downloads
  • Über Drupalcenter.de und das deutschsprachige Benutzerhandbuch
  • Über Drupal
  • Einsteiger
  • Fortgeschrittene
    • Best Practice - Drupal Sites - Guidelines
    • Die beliebtesten Themes und Module
    • Tutorials & How To's - Tipps & Tricks
      • Kurztipps - Dinge die Stunden sparen können.
      • Notfallpläne - Tipps die Deine Drupalinstallation retten können
      • Anleitung zur Erstellung eines einfachen Kontaktformulars
      • Arbeiten mit dem Drupal Taxonomie-System [beinhaltet veraltete Inhalte]
      • Bearbeiten-Tab zu jeden Block hinzufügen
      • Block View mit Argument
      • Das Tagebuch einer Site
      • Drupal 6 - Automatisch unterschiedliche Bildgröße bei Teaser und Artikel
      • Drupal 6 - Eigene CSS Datei in ein Theme integrieren
      • Drupal 6 - Einfache Bildergalerie mit Image und Lightbox2
      • Drupal 6 - Einrichten eines Kalenders
      • Drupal 6 - Google Adsense ohne Zusatzmodul einbinden
      • Drupal 6 - Hauptnavigation mit DropDown Effekt ab Ebene Zwei
      • Drupal 6 - ImageMagick mit XAMPP Lite nutzen
      • Drupal 6 - Imagefield mit Imagecache und Colorbox
      • Drupal 6 - Installation FCK Editor
      • Drupal 6 - Installieren der WYSIWYG API inkl. Editoren
      • Drupal 7: mehrere Bilder in Node: 1 Bild in Anrisstext
      • Drupal Code Highlighting in Redmine Projektarchiv (CodeRay)
      • Drupal Theming: JavaScript einhängen in Abhängigkeit von Page-Variablen
      • Drush - Das Schweizermesser für Drupal auf Kommandozeile
      • Einfaches und erfolgreiches Patchen unter Windows
      • Eingabeformat & Inputfilter
      • Einrichten eines einfachen, statischen Menüsystems
      • Erstellen von Patches
      • Gallery mit CCK und Views erstellen (Drupal 5)
      • Header image Modul einrichten
      • Inhaltsübersicht für einen User mit einem View erstellen
      • Javascript und CSS-Dateien einbinden
      • Kontaktformular mit Jquery aufwerten
      • Leitfaden zur Erstellung von Suchmaschinenoptimierten Drupal-Sites
      • Mac OSX - Backupskript für Websites auf MAMP
      • Module updaten via Shell auf Windows
      • Module übersetzen
      • Perl-Script zum Erzeugen einer statischen Kopie einer Drupal-Website
      • Portierung eine Themes von openwebdesign.org
      • Prozentbalken bei Views (Balkendiagramm)
      • Themen eines Node-Formulars
      • Titel mit Stil
      • Umkreissuche mit Location- und Views-Modul
      • Usergalerie mit ImageCache, CCK, Views + Thickbox
      • Userprofil mit Usernodes erstellen
      • Validierung von Usereingaben bei Nodes
      • Variation vom Showroom auf drupalcenter.de
      • View mit Eingabeformular für neue Beiträge
      • WebSVN mit Drupal Code Highlighting
      • Zusätzliche Submit-Schaltfläche in Node-Formularen
      • i18n Language Switcher Block, die Links mit den Flaggen themen
      • ui.slider als Ersatz für den Ajax-Pager von Views
      • Zugriffsbeschränkungen für Nodes - eine Übersicht der Möglichkeiten
  • Entwicklung von Modulen und Themes
  • Drupalcenters Community
  • Drupal 7 Video-Trainings (Deutsch)
  • Drupal-Testumgebung erstellen
  • Drupal 6 Module
  • Drupal 7 Module
  • Drupal Screencasts auf deutsch
  • Archiv

Das Copyright des deutschsprachigen Drupal-Benutzerhandbuches unterliegt den jeweiligen Autoren. Übersetzungen des englischsprachigen Drupal-Benutzerhandbuches unterliegen der Creative Commons License, Attribution-ShareAlike 2.0.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association