Blaues Gut | Wir machen Gewässer besser | Baden-Württemberg
The following has evaluated to null or missing: ==> formField.getValue().getString(locale) [in template "blaues-gut-portal.web-resources_SERVLET_CONTEXT_/common_macros.ftl" at line 22, column 43] ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign altTag = formField.getValue()... [in template "blaues-gut-portal.web-resources_SERVLET_CONTEXT_/common_macros.ftl" in function "getAltText" at line 22, column 25] - Reached through: ${common.getAltText(curSlide.Image.da... [in template "20097#20125#SLIDER-STARTPAGE" at line 43, column 60] ----
1<#import "/blaues-gut-portal.web-resources_SERVLET_CONTEXT_/common_macros.ftl" as common>
2
3<#assign namespace = randomNamespace />
4
5<section class="slider-startpage" id="slider_${namespace}">
6 <div class="slides-list" aria-roledescription="Karusell">
7
8 <#list Slide.getSiblings() as curSlide>
9
10 <#if (curSlide.Button.ButtonStyle?? && curSlide.Button.ButtonStyle.getData()?has_content)>
11 <#assign ButtonMarkup = common.getButtonMarkup(
12 curSlide.Button.ButtonInternalLink,
13 curSlide.Button.ButtonExternalLink,
14 curSlide.Button.ButtonText,
15 curSlide.Button.ButtonStyle.getData()) />
16 <#else>
17 <#assign ButtonMarkup = common.getButtonMarkup(
18 curSlide.Button.ButtonInternalLink,
19 curSlide.Button.ButtonExternalLink,
20 curSlide.Button.ButtonText) />
21 </#if>
22
23 <#assign hasLink = false />
24
25 <#if curSlide.Button.ButtonExternalLink.data?has_content || ((curSlide.Button.ButtonInternalLink??) && (curSlide.Button.ButtonInternalLink.getFriendlyUrl()?has_content))>
26 <#assign hasLink = true />
27 </#if>
28
29 <div class="slide" role="group" aria-roledescription="Folie"
30 aria-label="Folie ${curSlide?index + 1} von ${Slide.siblings?size}">
31 <div class="slide-content">
32 <h1 class="headline">${curSlide.Headline.getData()}</h1>
33 <#if curSlide.SVG?? && curSlide.SVG.getData()?has_content>
34 <div class="slide-content-image">
35 ${curSlide.SVG.getData()}
36 </div>
37 <#else>
38 </#if>
39 <#if curSlide.Image?? && curSlide.Image.getData()?has_content>
40 <div class="slide-content-image">
41 <img src="${common.getScaledImageURL(curSlide.Image.getData(), "bg-image-medium")}"
42 data-src="${common.getScaledImageURL(curSlide.Image.getData(), "bg-image-medium")}"
43 class="slide__image" alt="${common.getAltText(curSlide.Image.data)}"
44 />
45 </div>
46 </#if>
47 </div>
48 <#if hasLink == true>
49 <div class="slide-button-area">
50 ${ButtonMarkup}
51 </div>
52 </#if>
53 </div>
54 </#list>
55 </div>
56 <div id="${namespace}_slider-controls">
57 </div>
58</section>
59
60<script>
61
62 window.addEventListener("load", function () {
63 function ${namespace}_updateInfo(info) {
64 for (var i = 0; i < info.navItems.length; i++) {
65 info.navItems[i].setAttribute('aria-label', 'Folie ' + (i + 1));
66 }
67
68 info.navItems[info.navCurrentIndex].setAttribute('aria-label', 'Folie ' + (info.navCurrentIndex + 1) + ' (aktuell)');
69
70 info.controlsContainer.setAttribute('aria-label', 'Navigationselemente');
71 info.prevButton.setAttribute('aria-label', 'zur vorhergehenden Folie springen');
72 info.nextButton.setAttribute('aria-label', 'zur nächsten Folie springen');
73 info.navContainer.setAttribute('aria-label', 'Auswahl der Folien')
74 }
75
76 var slider = tns({
77 arrowKeys: true,
78 autoHeight: false,
79 autoplay: true,
80 autoplayHoverPause: true,
81 autoplayPosition: 'bottom',
82 autoplayText: ["▶", "❚❚"],
83 autoplayTimeout: 3000,
84 center: true,
85 container: '#slider_${namespace} .slides-list',
86 controlsPosition: 'bottom',
87 controlsText: ['<span class="icon-bg icon-bg--arrow2-left"></span>', '<span class="icon-bg icon-bg--arrow2-right"></span>'],
88 freezable: true,
89 items: 1,
90 lazyload: true,
91 lazyloadSelector: '.slide__image',
92 mouseDrag: false,
93 navPosition: 'bottom',
94 slideBy: 'page',
95 speed: 600,
96 touch: true,
97 onInit: function (info) {
98 ${namespace}_updateInfo(info);
99
100 var btn = document.querySelector('#slider_${namespace} button[data-action="stop"]');
101 var nav = document.querySelector('#slider_${namespace} .tns-nav');
102
103 if (btn && nav) {
104 var wrapper = document.createElement('div');
105 wrapper.classList.add('nav-wrapper');
106
107 nav.parentNode.insertBefore(wrapper, nav);
108
109 wrapper.appendChild(nav);
110 wrapper.appendChild(btn);
111 }
112 }
113 });
114 slider.events.on('indexChanged', function (info) {
115 ${namespace}_updateInfo(info);
116 });
117 });
118</script>
Blaues Gut: Wir machen Gewässer besser
Das Thema Gewässer ist gar nicht so trocken, wie man zunächst denken mag. Tauchen Sie mit uns ein in eine faszinierende Welt. Flüsse, Bäche, Seen und Grundwasser – darunter können wir uns alle etwas vorstellen. Aber wissen wir, welche Welten sich dahinter verbergen? Grundwasserschutz ist wichtig, weil wir damit sauberes Trinkwasser sicherstellen. Ohne natürliche Flüsse, Bäche und Seen würde unser Leben veröden. Denn gutes Wasser ist nicht nur für uns Menschen wichtig, sondern es ist auch Lebensraum für Tiere und Pflanzen. Gutes Wasser ist keine Selbstverständlichkeit, sondern etwas, das wir schützen und pflegen müssen. Wasser ist eben etwas ganz Besonderes: unser Blaues Gut.
Was Sie hier finden
Auf dieser Internetseite haben wir einige Themen rund um unsere Gewässer für Sie zusammengestellt: Wir zeigen Ihnen, was wir machen, um sie zu verbessern. Außerdem geben wir Ihnen Tipps, wie und wo Sie unsere heimischen Gewässer selbst erleben können – egal, ob zu Fuß oder mit dem Rad, ob Sie sich für Wassersport interessieren oder die Kinder im Schlepptau haben. Politischen Entscheidern geben wir Hilfestellung, wie Sie selbst Maßnahmen in Ihrer Gemeinde oder in Ihrer Stadt erfolgreich realisieren können. Klicken Sie rein und entdecken Sie die Welt von Blaues Gut!
The following has evaluated to null or missing: ==> formField.getValue().getString(locale) [in template "blaues-gut-portal.web-resources_SERVLET_CONTEXT_/common_macros.ftl" at line 22, column 43] ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign altTag = formField.getValue()... [in template "blaues-gut-portal.web-resources_SERVLET_CONTEXT_/common_macros.ftl" in function "getAltText" at line 22, column 25] ----
1<#import "/blaues-gut-portal.web-resources_SERVLET_CONTEXT_/common_macros.ftl" as common>
2
3<#assign layoutService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService") />
4<#assign namespace = randomNamespace />
5<#assign AltText = "" />
6<#assign Copyright = "" />
7
8<#if AltTextImage?? && AltTextImage.getData()?has_content>
9 <#assign AltText = AltTextImage.data />
10</#if>
11
12<#assign AltText = common.getAltText(ImageLarge.data, AltText) />
13<#if (Button.ButtonStyle?? && Button.ButtonStyle.getData()?has_content)>
14 <#assign ButtonMarkup = common.getButtonMarkup(Button.ButtonInternalLink, Button.ButtonExternalLink, Button.ButtonText, Button.ButtonStyle.getData()) />
15 <#else>
16 <#assign ButtonMarkup = common.getButtonMarkup(Button.ButtonInternalLink, Button.ButtonExternalLink, Button.ButtonText) />
17</#if>
18
19<#if ImageLarge?? && ImageLarge.data?has_content && (common.getCopyrightText(ImageLarge.data)!"") != "">
20 <#assign Copyright = common.getCopyrightTag("",ImageLarge.data) />
21</#if>
22
23
24<section class="teaser">
25 <div class="colorable-bg">
26 <div class="container">
27 <div class="row justify-content-center">
28 <div class="col-md-6">
29 <section class="teaser__content">
30 <section class="image-large image-large--centered" id="image-large_${namespace}">
31 <div class="image-inner image-with-caption">
32 <#if SVG?? && SVG.getData()?has_content>
33 <div class="slide-content-image no-border svg-image">
34 ${SVG.getData()}
35 </div>
36 <#else>
37 <#if ImageLarge?? && ImageLarge.getData()?has_content>
38 <img src="${common.getScaledImageURL(ImageLarge.getData(), "bg-image-medium")}" alt="${common.getAltText(ImageLarge.data)}" class="image"/>
39 ${Copyright}
40 </#if>
41 </#if>
42 </div>
43 </section>
44 <h2>${Headline.getData()}</h2>
45 <#if Text?? && Text.getData()?has_content>
46 <p class="teaser-text">
47 ${Text.getData()}
48 </p>
49 </#if>
50 <#if Button.ButtonInternalLink.getData()?has_content || Button.ButtonExternalLink.getData()?has_content>
51 <div class="button-area">
52 ${ButtonMarkup}
53 </div>
54 </#if>
55 </section>
56 </div>
57 </div>
58 </div>
59 </div>
60
61</section>
Erst mal die „trockene“ Theorie: Die europäische Wasserrahmenrichtlinie (WRRL)
Interessieren Sie sich für die größeren Zusammenhänge? Wollen Sie wissen, ob es auch über Baden-Württemberg hinaus ähnliche Initiativen gibt und woher unser Verständnis von einem „guten Zustand“ der Gewässer überhaupt kommt? Dann sind Sie hier richtig: Auf der Seite „Grundlagen“ bekommen Sie kurz und verständlich die zentralen Informationen zur europäischen Wasserrahmenrichtlinie (WRRL).
The following has evaluated to null or missing: ==> formField.getValue().getString(locale) [in template "blaues-gut-portal.web-resources_SERVLET_CONTEXT_/common_macros.ftl" at line 22, column 43] ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign altTag = formField.getValue()... [in template "blaues-gut-portal.web-resources_SERVLET_CONTEXT_/common_macros.ftl" in function "getAltText" at line 22, column 25] ----
1<#import "/blaues-gut-portal.web-resources_SERVLET_CONTEXT_/common_macros.ftl" as common>
2
3<#assign namespace = randomNamespace />
4<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") />
5<#assign layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService") />
6
7<#function getDownloadLink content>
8 <#assign
9 dlAppService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppService")
10 dlUrlHelperUtil = serviceLocator.findService("com.liferay.document.library.util.DLURLHelper")
11 json = jsonFactoryUtil.createJSONObject(content)
12 fileEntryGroupId = json.getLong("groupId")
13 fileEntryUuid = json.getString("uuid")
14 fileEntry = dlAppService.getFileEntryByUuidAndGroupId(fileEntryUuid, fileEntryGroupId)
15 >
16 <#return httpUtil.removeParameter(dlUrlHelperUtil.getDownloadURL(fileEntry, fileEntry.getLatestFileVersion(), themeDisplay, "", false, true), "download") />
17</#function>
18
19
20<#if entries?has_content>
21 <#assign
22 parentLayoutPlid = layout.getParentPlid()
23 parentLayout = layoutLocalService.fetchLayout(parentLayoutPlid)!""
24 parentAssetPublisherId = ""
25 />
26 <#if validator.isNotNull(parentLayout)>
27 <#if parentLayout.isTypePortlet()>
28 <#assign parentLayoutTypePortlet = parentLayout.getLayoutType() />
29 <#assign parentPortlets = parentLayoutTypePortlet.getExplicitlyAddedPortlets() />
30 <#list parentPortlets as parentPortlet>
31 <#if parentPortlet.getRootPortletId() == "com_liferay_asset_publisher_web_portlet_AssetPublisherPortlet">
32 <#assign parentAssetPublisherId = parentPortlet.getPortletId() />
33
34 <#break />
35 </#if>
36 </#list>
37 </#if>
38 </#if>
39
40<#-- <#list entries as entry>-->
41<#-- <#assign assetRenderer = entry.getAssetRenderer() />-->
42
43<#-- <#if assetRenderer.getClassName()=="com.liferay.journal.model.JournalArticle">-->
44<#-- <pre>-->
45<#-- ${assetRenderer.getArticle().getContent()}-->
46<#-- </pre>-->
47<#-- </#if>-->
48<#-- </#list>-->
49
50<#-- <div style="background-color: red;height: 50px;color:white;">-->
51<#-- ###########################################-->
52<#-- </div>-->
53
54 <section class="slider-related blog-slider" id="slider_${namespace}">
55 <h2 class="headline">Die frischesten Entwicklungen: Der News-Bereich</h2>
56
57 <p>Sie wollen wissen, was sich gerade jetzt rund ums Thema Gewässer in Baden-Württemberg tut? Dann bleiben Sie immer auf dem aktuellen Pegelstand und klicken Sie sich durch zu den News.</p>
58
59 <div class="slides-wrapper">
60
61 <div class="slides-list" aria-roledescription="Karusell">
62
63 <#list entries as curEntry>
64
65
66 <#assign docXml = saxReaderUtil.read(curEntry.getAssetRenderer().getArticle().getContent()) />
67 <#assign viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, curEntry) />
68 <#assign renderer= curEntry.getAssetRenderer()/>
69
70 <#if assetLinkBehavior != "showFullContent">
71 <#assign viewURL = renderer.getURLViewInContext(renderRequest, renderResponse, viewURL) />
72 </#if>
73
74
75
76 <#assign
77 linkTarget = ""
78 linkHref= viewURL
79 headline = docXml.valueOf("//dynamic-element[@name='HeadlineArticle']/dynamic-content/text()")
80 imgUrlExisting = docXml.valueOf("//dynamic-element[@name='ExistingSlider']//dynamic-element[@name='Image']/dynamic-content/text()")
81 imgUrlNew = docXml.valueOf("//dynamic-element[@name='NeuerSlider']//dynamic-element[@name='Image']/dynamic-content/text()")
82 imgLarge = docXml.valueOf("//dynamic-element[@name='ImageLarge']/dynamic-content/text()")
83 imgUrl = ""
84 altText = ""
85 Copyright = ""
86 />
87
88 <#if imgUrlNew!="">
89 <#assign
90 imgUrl = getDownloadLink(imgUrlNew) + "&imageThumbnail=1"
91 altText = common.getAltText(imgUrlNew)
92 Copyright = common.getCopyrightTag("",imgUrlNew)
93 />
94
95 <#elseif imgUrlExisting!="">
96 <#assign
97 imgUrl = getDownloadLink(imgUrlExisting) + "&imageThumbnail=1"
98 altText = common.getAltText(imgUrlExisting)
99 Copyright = common.getCopyrightTag("",imgUrlExisting)
100 />
101 <#elseif imgLarge!="">
102 <#assign
103 imgUrl = getDownloadLink(imgLarge) + "&imageThumbnail=1"
104 altText = common.getAltText(imgLarge)
105 Copyright = common.getCopyrightTag("",imgLarge)
106 />
107 </#if>
108
109 <div class="slide" role="group" aria-roledescription="Folie" aria-label="Folie ${curEntry?index + 1} von ${entries?size}">
110 <div class="slide-content">
111 <div class="slide-content-image image-with-caption">
112 <a href="${linkHref}" ${linkTarget}>
113 <#if imgUrl!="">
114 <img src="${common.getScaledImageURL(imgUrl, "bg-image-h600")}"
115 data-src="${common.getScaledImageURL(imgUrl, "bg-image-h600")}"
116 class="slide__image" alt="${altText}"
117 width="600" height="400"
118 />
119 <#else>
120 <img src="/o/blaues-gut-theme/images/no-image_blaues-gut.png" data-src="/o/blaues-gut-theme/images/logo_bg_mobile.svg"
121 class="slide__image no-image" alt=""/>
122 </#if>
123 </a>
124 ${Copyright}
125 </div>
126
127 <h1 class="title">
128 <a href="${linkHref}" ${linkTarget} title="${headline}" class="no-icon">${headline}</a>
129 </h1>
130 </div>
131 </div>
132 </#list>
133 </div>
134 </div>
135 </section>
136
137 <script>
138 window.addEventListener("load", function () {
139 function ${namespace}_updateInfo(info) {
140 if (info.navItems) {
141 for (var i = 0; i < info.navItems.length; i++) {
142 info.navItems[i].setAttribute('aria-label', 'Folie ' + (i + 1));
143 }
144
145 info.navItems[info.navCurrentIndex].setAttribute('aria-label', 'Folie ' + (info.navCurrentIndex + 1) + ' (aktuell)');
146 }
147
148 if (info.controlsContainer) {
149 info.controlsContainer.setAttribute('aria-label', 'Navigationselemente');
150 }
151 if (info.prevButton) {
152 info.prevButton.setAttribute('aria-label', 'zur vorhergehenden Folie springen');
153 }
154 if (info.nextButton) {
155 info.nextButton.setAttribute('aria-label', 'zur nächsten Folie springen');
156 }
157 if (info.navContainer) {
158 info.navContainer.setAttribute('aria-label', 'Auswahl der Folien')
159 }
160 }
161
162 var slider = tns({
163 container: '#slider_${namespace} .slides-list',
164 items: 2,
165 slideBy: 'page',
166 lazyload: true,
167 lazyloadSelector: '.slide__image',
168 loop: false,
169 // center: true,
170 controlsPosition: 'bottom',
171 controls: false,
172 navPosition: 'bottom',
173 touch: true,
174 mouseDrag: true,
175 freezable: true,
176 speed: 600,
177 arrowKeys: true,
178 controlsText: ['<span class="icon-bg icon-bg--arrow2-left"></span>', '<span class="icon-bg icon-bg--arrow2-right"></span>'],
179 responsive: {
180 768: {
181 items: 2,
182 edgePadding: 0,
183 gutter: 0
184 },
185 900: {
186 items: 3,
187 edgePadding: 0,
188 controls: true
189 },
190 1280: {
191 items: 3,
192 controls: true
193 },
194 1600: {
195 controls: true,
196 items: 3
197 }
198 },
199 onInit: function (info) {
200 ${namespace}_updateInfo(info);
201 }
202 });
203 slider.events.on('indexChanged', function(info) {
204 ${namespace}_updateInfo(info);
205 });
206 });
207 </script>
208</#if>