Views Filter: Location Modul : PHP Code für Umkreissuche

am 02.10.2012 - 14:12 Uhr in
Hallo ihr,
ich wollte bei Views über das Location Modul eine Umkreissuche erstellen. Das klappt auch alles super. Nur jetzt wollte ich das der Ursprungspunkt automatisch aus den Userpositionen berechnet wird. Die User speichern Ihre Daten von Latitude und Longitude in ihrem Profil ab.
Das Abfragen der Position klappt auch laut query. Bekomme die beiden Werte angezeigt.
Nur irgendwie klappt das mit der Rückgabe nicht. Glaube an dem return haut da was nicht nicht.
Anbei der Code:
Configure filter criterion: Location: Distance / Proximity
PHP code for latitude, longitude
global $user;
$latitude="";
$longitude="";
$latitudeset = db_query('SELECT latitude FROM location WHERE lid = (SELECT lid FROM location_instance WHERE uid = (SELECT uid FROM users WHERE uid = :uid))', array(':uid' => $user->uid));
$longitudeset = db_query('SELECT longitude FROM location WHERE lid = (SELECT lid FROM location_instance WHERE uid = (SELECT uid FROM users WHERE uid = :uid))', array(':uid' => $user->uid));
foreach ($latitudeset as $lat) {
$latitude = $lat;
}
foreach ($longitudeset as $long) {
$longitude = $long;
}
debug($longitude); // Hier stehen die richtigen Koordinaten
debug($latitude); // Hier stehen die richtigen Koordinaten
return array(
'longitude' => $longitude ,
'latitude' => $latitude
);
Habt ihr da eine Idee für mich?
- Anmelden oder Registrieren um Kommentare zu schreiben
Mach das doch mit Views und
am 02.10.2012 - 16:37 Uhr
Mach das doch mit Views und lass die Entfernung von den Userdaten aus berechnen. Da musst Du gar nicht selbst in PHP coden.
Dort kanns Du doch direkt von Users Latidude / Longitude die Proximity berechnen / ausgeben lassen.
Als Argument habe ich da die Node ID genommen und bei Feldern einfach von Location die Entfernung (Proximity ) ausgewählt. Dann habe ich noch einen Filter in Views gesetzt, dass was angezeigt wird wenn die Daten beim User auch hinterlegt sind.
Das ganze hab ich dann in einen Block gepackt und diesen unter den Nodes einblenden lassen.
Der Export dieses Views schaut bei mir so aus:
$view = new view; $view->name = '01_test_entfernungen'; $view->description = 'Test für Entfernungen zwischen Nodes'; $view->tag = 'Entfernungen'; $view->base_table = 'location'; $view->core = 0; $view->api_version = '2'; $view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */ $handler = $view->new_display('default', '01_test_entfernungen', 'default'); $handler->override_option('fields', array( 'distance' => array( 'label' => '', 'alter' => array( 'alter_text' => 1, 'text' => 'Dieser Beitrag handelt [distance] von Deinem Wohnort entfernt.', 'make_link' => 0, 'path' => '', 'link_class' => '', 'alt' => '', 'prefix' => '', 'suffix' => '', 'target' => '', 'help' => '', 'trim' => 0, 'max_length' => '', 'word_boundary' => 1, 'ellipsis' => 1, 'html' => 0, 'strip_tags' => 0, ), 'empty' => '', 'hide_empty' => 1, 'empty_zero' => 0, 'origin' => 'user', 'units' => 'km', 'latitude' => '', 'longitude' => '', 'postal_code' => '', 'country' => '', 'php_code' => '', 'nid_arg' => 'nid', 'nid_loc_field' => 'node', 'uid_arg' => '', 'exclude' => 0, 'id' => 'distance', 'table' => 'location', 'field' => 'distance', 'override' => array( 'button' => 'Übersteuern', ), 'relationship' => 'none', ), )); $handler->override_option('sorts', array( 'distance' => array( 'order' => 'ASC', 'origin' => 'user', 'latitude' => '', 'longitude' => '', 'postal_code' => '', 'country' => '', 'php_code' => '', 'nid_arg' => 'nid', 'nid_loc_field' => 'node', 'uid_arg' => 'uid', 'id' => 'distance', 'table' => 'location', 'field' => 'distance', 'override' => array( 'button' => 'Übersteuern', ), 'relationship' => 'none', ), )); $handler->override_option('arguments', array( 'nid' => array( 'default_action' => 'default', 'style_plugin' => 'default_summary', 'style_options' => array(), 'wildcard' => 'all', 'wildcard_substitution' => 'Alle', 'title' => '', 'breadcrumb' => '', 'default_argument_type' => 'node', 'default_argument' => '', 'validate_type' => 'none', 'validate_fail' => 'not found', 'break_phrase' => 0, 'not' => 0, 'id' => 'nid', 'table' => 'node', 'field' => 'nid', 'validate_user_argument_type' => 'uid', 'validate_user_roles' => array( 2 => 0, 3 => 0, 4 => 0, ), 'override' => array( 'button' => 'Übersteuern', ), 'relationship' => 'none', 'default_options_div_prefix' => '', 'default_argument_image_size' => '_original', 'default_argument_fixed' => '', 'default_argument_user' => 0, 'default_argument_php' => '', 'image_size' => array( '_original' => '_original', 'thumbnail' => 'thumbnail', 'preview' => 'preview', ), 'validate_argument_node_type' => array( 'image' => 'image', 'poll' => 'poll', 'book' => 'book', 'gpx_artikel' => 'gpx_artikel', 'guestbook' => 'guestbook', 'page' => 'page', 'story' => 'story', 'test' => 'test', 'url' => 'url', 'fusioncharts' => 0, ), 'validate_argument_node_access' => 0, 'validate_argument_nid_type' => 'nid', 'validate_argument_vocabulary' => array( 1 => 0, 4 => 0, 3 => 0, ), 'validate_argument_type' => 'tid', 'validate_argument_transform' => 0, 'validate_user_restrict_roles' => 0, 'validate_argument_php' => '', ), )); $handler->override_option('filters', array( 'latitude' => array( 'operator' => '!=', 'value' => array( 'value' => '0', 'min' => '', 'max' => '', ), 'group' => '0', 'exposed' => FALSE, 'expose' => array( 'operator' => FALSE, 'label' => '', ), 'id' => 'latitude', 'table' => 'location', 'field' => 'latitude', 'relationship' => 'none', ), 'type' => array( 'operator' => 'in', 'value' => array( 'image' => 'image', 'poll' => 'poll', 'book' => 'book', 'gpx_artikel' => 'gpx_artikel', 'guestbook' => 'guestbook', 'page' => 'page', 'story' => 'story', 'test' => 'test', 'url' => 'url', ), 'group' => '0', 'exposed' => FALSE, 'expose' => array( 'operator' => FALSE, 'label' => '', ), 'id' => 'type', 'table' => 'node', 'field' => 'type', 'override' => array( 'button' => 'Übersteuern', ), 'relationship' => 'none', ), )); $handler->override_option('access', array( 'type' => 'none', )); $handler->override_option('cache', array( 'type' => 'none', )); $handler->override_option('title', ' '); $handler->override_option('empty', 'Solltest Du hier keine Angaben sehen, dann hast Du wahrscheinlich keinen Wohnort in Deinem Profil eingetragen.'); $handler->override_option('empty_format', '1'); $handler = $view->new_display('block', '01_test_userentfernung', 'block_1'); $handler->override_option('empty', 'Solltest Du hier keine Angaben sehen, dann hast Du wahrscheinlich keinen Wohnort in Deinem Profil eingetragen oder dem Beitrag wurde keine Ortsangabe hinzugefügt.'); $handler->override_option('block_description', ''); $handler->override_option('block_caching', -1);
Den kannst Du ja bei Dir in Views mal importieren um Dir das ganze anzuschauen.
Am Ende erscheint bei mir ein simpler Satz, dass der gerade gesehene Beitrag x km von seinem Heimatort entfernt ist. BZW wenn nichts erscheint, dann der Hinweis, dass bei ihm oder in der Node keine Geodaten hinterlegt sind.
Wenn Du nun einen exposed Filter für die Proximity nimmst hast Du Deine Suche.
hey dank dir. Super
am 02.10.2012 - 23:10 Uhr
hey dank dir. Super Tipp.
Hast mir einen Schubs in die absolut richtig Richtig gegeben.
Dank dir. hat geklappt! :)