From ce9de6ded3130384f82d2df304abc4cd6b057959 Mon Sep 17 00:00:00 2001 From: David Molineus Date: Wed, 18 Oct 2017 17:01:03 +0200 Subject: [PATCH] Use template engine to render the map. --- src/Bundle/Resources/config/services.yml | 1 + .../contao/templates/leaflet_map_html.html5 | 9 ++--- .../contao/templates/leaflet_map_js.html5 | 4 +-- src/MapProvider.php | 34 +++++++++++++------ 4 files changed, 32 insertions(+), 16 deletions(-) diff --git a/src/Bundle/Resources/config/services.yml b/src/Bundle/Resources/config/services.yml index 7ddbe29..20060d1 100644 --- a/src/Bundle/Resources/config/services.yml +++ b/src/Bundle/Resources/config/services.yml @@ -16,6 +16,7 @@ services: - '@netzmacht.contao_leaflet.cache' - '@netzmacht.contao_leaflet.frontend.data_controller' - '@netzmacht.contao_toolkit.repository_manager' + - '@templating' netzmacht.contao_leaflet.libraries: class: Netzmacht\Contao\Leaflet\Frontend\Assets\LibrariesConfiguration diff --git a/src/Bundle/Resources/contao/templates/leaflet_map_html.html5 b/src/Bundle/Resources/contao/templates/leaflet_map_html.html5 index 160b248..8624e3d 100644 --- a/src/Bundle/Resources/contao/templates/leaflet_map_html.html5 +++ b/src/Bundle/Resources/contao/templates/leaflet_map_html.html5 @@ -1,6 +1,7 @@ -
+
+ }()); + diff --git a/src/Bundle/Resources/contao/templates/leaflet_map_js.html5 b/src/Bundle/Resources/contao/templates/leaflet_map_js.html5 index 8f9f88f..31ca758 100644 --- a/src/Bundle/Resources/contao/templates/leaflet_map_js.html5 +++ b/src/Bundle/Resources/contao/templates/leaflet_map_js.html5 @@ -1,5 +1,5 @@ -L.contao.addMap('', function() { - +L.contao.addMap('mapId ?>', function() { +javascript ?> return { map: map, layers: layers, controls: controls, icons: icons }; }()); diff --git a/src/MapProvider.php b/src/MapProvider.php index 533cd95..d630dcf 100644 --- a/src/MapProvider.php +++ b/src/MapProvider.php @@ -23,10 +23,12 @@ use Netzmacht\Contao\Leaflet\Mapper\Request; use Netzmacht\Contao\Leaflet\Model\LayerModel; use Netzmacht\Contao\Leaflet\Model\MapModel; use Netzmacht\Contao\Toolkit\Data\Model\RepositoryManager; +use Netzmacht\Contao\Toolkit\View\Template\TemplateReference; use Netzmacht\LeafletPHP\Definition\Map; use Netzmacht\LeafletPHP\Leaflet; use Netzmacht\LeafletPHP\Value\GeoJson\FeatureCollection; use Symfony\Component\EventDispatcher\EventDispatcherInterface as EventDispatcher; +use Symfony\Component\Templating\EngineInterface as TemplateEngine; /** * Class MapProvider. @@ -91,6 +93,13 @@ class MapProvider */ private $repositoryManager; + /** + * Template engine. + * + * @var TemplateEngine + */ + private $templateEngine; + /** * Construct. * @@ -102,6 +111,7 @@ class MapProvider * @param Cache $cache Cache. * @param DataController $dataController Data controller. * @param RepositoryManager $repositoryManager Repository manager. + * @param TemplateEngine $templateEngine Template engine. */ public function __construct( DefinitionMapper $mapper, @@ -111,7 +121,8 @@ class MapProvider ContaoAssets $assets, Cache $cache, DataController $dataController, - RepositoryManager $repositoryManager + RepositoryManager $repositoryManager, + TemplateEngine $templateEngine ) { $this->mapper = $mapper; $this->leaflet = $leaflet; @@ -121,6 +132,7 @@ class MapProvider $this->cache = $cache; $this->dataController = $dataController; $this->repositoryManager = $repositoryManager; + $this->templateEngine = $templateEngine; } /** @@ -356,19 +368,21 @@ class MapProvider protected function doGenerate($model, $filter, $elementId, $template, $style) { $definition = $this->getDefinition($model, $filter, $elementId); - $template = \Controller::getTemplate($template); - - // @codingStandardsIgnoreStart - Set for the template. $javascript = $this->leaflet->build($definition, $this->assets); $mapId = $definition->getId(); - // @codingStandardsIgnoreEnd - ob_start(); - include $template; - $content = ob_get_contents(); - ob_end_clean(); + $templateReference = new TemplateReference($template, 'html5', TemplateReference::SCOPE_FRONTEND); + $parameters = [ + 'definition' => $definition, + 'model' => $model, + 'elementId' => $elementId, + 'style' => $style, + 'javascript' => $javascript, + 'mapId' => $mapId, + ]; - $event = new GetJavascriptEvent($definition, $content); + $content = $this->templateEngine->render($templateReference, $parameters); + $event = new GetJavascriptEvent($definition, $content); $this->eventDispatcher->dispatch($event::NAME, $event); $buffer = $event->getJavascript();