[gelöst] Gmap & Location: mehrere Fragen
am 30.03.2010 - 13:08 Uhr in
Hallo,
ich beschäftige mich immer noch mit dem Thema Kartendarstellung auf meiner Drupal-Seite und bin nun auf einige Probleme gestossen, die ich hier anführen möchte:
1. Wo kann ich die Überschift über meiner Karte ändern, der steht immer noch auf "Node Locations" und das ist für den Besucher wohl ein bisschen verwirrend.
2. Meine Nodes, die auf der Karte dargestellt werden sollen, sind quasi in 3 Bereiche aufgeteilt (nennen wir sie A, B und C). Wie krieg ich es hin, dass ich mir zusätzlich zu der Gesamtkarte (mit /map/node -> wo dann alle Einträge angezeigt werden) dann 3 "Unterkarten" erstellen kann, die dann nur die Einträge aus dem jeweiligen Bereich A, B oder C anzeigen, sozusagen eine Teilmenge.
3. Schön wäre auch, wenn ich in der Gesamtkarte 3 farblich unterschiedliche Marker (für jeden Bereich eine andere Farbe) verwenden könnte, damit der Benutzer gleich am Marker sieht, zu welchem Bereich der Eintrag gehört.
4. In dem Detail-Node, welcher durch Klick auf einen Marker angezeigt wird (ein Content Profile), binde ich eine kleine Karte mit der jeweiligen Adresse dieses Nodes ein, als Block Location Map. Leider fehlen bei dieser kleinen Karte die Zoom- und Verschiebe-Pfeile, sowie die Darstellungsoptionen, sodass die Karte nicht so wirklich zu gebrauchen ist. Wie krieg ich denn die fehlenden Elemente da rein?
Ich hoffe, der ein oder andere kann mir ein bisschen helfen.
Vielen Dan auf jeden Fall schon mal im Voraus.
Gruss, hurgl.
- Anmelden oder Registrieren um Kommentare zu schreiben
Also zu Punkt 1, Node
am 30.03.2010 - 13:34 Uhr
Also zu Punkt 1, Node Locations einfach unter Sprachen übersetzen
2. und 3. Da kommst du sicher mit einer gmap view mit exposed Filters weiter. Wenn du die view vom Typ node erstellst kannst du verschiedene Marker wählen.
4. Man kann doch im Block das Macro angeben, dieses kannst du mit dem Macrogenerator erstellen.
Macro-Generator klingt gut,
am 30.03.2010 - 13:51 Uhr
Macro-Generator klingt gut, den hab ich schon mal gesehen. Da ich aber mit dem Ding nichts anzufangen wusste, hab ich den Menüpunkt im Navigationsmenü deaktiviert :-).
Danke auch für den Tip mit den exposed filters, davon hab ich auch schon mal was gehört, aber noch nicht verwendet. Werd ich heute abend mal ausprobieren und hier Rückmeldung geben...
Gruss, hurgl.
Makro-Generator hat super
am 30.03.2010 - 21:27 Uhr
Makro-Generator hat super funktioniert.
Die Übersetzung ist auch durch.
Was mir leider Probleme bereitet ist der View vom Typ Gmap, da kriege ich immer folgende Fehlermeldung beim Aufruf des Views:
Fatal error: Cannot access empty property in /home/www/....
Folgende Einstellungen habe ich gemacht:
Darstellung: GMap
Zeilendesign: Node
Filter: = Ja (in der DB steht auch der Wert Ja drin)
Was mach ich denn hier falsch?
Schau doch mal das
am 31.03.2010 - 07:17 Uhr
Schau doch mal das an
http://drupal.org/node/428206
oder wähle statt node mal Felder.
Die Sprechblase im Marker ist leer
am 15.04.2010 - 14:05 Uhr
Mittlerweile habe ich es hinbekomen, dass die Karte mit dem Teilbereich (Filter) angezeit wird. Allerdings besteht noch das Problem, dass die Marker nicht auf den Eintrag verweisen, dh wenn ich auf einen Marker klicke, möchte ich gerne zum Eintrag geleitet werden. Es öffnet sich aber nur eine Sprechblae mit meinen Feldern, die ich selektiere (Firma, Strasse, PLZ, Ort), die Anzeige ist jedoch leer (Details zur Firma werden nicht angezeigt).
Irgendjemand eine Idee?
Ausserdem ist die Performance der Karte ziemlich mau. Es werden ca. 300 Marker abgefragt und der Aufbau der Karte dauert ca. 50 Sekunden. Wenn sie dann da ist und ich auf einen Marker klicke, braucht die Sprechblase auch ca. 10 Sekunden zum Erscheinen... Gibts hier ne Einstellung, die ich vergessen habe?
Gruss, hurgl.
Die schlechte Performance
am 16.04.2010 - 13:52 Uhr
Die schlechte Performance scheint ein temporäres Problem bei mit gewesen zu sein. Nun öffnet sich die Karte innerhalb von ca. 3 Sekunden, was ich schon als ziemlich schnell erachte.
Hat vielleicht trotzdem jemand eine Idee mit der Sprechblase, dass ich da die Adresse der Firma reinkriege und einen Link zum Öffnen des Content-Profiles?
Gruss, hurgl.
hurgl schrieb Die schlechte
am 02.05.2010 - 00:52 Uhr
Die schlechte Performance scheint ein temporäres Problem bei mit gewesen zu sein. Nun öffnet sich die Karte innerhalb von ca. 3 Sekunden, was ich schon als ziemlich schnell erachte.
Hat vielleicht trotzdem jemand eine Idee mit der Sprechblase, dass ich da die Adresse der Firma reinkriege und einen Link zum Öffnen des Content-Profiles?
Gruss, hurgl.
tach, hast du da schon eine Lösung? Hänge an diesem Problem genauso...
ich hätte vorher die anderen Patches probieren sollen. Die hier funktioniert:
<?php
--- sites/all/modules/gmap/gmap_plugin_style_gmap.inc.orig Fri Apr 03 18:34:50 2009
+++ sites/all/modules/gmap/gmap_plugin_style_gmap.inc Wed Nov 18 18:09:24 2009
@@ -94,6 +94,7 @@
// Render each group separately and concatenate. Plugins may override this
// method if they wish some other way of handling grouping.
$output = '';
+ $this->view->row_index = 0;
foreach ($sets as $title => $records) {
$markers = array();
$offsets = array();
@@ -136,6 +137,7 @@
);
$offsets[$markername]++;
}
+ $this->view->row_index++;
}
if (!empty($markers)) { // Don't draw empty maps.
$map = gmap_parse_macro($this->options['macro']);
?>
Ich versteh leider die Lösung
am 02.05.2010 - 13:36 Uhr
Ich versteh leider die Lösung nicht.
Die Originaldatei hab ich mir angeschaut (sites/all/modules/gmap/gmap_plugin_style_gmap.inc -> bei mir liegt das in /modules/gmap/gmap_plugin_style_gmap.inc). Aber wie krieg ich denn die Codeschnipsel in die Datei rein bzw. an welchen Stellen?
Kannst du mal die ganze korrigierte Datei posten, is ja nicht so lang?
Danke.
Gruss, hurgl.
das + davor bedeutet, du
am 02.05.2010 - 14:05 Uhr
das + davor im Patch bedeutet, du sollst diesen Schnipsel an der besagten Stelle einfügen. Die Zeilen davor und danach zeigen dir, wo sie rein gehören.
<?php
// $Id: gmap_plugin_style_gmap.inc,v 1.7 2009/02/05 21:51:53 bdragon Exp $
/**
* @file
* GMap style plugin.
*/
/**
* Style plugin to render a map.
*
* @ingroup views_style_plugins
*/
class gmap_plugin_style_gmap extends views_plugin_style {
/**
* Set default options
*/
function option_definition() {
$options = parent::option_definition();
$options['macro'] = array(
'default' => '[gmap ]',
);
$options['datasource'] = array(
'default' => 'location',
);
$options['markers'] = array('default' => 'static');
$options['markertype'] = array('default' => 'drupal');
$options['latfield'] = array('default' => '');
$options['lonfield'] = array('default' => '');
$options['markerfield'] = array('default' => '');
return $options;
}
function query() {
if ($this->options['datasource'] == 'location') {
$table = $this->view->query->ensure_table('location');
$this->view->query->add_field($table, 'latitude', 'gmap_lat');
$this->view->query->add_field($table, 'longitude', 'gmap_lon');
}
if ($this->options['markers'] == 'nodetype') {
$this->view->query->add_field('node', 'type', 'gmap_node_type');
}
else if ($this->options['markers'] == 'taxonomy') {
$this->view->query->add_field('gmap_taxonomy_node', 'marker', 'gmap_node_marker');
}
else if ($this->options['markers'] == 'userrole') {
$this->view->query->add_field('users_roles', 'rid', 'gmap_role_marker');
}
}
function render() {
if (empty($this->row_plugin)) {
vpr('gmap_plugin_style_gmap: Missing row plugin');
return;
}
$lat_field = 'gmap_lat';
$lon_field = 'gmap_lon';
// Determine fieldname for latitude and longitude fields.
if ($this->options['datasource'] == 'fields') {
$lat_field = $this->view->display_handler->get_handler('field', $this->options['latfield'])->field_alias;
$lon_field = $this->view->display_handler->get_handler('field', $this->options['lonfield'])->field_alias;
}
// Determine fieldname for marker field.
if ($this->options['markers'] == 'field') {
$marker_field = $this->view->display_handler->get_handler('field', $this->options['markerfield'])->field_alias;
}
$markername = isset($this->options['markertype']) ? $this->options['markertype'] : 'drupal';
$markertypes = variable_get('gmap_node_markers', array());
if ($this->options['markers'] == 'nodetype') {
$markertypes = variable_get('gmap_node_markers', array());
}
else if ($this->options['markers'] == 'userrole') {
$markertypes = variable_get('gmap_role_markers', array(DRUPAL_AUTHENTICATED_RID => 'drupal'));
}
// Group the rows according to the grouping field, if specified.
$sets = $this->render_grouping($this->view->result, $this->options['grouping']);
// Render each group separately and concatenate. Plugins may override this
// method if they wish some other way of handling grouping.
$output = '';
$this->view->row_index = 0;
foreach ($sets as $title => $records) {
$markers = array();
$offsets = array();
foreach ($records as $label => $row) {
$lat = (float)$row->{$lat_field};
$lon = (float)$row->{$lon_field};
if (!empty($lat) && !empty($lon)) {
if ($this->options['markers'] == 'nodetype') {
if (isset($markertypes[$row->gmap_node_type])) {
$markername = $markertypes[$row->gmap_node_type];
}
}
else if ($this->options['markers'] == 'taxonomy') {
if (!empty($row->gmap_node_marker)) {
$markername = $row->gmap_node_marker;
}
}
else if ($this->options['markers'] == 'userrole') {
if (!empty($row->gmap_role_marker)) {
$markername = $markertypes[DRUPAL_AUTHENTICATED_RID];
if (isset($markertypes[$row->gmap_role_marker])) {
$markername = $markertypes[$row->gmap_role_marker];
}
}
}
else if ($this->options['markers'] == 'field') {
if (!empty($row->{$marker_field})) {
$markername = $row->{$marker_field};
}
}
if (!isset($offsets[$markername])) {
$offsets[$markername] = 0;
}
$markers[] = array(
'latitude' => $lat,
'longitude' => $lon,
'markername' => $markername,
'offset' => $offsets[$markername],
'text' => $this->row_plugin->render($row),
);
$offsets[$markername]++;
}
$this->view->row_index++;
}
if (!empty($markers)) { // Don't draw empty maps.
$map = gmap_parse_macro($this->options['macro']);
$map['markers'] = $markers;
$output .= theme($this->theme_functions(), $this->view, $this->options, $map, $title);
}
}
return $output;
}
/**
* Render the given style.
*/
function options_form(&$form, &$form_state) {
parent::options_form($form, $form_state);
$form['macro'] = array(
'#type' => 'textfield',
'#title' => t('Macro'),
'#size' => 1000,
'#default_value' => $this->options['macro'],
);
$form['datasource'] = array(
'#type' => 'select',
'#title' => t('Data Source'),
'#options' => array(
'location' => t('Location.module'),
'fields' => t('Choose latitude and longitude fields'),
//'geocode' => t('Just-in-time geocoding on field named "address"'),
),
'#default_value' => $this->options['datasource'],
'#multiple' => FALSE,
);
$options = array();
// @@@ Fix this when I'm not having a monday morning.
// There's likely a more "correct" way.
foreach ($this->display->display_options['fields'] as $id => $handler) {
$data = views_fetch_data($handler['table']);
$options[$id] = $handler['label'];
}
$form['latfield'] = array(
'#title' => t('Latitude field'),
'#description' => t('Format must be degrees decimal.'),
'#type' => 'select',
'#options' => $options,
'#default_value' => $this->options['latfield'],
'#process' => array('views_process_dependency'),
'#dependency' => array('edit-style-options-datasource' => array('fields')),
);
$form['lonfield'] = array(
'#title' => t('Longitude field'),
'#description' => t('Format must be degrees decimal.'),
'#type' => 'select',
'#options' => $options,
'#default_value' => $this->options['lonfield'],
'#process' => array('views_process_dependency'),
'#dependency' => array('edit-style-options-datasource' => array('fields')),
);
$form['markers'] = array(
'#type' => 'select',
'#title' => t('Marker handling'),
// @@@ Detect view type automatically?
'#options' => array(
'nodetype' => t('By content type (for node views)'),
'taxonomy' => t('By term (for node views)'),
'userrole' => t('By user role (for user views)'),
'field' => t('Use marker field'),
'static' => t('Use single marker type'),
),
'#default_value' => $this->options['markers'],
);
$form['markerfield'] = array(
'#type' => 'select',
'#title' => t('Marker field'),
'#description' => t('You can use a views field to set the <em>markername</em> property of the markers.'),
'#options' => $options,
'#default_value' => $this->options['markerfield'],
'#process' => array('views_process_dependency'),
'#dependency' => array('edit-style-options-markers' => array('field')),
);
// Hide the taxonomy handling if gmap_taxonomy.module isn't installed.
if (!module_exists('gmap_taxonomy')) {
unset($form['markers']['#options']['taxonomy']);
}
$form['markertype'] = array(
'#type' => 'gmap_markerchooser',
'#title' => t('Marker / fallback marker to use'),
'#default_value' => $this->options['markertype'],
);
}
}
Funktioniert super. VIIEEELEN
am 02.05.2010 - 15:06 Uhr
Funktioniert super. VIIEEELEN Dank!
gargamel, du bist der Held :D
am 23.06.2010 - 15:47 Uhr
Seit Tagen habe ich das selbe Problem und endlich bin hier auf die Lösung gestoßen. Vielen Dank für den Snippet, oder besser gesagt die ganze Datei ;) Auch wenn der Thread schon geschlossen ist, muss ich auf Grund meiner Beinahevezweiflung noch mal ein großes Dankeschön aussprechen :)
VG Crouchie
Crouchie schrieb Seit Tagen
am 23.06.2010 - 18:43 Uhr
Seit Tagen habe ich das selbe Problem und endlich bin hier auf die Lösung gestoßen. Vielen Dank für den Snippet, oder besser gesagt die ganze Datei ;) Auch wenn der Thread schon geschlossen ist, muss ich auf Grund meiner Beinahevezweiflung noch mal ein großes Dankeschön aussprechen :)
VG Crouchie
na dann bin ich ja froh das ich auch mal was beitragen kann ;)
Punkt 3?!
am 12.10.2010 - 10:09 Uhr
Hi,
wie hast Du denn Punkt Nr. 3 hinbekommen? Bei mir zeigt der auf der Views Map immer nur den Default Marker an ;(
Viele Grüße,
Tobi
Habe es nun auch hinbekommen,
am 12.10.2010 - 14:02 Uhr
Habe es nun auch hinbekommen, puh ;)