BFD Calendar Posted November 3, 2013 Share Posted November 3, 2013 For some reason the only array item working here is the height.... echo $map->render($items, 'MapMarker', array('height' => '400px', 'zoom' => '15', 'lat' => '50.923813', 'lng' => '4.431493')); Link to comment Share on other sites More sharing options...
ryan Posted November 6, 2013 Author Share Posted November 6, 2013 MarkupGoogleMap is going to attempt to fit to all the markers you add to it. So the zoom, lat, lng settings you send to it are only going to matter if you only send it 0 or 1 markers in $items. For instance, if you replace "$items" with "new PageArray()" then you should see your zoom, lat and lng options working. Link to comment Share on other sites More sharing options...
rizsti Posted November 6, 2013 Share Posted November 6, 2013 I just wanted to bring to your attention that having an apostrophe in the title creates an error. Whenever I tried to create a map with locations where the title had an apostrophe in it (such as God's River, Manitoba) I would get an "Uncaught SyntaxError: Unexpected identifier" and the map wouldn't display. I changed line 191 in MarkupGoogleMap.module from: $out .= "$id.addMarker($marker->lat, $marker->lng, '$url', '$title', ''); "; to: $out .= "$id.addMarker($marker->lat, $marker->lng, '$url', \"$title\", ''); "; and that seems to have fixed it. Link to comment Share on other sites More sharing options...
BFD Calendar Posted November 9, 2013 Share Posted November 9, 2013 MarkupGoogleMap is going to attempt to fit to all the markers you add to it. So the zoom, lat, lng settings you send to it are only going to matter if you only send it 0 or 1 markers in $items. For instance, if you replace "$items" with "new PageArray()" then you should see your zoom, lat and lng options working. The options are working alright but no markers show up. Do you mean it will only work with one marker? If so then how to get the markers from a 'find' show up on the map? Basically just like in the 'skyscrapers' website. As far as I can tell you've done it totally different there. Link to comment Share on other sites More sharing options...
ryan Posted November 9, 2013 Author Share Posted November 9, 2013 I just wanted to bring to your attention that having an apostrophe in the title creates an error. This module assumes that you have entity encoding turned on for your title field. (See Setup > Fields > title > details > Text formatters). This is something you should always have enabled when using ProcessWire for any kind of HTML-driven output. Changing the quote style in the JS would not be an alternative to entity encoding, because you'd run into the same exact problem if one of the page titles happened to have quotes in it. Though you could use something like Markdown or Textile too, but I'm honestly not sure if those entity encode apostrophes or not. If not, the only solution may be an str_replace(array("'", '"'), array('"', '&apos'), $page->title); ahead of time. The options are working alright but no markers show up. Do you mean it will only work with one marker? If so then how to get the markers from a 'find' show up on the map? Basically just like in the 'skyscrapers' website. As far as I can tell you've done it totally different there. This module can accept a single Page or a PageArray. If given a PageArray it'll map them all and fit the map to the markers. If given a single page, it should still map the marker and use the zoom setting from that marker. However, you may need to modify the module to suit your needs. In the instances where I'm using it, I typically modify it. Though the skyscrapers profile was made long before this module, so it is using something quite a bit older and not a module at all. Link to comment Share on other sites More sharing options...
BFD Calendar Posted November 10, 2013 Share Posted November 10, 2013 If using the 'new PageArray()' where or how do I tell it to show the markers that I want? echo $map->render(new PageArray($pages->find("template=bfd_places, MapMarker!=''")), 'MapMarker', array('height' => '400px', 'zoom' => '2', 'lat' => '50.923813', 'lng' => '4.431493')); It's probably obvious for seasoned programmers but I can't find any reasonable or understandable examples or explanation. (Hints or directions towards sources are welcome) Link to comment Share on other sites More sharing options...
tinacious Posted November 11, 2013 Share Posted November 11, 2013 This is an amazing module! I've only scraped the surface but just from reading through this thread it seems very powerful. I was wondering if there was a quick way to hide the businesses that show up on the map. I'm using this to make a restaurant site and I'm trying to avoid having other restaurants (but businesses in general) pop up on the map. Link to comment Share on other sites More sharing options...
ryan Posted November 11, 2013 Author Share Posted November 11, 2013 If using the 'new PageArray()' where or how do I tell it to show the markers that I want? You should give it a PageArray of pages that each have a 'map' field. Each of those pages (that has a 'map' field) will be considered a marker. You specify the name of your map field as the second argument. i.e. $places = $pages->find("template=bfd_places"); $options = array('width' => '100%', 'height' => '400px'); // "map" below is the name of the FieldtypeMapMarker field in PW echo $map->render($places, 'map', $options); Also wanted to mention I found a JS error in the last version that corresponds with the error you were seeing before where no marker would appear. In fact, a marker should have been appearing, but there was a small JS error in there, which has now been fixed. Grab the latest to see if it resolves the issue you were having before? I was wondering if there was a quick way to hide the businesses that show up on the map. I'm using this to make a restaurant site and I'm trying to avoid having other restaurants (but businesses in general) pop up on the map. I've actually not seen businesses show up on the map before? At least, we aren't specifying any options to make it do so. Can you post a screenshot, just in case I'm misunderstanding what you are talking about? I'm wondering if it might somehow be picking up some google-specific setting associated with your Google account. Link to comment Share on other sites More sharing options...
ryan Posted November 11, 2013 Author Share Posted November 11, 2013 Some new $options have been added to MarkupGoogleMap: 'icon' => 'http://domain.com/path/to/icon.png', Full URL to icon file to use for markers. Blank=use default Google marker icon. 'useHoverBox' => false Use hover box? When true, shows a tooltip-type box when you hover the marker, that is populated with the markerTitleField. This is often more useful than the default presentation google maps uses. 'hoverBoxMarkup' => "<div> (see below) </div>" When useHoverBox is true, you can specify the markup used for it. Use the following (which is the default) as your starting point: <div data-top='-10' <!-- offset from top of marker (in pixels) --> data-left='15' <!-- offset from left of marker (in pixels) --> style=' <!-- inline styles, or specify your own class attribute --> background: #000; color: #fff; padding: 0.25em 0.5em; border-radius: 3px; '> </div> 3 1 Link to comment Share on other sites More sharing options...
ryan Posted November 11, 2013 Author Share Posted November 11, 2013 One other thing to add: if you use the 'useHoverBox' option and either don't see the hover box working, or see it showing up in the wrong place, you'll want to put your map in a container that has position=relative or position=absolute echo "<div style='position: relative;'>" . $map->render($items, 'map', $options) . "</div>"; Link to comment Share on other sites More sharing options...
BFD Calendar Posted November 12, 2013 Share Posted November 12, 2013 You should give it a PageArray of pages that each have a 'map' field. Each of those pages (that has a 'map' field) will be considered a marker. You specify the name of your map field as the second argument. i.e. $places = $pages->find("template=bfd_places"); $options = array('width' => '100%', 'height' => '400px'); // "map" below is the name of the FieldtypeMapMarker field in PW echo $map->render($places, 'map', $options); Also wanted to mention I found a JS error in the last version that corresponds with the error you were seeing before where no marker would appear. In fact, a marker should have been appearing, but there was a small JS error in there, which has now been fixed. Grab the latest to see if it resolves the issue you were having before? The markers now fit the map better, no more two Alaskas showing. Still, only the height option works with the solution above. When generating three maps on the same page, the first and third are exactly the same apart from height. In the second zoom and coordinates work but no markers. <?php $map = $modules->get('MarkupGoogleMap'); $places = $pages->find("template=bfd_places, MapMarker!='', sort=title"); echo $map->render($places, 'MapMarker', array('height' => '400px')); ?> <hr> <?php echo $map->render(new PageArray($pages->find("template=bfd_places")), 'MapMarker', array('height' => '400px', 'zoom' => '5', 'lat' => '50.923813', 'lng' => '4.431493')); ?> <hr> <?php $places = $pages->find("template=bfd_places"); $options = array('width' => '100%', 'height' => '300px', 'zoom' => '5', 'lat' => '50.923813', 'lng' => '4.431493'); echo $map->render($places, 'MapMarker', $options); ?> See result here: http://www.birthfactdeathcalendar.net/bfd_processwire/places/ Entering an address or coordinates in the MapMarker address field doesn't keep the info yet upon publishing the page either. It still needs to be entered twice. Once in a while, when fiddling with zoom or moving the marker on the map before publishing the page it keeps the input properly. Using the new version and will try out the new icon and hover options soon. Thank you for that. Link to comment Share on other sites More sharing options...
tinacious Posted November 12, 2013 Share Posted November 12, 2013 I've actually not seen businesses show up on the map before? At least, we aren't specifying any options to make it do so. Can you post a screenshot, just in case I'm misunderstanding what you are talking about? I'm wondering if it might somehow be picking up some google-specific setting associated with your Google account. I'm attaching a screenshot. Timeless Nails, Tango Palace, etc. I hear they're called POI (points of interest) but I am unsure how to add any settings for disabling these with the module. Thanks! Link to comment Share on other sites More sharing options...
BFD Calendar Posted November 12, 2013 Share Posted November 12, 2013 I'm attaching a screenshot. Timeless Nails, Tango Palace, etc. I hear they're called POI (points of interest) but I am unsure how to add any settings for disabling these with the module. Thanks! If you set your map to satellite view these 'points of interest' don't show up. Well, only parks and some official buildings do but no business stuff. When zooming in, street names are all visible and people can even switch to street view to actually see the place you're 'marking'. Link to comment Share on other sites More sharing options...
adrian Posted November 13, 2013 Share Posted November 13, 2013 This config option should disable the POI for you: [ { featureType: "poi", elementType: "labels", stylers: [ { visibility: "off" } ] } ] Obviously this is not a module setting, but rather a setting you need to add to the javascript that loads the map on the frontend. Hope that helps. 1 Link to comment Share on other sites More sharing options...
tinacious Posted November 13, 2013 Share Posted November 13, 2013 This config option should disable the POI for you: [ { featureType: "poi", elementType: "labels", stylers: [ { visibility: "off" } ] } ] Obviously this is not a module setting, but rather a setting you need to add to the javascript that loads the map on the frontend. Hope that helps. Thanks but this is the code I have: In the head: <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?sensor=false"></script> And then in the body: <?php // Render the map $map = $modules->get('MarkupGoogleMap'); echo $map->render($page, 'address_map', array('type' => 'ROADMAP')); ?> Where would I put the code you suggest? Link to comment Share on other sites More sharing options...
adrian Posted November 13, 2013 Share Posted November 13, 2013 Hi tina, Sorry for the limited answer - was in a hurry. Actually looking at this module a little more, I realize that I have never used the built-in render, but rather just used it as a way to enter addresses in the admin. I have been using Ryan's RCDmap class: http://processwire.com/talk/topic/690-map-marker-fieldtype/?p=10667 Although I actually haven't hidden the poi in any PW sites yet, so I don't have a final code snippet for you. However, this is the code that I used on a mobile site I developed that made use of: https://code.google.com/p/jquery-ui-map/ var myStyles =[ { featureType: "poi", elementType: "labels", stylers: [ { visibility: "off" } ] } ]; $('#map_canvas').gmap('option', 'styles', myStyles); I wouldn't necessarily recommend jquery-ui-map - I thought it might be worth trying, but mostly just seemed to add another layer of complexity. I think I would stick with the standard gmaps api. Here is a relevant POI link from google: https://developers.google.com/maps/documentation/javascript/reference#MapTypeStyleFeatureType Hope that helps. 1 Link to comment Share on other sites More sharing options...
tinacious Posted November 15, 2013 Share Posted November 15, 2013 Hi tina, Sorry for the limited answer - was in a hurry. Actually looking at this module a little more, I realize that I have never used the built-in render, but rather just used it as a way to enter addresses in the admin. I have been using Ryan's RCDmap class: http://processwire.com/talk/topic/690-map-marker-fieldtype/?p=10667 Although I actually haven't hidden the poi in any PW sites yet, so I don't have a final code snippet for you. However, this is the code that I used on a mobile site I developed that made use of: https://code.google.com/p/jquery-ui-map/ var myStyles =[ { featureType: "poi", elementType: "labels", stylers: [ { visibility: "off" } ] } ]; $('#map_canvas').gmap('option', 'styles', myStyles); I wouldn't necessarily recommend jquery-ui-map - I thought it might be worth trying, but mostly just seemed to add another layer of complexity. I think I would stick with the standard gmaps api. Here is a relevant POI link from google: https://developers.google.com/maps/documentation/javascript/reference#MapTypeStyleFeatureType Hope that helps. Thanks Adrian, I decided to just use the Google Maps API and the values created by the ProcessWire module to assist in that. I used the visibility: off for the POI and that worked. Thanks. 1 Link to comment Share on other sites More sharing options...
BFD Calendar Posted November 24, 2013 Share Posted November 24, 2013 Trying to get multiple markers on a map. All found MapMarker entries show up in the list, but only the last one from the list shows up on the map. How do I get them all to show up on the map? $features = $pages->find("parent=/events/, bfd_day.name=$todayday, bfd_month.name=$todaymonth, sort=bfd_year"); foreach($features as $feature) { $placepage = $feature->bfd_events_places_id_list; echo "{$placepage->MapMarker}"; }; $map = $modules->get('MarkupGoogleMap'); $options = array('width' => '100%', 'height' => '400px'); echo $map->render($placepage, 'MapMarker', $options); Link to comment Share on other sites More sharing options...
ryan Posted November 27, 2013 Author Share Posted November 27, 2013 Based on your code, from what I can tell, you need to pass $features to the $map->render() rather than $placepage. Link to comment Share on other sites More sharing options...
BFD Calendar Posted November 27, 2013 Share Posted November 27, 2013 When passing $features there is no map at all.... The MapMarker field is called into 'events' by a matching id, 'bfd_events_places_id_list' is the page id of a 'place' page. A 'place' page can be used for more than one event. When the id matches the fields from the 'place' page (name, street, city, state, country, MapMarker) are shown on the 'event' page, with the correct map. echo "{$placepage->MapMarker}"; shows the individual 'MapMarker' data in the foreach list but I can't find how to enter it in the $map->render(), except that it only shows the last marker. Link to comment Share on other sites More sharing options...
ryan Posted November 27, 2013 Author Share Posted November 27, 2013 The $map->render() requires either a Page with a 'MapMarker' field or a PageArray with multiple pages, each containing a 'MapMarker' field. If you are giving it a PageArray of multiple pages, and it's only showing a marker for 1 of them, then chances are that only one of the pages you gave it has a 'MapMarker' field. Keep in mind the field must be named consistently with what you tell it. Meaning, if you are calling $map->render($features, 'MapMarker', $options); then every one of the pages in $features must literally have a map marker field named 'MapMarker'. If they don't, then chances are that $features is not the group of pages you really want to send to render(). But $placepage clearly isn't either, since that's just 1 page (which is only going to print 1 marker). Based on looking at your code, I'm guessing this might be what you want? $features = $pages->find("parent=/events/, bfd_day.name=$todayday, bfd_month.name=$todaymonth, sort=bfd_year"); $markers = new PageArray(); foreach($features as $feature) { $markers->add($feature->bfd_events_places_id_list); } $map = $modules->get('MarkupGoogleMap'); $options = array('width' => '100%', 'height' => '400px'); echo $map->render($markers, 'MapMarker', $options); 1 Link to comment Share on other sites More sharing options...
BFD Calendar Posted November 27, 2013 Share Posted November 27, 2013 YES! Thank you very much. I would never have thought of anything like this. Any idea where/how I can pimp by low/moderate php skills to handle such situations? Link to comment Share on other sites More sharing options...
BFD Calendar Posted December 5, 2013 Share Posted December 5, 2013 $features = $pages->find("parent=/events/, bfd_month.name=$month, bfd_day.name=$day, sort=bfd_day, sort=bfd_year, sort=name"); $markers = new PageArray(); foreach($features as $feature) { $markers->add($feature->bfd_events_places_id_list); } if ($markers && $feature->bfd_day) { $map = $modules->get('MarkupGoogleMap'); $options = array('width' => '100%', 'height' => '500px', 'zoom' => '4'); echo $map->render($markers, 'MapMarker', $options); } else { echo ""; }; When there are two identical markers (two events happening on the same day in the same place in above example), the map is not rendered. Link to comment Share on other sites More sharing options...
gebeer Posted December 10, 2013 Share Posted December 10, 2013 Hello all, I would like to add a standard Gmaps info window (the white balloon type with shadow) to my marker. I have a single marker on the map and use standard $map->render function. From the Gmaps API documentation about info windows I see that I somehow have to add something like var infowindow = new google.maps.InfoWindow({ content: contentString }); How would I go about that, can I create something like a hook event to extend the standard render function from the module or can I just add a piece of JS to the page? Any enlightenment would be much appreciated. Cheers gerhard Link to comment Share on other sites More sharing options...
dragan Posted December 12, 2013 Share Posted December 12, 2013 I've installed this module for the first time locally, on PW 2.3.8 dev. The backend looks fine - except a notice at the bottom: Geocode OFF Anybody knows why? In my map template, I have just this: // head: <script type='text/javascript' src='https://maps.googleapis.com/maps/api/js?sensor=false'></script> // body: <?php echo $page->marker->address . '<hr>'; // outputs the address you entered echo $page->marker->lat . '<hr>'; // outputs the latitude echo $page->marker->lng . '<hr>'; // outputs the longitude $map = $modules->get('MarkupGoogleMap'); echo $map->render($page, 'map'); ?> What I actually see in the rendered frontend, is just this: <div id='mgmap1' class='MarkupGoogleMap' style='width: 100%; height: 300px;'></div><script type='text/javascript'>if(typeof google === 'undefined' || typeof google.maps === 'undefined') { alert('MarkupGoogleMap Error: Please add the maps.googleapis.com script in your document head.'); } else { var mgmap1 = new MarkupGoogleMap(); mgmap1.setOption('zoom', 18); mgmap1.setOption('mapTypeId', google.maps.MapTypeId.HYBRID); mgmap1.init('mgmap1', 0.000000, 0.000000); mgmap1.addMarker(0.000000, 0.000000, '/path/to/google-map-test/', 'Google Map Test', ''); }</script> No map is shown, no address or lat/lng are shown either. Is it necessary to add your own GM API key somewhere? Is it known to simply not work from localhost / 127.0.0.1? Or do I have to change the GM JS URL or add parameters? (v3)? Thanks in advance for tips and pointers. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now