Umkreissuche um eine Node

am 25.07.2011 - 09:54 Uhr in
Hallo,
nach langer und erfolgloser Suche habe ich mich entschlossen hier zu posten.
Ich habe eine Node: Veranstaltung, dieser Node ist genau eine Node (Veranstaltungsort) zugewiesen. Die Node Veranstaltungsort hat eine Location, Geocodiert, PLZ etc.
Nun möchte ich, dass wenn ich eine Node Veranstaltung geöffnet habe, alle Veranstaltungen, welche im Umkreis von 100 km um die Node sind, angezeigt werden.
Ich habe eine View erstellt, welche mir alle Veranstaltungen inkl. GEO-Daten anzeigt, auch wird mir eine Entfernung zur aktuellen Node angezeigt, diese Entfernung kann aber nicht sein. Denn die Entfernung ist immer größer als 5000 km! Und die Orte befinden sich (fast) alle in Deutschland.
Ich hoffe, dass einer einen Tipp für mich hat.
Gruß Daniel
Anhang | Größe |
---|---|
bild1.PNG | 45.89 KB |
bild2.PNG | 21.34 KB |
- Anmelden oder Registrieren um Kommentare zu schreiben
Du musst einen Filter
am 25.07.2011 - 10:42 Uhr
Du musst einen Filter einrichten "Ort: Entfernung / Umgebung" - dort wird der Ausgangspunkt angegeben und die Entfernung.
Weiterhin, wenn man Nodes für die Umkreissuche verwendet, muss man als Argument "Global:NULL" verwenden und dort die NID zurückgeben.
Weiterhin verwendest Du als View eine "Page/Seite" - wenn Du diese (über einen Link) aufrufst - wo soll denn der View die NID (Beitrags-ID) herhaben? Der View selbst hat ja überhaupt keine NID und kann somit auch keine korrekte Umkreissuche ausführen da es keinen Ausgangspunkt gibt. Oder gibst Du unter Argumente die NID/Beitrags-ID über "PHP-Code" oder als festen Eintrag zurück? Oder verwendest Du "view_embed_view" zum Einbinden des Views auf einen Node?
Arbeite am besten einige Tutorials zur Umkreissuche durch. Über die Suche findest Du hier im Forum einige.
Danke für die Antwort
am 25.07.2011 - 10:53 Uhr
Filter: Das weiß ich, habe ich im Moment nicht aktiviert, da ich sonst keine Ergebnisse bekomme oder die Entfernung auf 6000 km einstellen muss.
Die NID habe ich im Moment so eingestellt, dass sie über dir URL ausgelesen werden soll (später wird in PHP Code geändert.)
Eigebunden werden soll das ganze später als Block, in der rechten Seitenleiste.
studidani schriebDie NID
am 25.07.2011 - 11:12 Uhr
Die NID habe ich im Moment so eingestellt, dass sie über dir URL ausgelesen werden soll (später wird in PHP Code geändert.)
Eigebunden werden soll das ganze später als Block, in der rechten Seitenleiste.
Jo - aber da Du den View (zum Testen) scheinbar über den eigenen View-Pfad aufrufst, gibt es in der URL keine NID zum auslesen. Es gibt also keinen Ausgangspunkt. Den gibt es erst wenn Du den View in einem Node aufrufst und die korrekten Einstellungen für die Argumente vorgenommen hast oder Du legst (zum Testen) einen "festen Eintrag" an.
Unter "Argumente -> Standardargument zu Verfügung stellen -> Fester Eintrag" kannst Du eine NID angeben um den View zu testen ohne ihn im Node einbinden zu müssen.
Habe schon eine feste NID vergeben.
am 25.07.2011 - 11:25 Uhr
siehe Anlage.
Oder habe ich da noch ein Schreibfehler drin?
Vielen Dank für die schnellen Antworten.
Gruß Daniel
Sieht korrekt aus (den
am 25.07.2011 - 11:31 Uhr
Sieht korrekt aus (den Validator würde ich, fürs Testen, aber mal weglassen)!
Funktioniert es denn damit?
Habe beides schon (mit und
am 25.07.2011 - 11:35 Uhr
Habe beides schon (mit und ohne Validator) getestet, geht beides nicht.
Als Argument habe ich Global:NULL gewählt.
Gruß Daniel
Sorry - aber aus der
am 25.07.2011 - 11:53 Uhr
Sorry - aber aus der Entfernung kann ich nichts weiter dazu sagen.
So, ich habe noch etwas
am 25.07.2011 - 15:07 Uhr
So, ich habe noch etwas weiter gesucht.
Ich kann bei Distance/Proximity unter Location to use nur Node location auswählen. Das wäre aber die Location, welche ich direkt in der Node eingebe. Die Coordinaten für die Location befinden sich ja in der Node Veranstaltungsort, dies kann ich aber nicht auswählen.
Gibt es hier die Möglichkeit, dass man stattt Node location die Verlinkung zur Location aufrufen kann?
Gruß Daniel
Nochmal zum Verständnis.Du
am 25.07.2011 - 15:27 Uhr
Nochmal zum Verständnis.
Du hast "Inhaltstyp: Veranstaltung" UND "Inhatstyp: Veranstaltungsort" - Richtig?
Nun möchtest Du einen View-Block auf einem Node vom "Inhaltstyp: Veranstaltung" anzeigen lassen?
In diesem Block sollen Nodes vom "Inhatstyp: Veranstaltungsort" angezeigt werden und zwar im "Umkreis" relativ zum Node "Inhaltstyp: Veranstaltung"?
Korrekt?
Falls ja - benötigst Du keine "Relationship" bzw. Beziehung denn der VIew zeigt "ganz normal" Nodes vom Typ "Veranstaltungsort" an (das stellst Du über "Filter" ein). Die Umkreissuche wird also auch ohne Relationship ausgeführt denn der Ursprungsort wird über die NID (vom Typ "Veranstaltung") festgelegt. Dass die NID vom Typ "Veranstaltung" kommt, ist unerheblich.
Die Relationship/Beziehung musst Du also komplett löschen denn Du darfst sie nicht auf die Felder anwenden (weil es nicht notwendig ist). Daher kommt höchstwahrscheinlich auch die falsche Entfernungsangabe.
Zitat: Du hast "Inhaltstyp:
am 25.07.2011 - 17:56 Uhr
Du hast "Inhaltstyp: Veranstaltung" UND "Inhatstyp: Veranstaltungsort" - Richtig?
--> RICHTIG
Und von Veranstatlung wird auf genau ein Veranstaltungsort referenziert.
Und ich möchte einen View-Block um eine Veranstaltung machen, es sollen alle Veranstaltungen, welche sich um den Veranstaltungsort befinden, angezeigt werden.
Lösche ich alle Beziehungen, geht überhautp nichts mehr.
Wenn ich die Geokoordinaten eines Veranstaltungsort angebe (als Static latitude/longitude), wird alles alles korrekt angezeigt. Gebe ich dort aber nun 0 ein, so bekomme ich das gleiche Ergebnis wie mit den langen km Angaben (mehr als 5000 km etc.)
Das heißt dann für mich, dass er sich einfach nicht die Geokoordinaten von Veranstaltungsort holt. Sondern die Geokoordinaten der Node Veranstaltung (da sind aber keine) Da über ein CCK-Feld auf die Node Veranstaltungsort referenziert wird.
Wie kann ich denn mit Hilfe von PHP code for latitude, longitude: mir die Daten holen? Hast du mir da einen Tipp?
So ähnlich wie das hier:
return array('latitude' => $_SESSION['smart_ip']['location']['latitude'],
'longitude' => $_SESSION['smart_ip']['location']['longitude']);
VIELEN DANK für die bisherigen Tipps und deine Geduld
Ich habe die Lat/lon noch nie
am 25.07.2011 - 23:17 Uhr
Ich habe die Lat/lon noch nie per PHP-Code übergeben - deswegen habe ich hier auch keinen funktionierenden Code den ich Dir als Beispiel nennen könnte. Ich weiß daher auch nicht wie man das schreiben müsste. Und ich bin mir auch nicht sicher ob Du das überhaupt so machen musst.
Ich muss auch sagen, dass ich Probleme habe Deinen Gedankengängen zu folgen. In Deinem Eingansgposting war für mich z.B. nicht ersichtlich, dass Du Referenzierst. Somit waren meine darauf folgenden Anmerkungen völlig falsch.
Wenn Du bei Dir die Veranstaltungen im Umkreis zum Veranstaltungsort anzeigen lassen willst, dann darf nicht nur der Veranstaltungsort einen Location haben sondern die Veranstaltung muss auch eine haben. Das ist bei Dir, wenn ich das richtig verstehe, nicht der Fall. Somit wirst Du keine funktioniernde Umkreissuche hinbekommen.
Du verwendest bei Dir unter "Beziehungen" ein Feld welches "Node Location:Reference" heißt. Durch selbst suchen habe ich gesehen, dass Du dafür das Modul "Node Location Relationship" verwendest (das hast Du aauch nirgends erwähnt). Du versuchst mit "Node Location Relationship" die Location vom "Ort" zur "Veranstaltung" zu übertragen. Warum Du der Veranstaltung nicht gleich eigene Location-infos verpasst, ist für mich schleierhaft.
Zu "Node Location:Reference" habe ich das gefunden http://drupal.org/node/468474 (das hast Du aber sicher selbst schon durchgearbeitet oder?).
Ich kenne das Modul "Node Location:Reference" leider nicht und bei mir häufen sich auch die Fragezeichen sodass ich gerade verwirrt hoch zehn bin - ich kann Dir daher leider nicht weiterhelfen.
Erstelle doch mal ein Issue auf http://drupal.org/project/issues/nodelocation_relationship?status=All&ca... - vielleicht kann Dir da jemand bei Deinem problem helfen.
Die Lösung
am 26.07.2011 - 15:28 Uhr
So erst mal Danke für die viele Zeit die du investiert hast.
Habe es nun wie folgt gelöst.
Bei Entfernung (Distance / Proximity) habe ich: User PHP code to determine latiude/longitude gewählt.
Folgendes habe ich dann bei PHP-Code eingegeben:
$node = node_load(arg(1));
$node_id = $node->nid;
Und hier ganz wichtig, und das hat mich aufgehalten, dies Funktioniert NICHT im VIEW-Editor, läuft aber dann, wenn man sich die Node anschaut! Möchte man es testen dann hilft z.B. dass man hier etwas durch testet und mit hlife von DSM ausgibt.
$testvar (arg(1));
drupal_set_message('<pre>'. var_export($testvar , 1) . '</pre>');
Mit Hilfe der NodeID habe ich dann einen SQL-Befehl genommen, der mir die Geokoordinaten aus der DB holt.
Erstelle doch mal ein Issue auf http://drupal.org/project/issues/nodelocation_relationship?status=All&ca... - vielleicht kann Dir da jemand bei Deinem problem helfen.
Da ist schon ein ISSU angelegt ;-)
Aber im Endeffekt habe ich es ohne dieses Modul gelöst.