Jump to content
Mats

Module: Leaflet Map

Recommended Posts

I reinstalled the module, and now its working.
When I setup the repeater to allways open the items the map and magnifying glass icon seems to work.

Thanks for your help!

Share this post


Link to post
Share on other sites

is it possible to use an image filed for the markers instead of the fontawesome option?
my code looks like this (it works with the FontIconPicker):
 

<?php
    $options = array(
    'height' => '100%',
    'markerIconColour' => 'black',
    'popupFormatter' => function($page) {
        $out[] = "<p>$page->headline</p>";
        return implode($out);
    },
    'markerFormatter' => function($page, $marker_options) {
        $marker_options['icon'] = $page->marker_icon; // Override the default icon for this marker.
        return $marker_options;
    }
);
      $items = $lage->map_repeater; 
echo $map->render($items, 'map', $options); 
                 ?>

 

Share this post


Link to post
Share on other sites

Hi!

I have problems displaying the map. It is not showing up.

I installed all the modules, setup the field and the template and put the following in my template file (home.php with delayed output):

echo $page->map->address;   // outputs the address you entered
echo $page->map->lat;       // outputs the latitude
echo $page->map->lng;       // outputs the longitude
echo $page->map->zoom;      // outputs the zoom level
$map = wire('modules')->get('MarkupLeafletMap');
echo $map->getLeafletMapHeaderLines();
echo $map->render($page, 'map');

Address, lat, lng and zoom are printed out, but there is no map. What am I doing wrong? I am not a coder.

Looks like sonething is messed up, the source code of the page looks like this

leafletmarkersource.png

Is that the correct? It is the same problem as with the google map marker field :mellow:

Share this post


Link to post
Share on other sites

fliwatuet: Looking at the source, it seems you are echoing the map outside of your body and html elements.

Share this post


Link to post
Share on other sites

This is my home.php:
 

<?php namespace ProcessWire;

echo $page->map->address;   // outputs the address you entered
echo $page->map->lat;       // outputs the latitude
echo $page->map->lng;       // outputs the longitude
echo $page->map->zoom;      // outputs the zoom level
$map = wire('modules')->get('MarkupLeafletMap');
echo $map->getLeafletMapHeaderLines();
echo $map->render($page, 'map');

// home.php (homepage) template file.
// See README.txt for more information

// Primary content is the page body copy and navigation to children.
// See the _func.php file for the renderNav() function example
$content = $page->body . renderNav($page->children);

// if there are images, lets choose one to output in the sidebar
if(count($page->images)) {
    // if the page has images on it, grab one of them randomly...
    $image = $page->images->getRandom();
    // resize it to 400 pixels wide
    $image = $image->width(400);
    // output the image at the top of the sidebar...
    $sidebar = "<img src='$image->url' alt='$image->description' />";
    // ...and append sidebar text under the image
    $sidebar .= $page->sidebar;    
} else {
    // no images...
    // append sidebar text if the page has it
    $sidebar = $page->sidebar;
}

 

Share this post


Link to post
Share on other sites

I tried. But whenever I put

<?php
$map = wire('modules')->get('MarkupLeafletMap');
echo $map->getLeafletMapHeaderLines();
?>

in the head section of _main.php I get this error message:
 

Error: Uncaught Error: Call to a member function render() on null in /home/html/portal.dev/site/templates/home.php:14
Stack trace:
#0 /home/html/portal.dev/wire/core/TemplateFile.php(268): require()
#1 [internal function]: ProcessWire\TemplateFile->___render()
#2 /home/html/portal.dev/wire/core/Wire.php(374): call_user_func_array(Array, Array)
#3 /home/html/portal.dev/wire/core/WireHooks.php(549): ProcessWire\Wire->_callMethod('___render', Array)
#4 /home/html/portal.dev/wire/core/Wire.php(399): ProcessWire\WireHooks->runHooks(Object(ProcessWire\TemplateFile), 'render', Array)
#5 /home/html/portal.dev/wire/modules/PageRender.module(515): ProcessWire\Wire->__call('render', Array)
#6 [internal function]: ProcessWire\PageRender->___renderPage(Object(ProcessWire\HookEvent))
#7 /home/html/portal.dev/wire/core/Wire.php(374): call_user_func_array(Array, Array)
#8 /home/html/portal.dev/wire/core/WireHooks.php(549): ProcessWire\Wire->_callMethod( (line 14 of /home/html/portal.dev/site/templates/home.php)

This error message was shown because: you are logged in as a Superuser. Error has been logged.

 

Share this post


Link to post
Share on other sites

@fliwatuet could you post the content of the head section of your _main.php please. It's fine to redact anything you feel is private if you need to.

Also, I use this module on a PHP7 installation and seem to have no problems with it.

  • Like 1

Share this post


Link to post
Share on other sites

This is the original file (I took out the comments):
 

<?php namespace ProcessWire;

?><!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?php echo $title; ?></title>
    <meta name="description" content="<?php echo $page->summary; ?>" />
    <link href='//fonts.googleapis.com/css?family=Lusitana:400,700|Quattrocento:400,700' rel='stylesheet' type='text/css' />
    <link rel="stylesheet" type="text/css" href="<?php echo $config->urls->templates?>styles/main.css" />
</head>

When I add

    <?php
       $map = wire('modules')->get('MarkupLeafletMap');
       echo $map->getLeafletMapHeaderLines();
    ?>

right before </head> I still get the error message mentioned above when I use "echo $map->render($page, 'map');" in home.php!

BTW: the map in the backend is working.

Share this post


Link to post
Share on other sites

@fliwatuet

Sounds like $map is undefined in the home.php file. Please try this. In _main.php...

<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title><?php echo $title; ?></title>
    <meta name="description" content="<?php echo $page->summary; ?>" />
    <link href='//fonts.googleapis.com/css?family=Lusitana:400,700|Quattrocento:400,700' rel='stylesheet' type='text/css' />
    <link rel="stylesheet" type="text/css" href="<?php echo $config->urls->templates?>styles/main.css" />
<?php
    $map = wire('modules')->get('MarkupLeafletMap');
    echo $map->getLeafletMapHeaderLines();
?>
</head>

in home.php...

<?php
    $map = wire('modules')->get('MarkupLeafletMap');
    echo $map->render($page, 'map');
?>

Also, are you sure your field is actually called 'map'?

Share this post


Link to post
Share on other sites

Yes, the field is called map.

This is working fine:

$page->map->address
$page->map->lat
$page->map->lng
$page->map->zoom

 

I changed the code to your suggestion, now there is no error message anymore, but still no map...

Share this post


Link to post
Share on other sites

Does the page you are viewing using the home template actually have a value for the map field saved in it? Scrub that, it sounds like it does.

Share this post


Link to post
Share on other sites

Ok, if you inspect the page displaying the map with your browser tools, are there any JS errors or 404s showing up for the linked resources?

Share this post


Link to post
Share on other sites
7 minutes ago, netcarver said:

Does the page you are viewing using the home template actually have a value for the map field saved in it?

What do you mean? I added the map field to the home template and then edited the home page, put an address into the map field. I then edited the home.php template file and the _main.php.

No errors as far as i can see.

Share this post


Link to post
Share on other sites

Hello @netcarver I'm having the same problem @fliwatuet reported above.

I supposed I've added everything correctly:

in my _init.php:

$map = $modules->get('MarkupLeafletMap');

inside the <head></head> of my top_nav.php:

echo $map->getLeafletMapHeaderLines();

and then in my template file:

<?php echo $map->render($page, 'map'); ?> // yes, the field is called "map"

Inspecting the code I see all the css and js files in the <head> after this comment:

<!-- Styles supporting the use of Leaflet.js -->
.. css and js are here ..

And the correct <div> is generated by the module:

<div id="mleafletmap1" class="MarkupLeafletMap" style="width: 100%; height: 500px;"></div>

...but unfortunately the map is blank on the front-page of the site. 

I'm working on localhost on ProcessWire 2.8.35.

....got suggestions for me?

Share this post


Link to post
Share on other sites

I have also this problem sometimes (especially when I am not logged in). Could it be possible that there is a limit on the Leaflet service which supports only a specific amount of requests to a certain domain?

Share this post


Link to post
Share on other sites

If you open up the inspection tools in your browser and reload the page, are there any resources that fail to load or any js errors reported?

Share this post


Link to post
Share on other sites

Thanks for the reply @netcarver. I appreciate.

No errors anywhere in the console/inspector.

I've also tried to manually point the module to the 1.0.2 version of the leaflet JS and css (changhing both unpkg.com urls) but without luck, same blank div.

Have you got time to try to reproduce this strange behaviour?

 

 

Share this post


Link to post
Share on other sites

@3fingers So, all the resources are loading - and there are no errors - and there is no output? Ok - is this on a local development box or on a server I can take a look at?

Edited to add: I have seen a correctly set-up map fail to load if a browser is blocking scripts using an extension like noscript/umatrix/ublock-origin etc.

  • Like 1

Share this post


Link to post
Share on other sites

...And there was the problem! I got an ad-blocker installed causing this issue on chrome. Unfortunately nowadays a lot of people have them turned on.

I'm going to investigate for a workaround, but It is kind of a remarkable issue for my project :(

In the meantime thanks for your support.

  • Like 1

Share this post


Link to post
Share on other sites

Hello, I have a question if this module can do the following.

I have a turtle that lives in one ore more states (US) or countries. I want to show this on a map on the page about that turtle. The input has to based on just the name of the state or country as I want to use the same also just for a text reference (like a tag).

Besides that I want a big map on a sperate page that combines all the turtles and shows which are located where with a hoover link to that turtle (page).

The final step is a page per state or country that show the map of that region on top and all related posts below...

It's a bit ambitious but I had to ask...

Share this post


Link to post
Share on other sites
On 30/12/2016 at 2:12 PM, webhoes said:

Hello, I have a question if this module can do the following.

I have a turtle that lives in one ore more states (US) or countries. I want to show this on a map on the page about that turtle. The input has to based on just the name of the state or country as I want to use the same also just for a text reference (like a tag).

Besides that I want a big map on a sperate page that combines all the turtles and shows which are located where with a hoover link to that turtle (page).

The final step is a page per state or country that show the map of that region on top and all related posts below...

It's a bit ambitious but I had to ask...

All possible.....for the maps you can select  what items you show on your map based on any field (for your specific turtle page):

$items = $pages->find("marker_colour=red");

My code here:

// LEAFLET MAP WITH BICYCLE ICONS
$items = $pages->find("marker_icon=bicycle");
$map = wire('modules')->get('MarkupLeafletMap');
$options = array(
    'markerFormatter' => function($page, $marker_options) {
              if ($page->marker_icon->title) {
                        $marker_options['icon'] = $page->marker_icon->title;
                    }
                    if ($page->marker_colour->title) {
                        $marker_options['markerColor'] = $page->marker_colour->title;
                    }
                    // And the icon colour. This is another text field. Colour values like White, Black or an RGB value are ok here.
                    if ($page->marker_icon_colour->title) {
                        $marker_options['iconColor'] = $page->marker_icon_colour->title;
                    }    
        return $marker_options;
    },
    'popupFormatter' => function($page) {
        $out[] = "<strong>$page->summary</strong>";
        $out[] = "<a href=\"$page->url\" ><img src=\"{$page->summary_image->url}\" class=\"image fit\"  /></a>";
        $out[] = "<img src=\"{$page->summary_image->url}\" width=\"200\" height=\"200\" />"; // ** NB: Use escaped double quotes if HTML attributes needed **
        return implode('<br/>', $out);
    }
);

 

and for items from different categories (species for your big map):

$items = $pages->find("marker_colour=red|green|blue");

 

Remember you can use:

'red', 'darkred', 'orange', 'green', 'darkgreen', 'blue', 'purple', 'darkpuple' & 'cadetblue'

and any icons from your version of Awesome icons: http://fontawesome.io/icons/

 

Beneath each map you can summarise revevant posts for each region or each species with the page find function based on an "options field type":

$features = $pages->find('species=loggerhead');

 

  • Like 1

Share this post


Link to post
Share on other sites

Does anyone know how you can populate the address field from another field on the template ? 

Eg; the title field is holding a country name, therefore would be nice if user does not need to type in country again, map just populates automagically.

Thx,

 

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By Gadgetto
      SnipWire - Snipcart integration for ProcessWire
      Snipcart is a powerful 3rd party, developer-first HTML/JavaScript shopping cart platform. SnipWire is the missing link between Snipcart and the content management framework ProcessWire.
      With SnipWire, you can quickly turn any ProcessWire site into a Snipcart online shop. The SnipWire plugin helps you to get your store up and running in no time. Detailed knowledge of the Snipcart system is not required.
      SnipWire is free and open source licensed under Mozilla Public License 2.0! A lot of work and effort has gone into development. It would be nice if you could donate an amount to support further development:

      Status update links (inside this thread) for SnipWire development
      2020-04-06 -- SnipWire 0.8.6 (beta) released! Adds support for Snipcart subscriptions and also fixes some problems 2020-03-21 -- SnipWire 0.8.5 (beta) released! Improves SnipWires webhooks interface and provides some other fixes and additions 2020-03-03 -- SnipWire 0.8.4 (beta) released! Improves compatibility for Windows based Systems. 2020-03-01 -- SnipWire 0.8.3 (beta) released! The installation and uninstallation process has been heavily revised. 2020-02-08 -- SnipWire 0.8.2 (beta) released! Added a feature to change the cart and catalogue currency by GET, POST or SESSION param 2020-02-03 -- SnipWire 0.8.1 (beta) released! All custom classes moved into their own namespaces. 2020-02-01 -- SnipWire is now available via ProcessWire's module directory! 2020-01-30 -- SnipWire 0.8.0 (beta) first public release! (module just submitted to the PW modules directory) 2020-01-28 -- added Custom Order Fields feature (first SnipWire release version is near!) 2020-01-21 -- Snipcart v3 - when will the new cart system be implemented? 2020-01-19 -- integrated taxes provider finished (+ very flexible shipping taxes handling) 2020-01-14 -- new date range picker, discount editor, order notifiactions, order statuses, and more ... 2019-11-15 -- orders filter, order details, download + resend invoices, refunds 2019-10-18 -- list filters, REST API improvements, new docs platform, and more ... 2019-08-08 -- dashboard interface, currency selector, managing Orders, Customers and Products, Added a WireTabs, refinded caching behavior 2019-06-15 -- taxes provider, shop templates update, multiCURL implementation, and more ... 2019-06-02 -- FieldtypeSnipWireTaxSelector 2019-05-25 -- SnipWire will be free and open source Plugin Key Features
      Fast and simple store setup Full integration of the Snipcart dashboard into the ProcessWire backend (no need to leave the ProcessWire admin area) Browse and manage orders, customers, discounts, abandoned carts, and more Multi currency support Custom order and cart fields Process refunds and send customer notifications from within the ProcessWire backend Process Abandoned Carts + sending messages to customers from within the ProcessWire backend Complete Snipcart webhooks integration (all events are hookable via ProcessWire hooks) Integrated taxes provider (which is more flexible then Snipcart own provider) Useful Links
      SnipWire in PW modules directory SnipWire Docs (please note that the documentation is a work in progress) SnipWire @GitHub (feature requests and suggestions for improvement are welcome - I also accept pull requests) Snipcart Website  
      ---- INITIAL POST FROM 2019-05-25 ----
       
    • By bernhard
      #######################
      Please use the new RockFinder2
      #######################
      WHY?
      This module was built to fill the gap between simple $pages->find() operations and complex SQL queries.
      The problem with $pages->find() is that it loads all pages into memory and that can be a problem when querying multiple thousands of pages. Even $pages->findMany() loads all pages into memory and therefore is a lot slower than regular SQL.
      The problem with SQL on the other hand is, that the queries are quite complex to build. All fields are separate tables, some repeatable fields use multiple rows for their content that belong to only one single page, you always need to check for the page status (which is not necessary on regular find() operations and therefore nobody is used to that).
      In short: It is far too much work to efficiently and easily get an array of data based on PW pages and fields and I need that a lot for my RockGrid module to build all kinds of tabular data.

      Basic Usage

       
      Docs & Download
      https://modules.processwire.com/modules/rock-finder/
      https://github.com/BernhardBaumrock/RockFinder
       
      Changelog
      180817, v1.0.6, support for joining multiple finders 180810, v1.0.5, basic support for options fields 180528, v1.0.4, add custom select statement option 180516, change sql query method, bump version to 1.0.0 180515, multilang bugfix 180513, beta release <180513, preview/discussion took place here: https://processwire.com/talk/topic/18983-rocksqlfinder-highly-efficient-and-flexible-sql-finder-module/
    • By MoritzLost
      TrelloWire
      This is a module that allows you to automatically create Trello cards for ProcessWire pages and update them when the pages are updated. This allows you to setup connected workflows. Card properties and change handling behaviour can be customized through the extensive module configuration. Every action the module performs is hookable, so you can modify when and how cards are created as much as you need to. The module also contains an API-component that makes it easy to make requests to the Trello API and build your own connected ProcessWire-Trello workflows.
      Features
      All the things the module can do for you without any custom code: Create a new card on Trello whenever a page is added or published (you can select applicable templates). Configure the target board, target list, name and description for new cards. Add default labels and checklists to the card. Update the card whenever the page is updated (optional). When the status of the card changes (published / unpublished, hidden / unhidden, trashed / restored or deleted), move the card to a different list or archive or delete it (configurable). You can extend this through hooks in many ways: Modifiy when and how cards are created. Modify the card properties (Target board & list, title, description, et c.) before they are sent to Trello. Create your own workflows by utilizing an API helper class with many convenient utility methods to access the Trello API directly. Feedback & Future Plans
      Let me know what you think! In particular:
      If you find any bugs report them here or on Github, I'll try to fix them. This module was born out of a use-case for a client project where we manage new form submissions through Trello. I'm not sure how many use-cases there are for this module. If you do use it, tell me about it! The Trello API is pretty extensive, I'll try to add some more helper methods to the TrelloWireApi class (let me know if you need anything in particular). I'll think about how the module can support different workflows that include Twig – talk to me if you have a use-case! Next steps could be a dashboard to manage pages that are connected to a Trello card, or a new section in the settings tab to manage the Trello connection. But it depends on whether there is any interest in this 🙂 Links
      Repository on Github Complete module documentation (getting started, configuration & API documentation) [Module directory pending approval] Module configuration

    • By MoritzLost
      Process Cache Control
      This module provides a simple solution to clearing all your cache layers at once, and an extensible interface to perform various cache-related actions.
      The simple motivation behind this module was that I was tired of manually clearing caches in several places after deploying a change on a live site. The basic purpose of this module is a simple Clear all caches link in the Setup menu which clears out all caches, no matter where they hide. You can customize what exactly the module does through it's configuration menu:
      Expire or delete all cache entries in the database, or selectively clear caches by namespace ($cache API) Clear the the template render cache. Clear out specific folders inside your site's cache directory (/site/assets/cache) Clear the ProCache page render cache (if your site is using ProCache) Refresh version strings for static assets to bust client-side browser caches (this requires some setup, see the full documentation for details). This is the basic function of the module. However, you can also add different cache management action through the API and execute them through the module's interface. For this advanced usage, the module provides:
      An interface to see all available cache actions and execute them. A system log and logging output on the module page to see verify what the module is doing. A CacheControlTools class with utility functions to clear out different caches. An API to add cache actions, execute them programmatically and even modify the default action. Permission management, allowing you granular control over which user roles can execute which actions. The complete documentation can be found in the module's README.
      Plans for improvements
      If there is some interest in this, I plan to expand this to a more general cache management solution. I particular, I would like to add additional cache actions. Some ideas that came to mind:
      Warming up the template render cache for publicly accessible pages. Removing all active user sessions. Let me know if you have more suggestions!
      Links
      https://github.com/MoritzLost/ProcessCacheControl ProcessCacheControl in the Module directory CHANGELOG in the repository Screenshots


    • By Macrura
      PrevNextTabs Module
      Github: https://github.com/outflux3/PrevNextTabs
      Processwire helper modules for adding page navigation within the editor.
      Overview
      This is a very simple module that adds Previous and Next links inline with the tabs on the page editor. Hovering over the tab shows the title of the previous or next page (using the admin's built in jqueryUI tooltips.)
      Usage
      This module is typically used during development where you or your editors need to traverse through pages for the purpose of proofing, flagging and/or commenting. Rather than returning to the page tree or lister, they can navigate with these links.
      Warnings
      If you are using PW version 2.6.1 or later, the system will prevent you from leaving the page if you have unsaved edits.
      For earlier versions, to avoid accidentally losing changes made to a page that might occur if a user accidentally clicks on one of these, make sure to have the Form Save Reminder module installed.
      http://modules.processwire.com/modules/prev-next-tabs/
×
×
  • Create New...