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-medium")}"
115 data-src="${common.getScaledImageURL(imgUrl, "bg-image-medium")}"
116 class="slide__image" alt="${altText}"
117 />
118 <#else>
119 <img src="/o/blaues-gut-theme/images/no-image_blaues-gut.png" data-src="/o/blaues-gut-theme/images/logo_bg_mobile.svg"
120 class="slide__image no-image" alt=""/>
121 </#if>
122 </a>
123 ${Copyright}
124 </div>
125
126 <h1 class="title">
127 <a href="${linkHref}" ${linkTarget} title="${headline}" class="no-icon">${headline}</a>
128 </h1>
129 </div>
130 </div>
131 </#list>
132 </div>
133 </div>
134 </section>
135
136 <script>
137 window.addEventListener("load", function () {
138 function ${namespace}_updateInfo(info) {
139 if (info.navItems) {
140 for (var i = 0; i < info.navItems.length; i++) {
141 info.navItems[i].setAttribute('aria-label', 'Folie ' + (i + 1));
142 }
143
144 info.navItems[info.navCurrentIndex].setAttribute('aria-label', 'Folie ' + (info.navCurrentIndex + 1) + ' (aktuell)');
145 }
146
147 if (info.controlsContainer) {
148 info.controlsContainer.setAttribute('aria-label', 'Navigationselemente');
149 }
150 if (info.prevButton) {
151 info.prevButton.setAttribute('aria-label', 'zur vorhergehenden Folie springen');
152 }
153 if (info.nextButton) {
154 info.nextButton.setAttribute('aria-label', 'zur nächsten Folie springen');
155 }
156 if (info.navContainer) {
157 info.navContainer.setAttribute('aria-label', 'Auswahl der Folien')
158 }
159 }
160
161 var slider = tns({
162 container: '#slider_${namespace} .slides-list',
163 items: 2,
164 slideBy: 'page',
165 lazyload: true,
166 lazyloadSelector: '.slide__image',
167 loop: false,
168 // center: true,
169 controlsPosition: 'bottom',
170 controls: false,
171 navPosition: 'bottom',
172 touch: true,
173 mouseDrag: true,
174 freezable: true,
175 speed: 600,
176 arrowKeys: true,
177 controlsText: ['<span class="icon-bg icon-bg--arrow2-left"></span>', '<span class="icon-bg icon-bg--arrow2-right"></span>'],
178 responsive: {
179 768: {
180 items: 2,
181 edgePadding: 0,
182 gutter: 0
183 },
184 900: {
185 items: 3,
186 edgePadding: 0,
187 controls: true
188 },
189 1280: {
190 items: 3,
191 controls: true
192 },
193 1600: {
194 controls: true,
195 items: 3
196 }
197 },
198 onInit: function (info) {
199 ${namespace}_updateInfo(info);
200 }
201 });
202 slider.events.on('indexChanged', function(info) {
203 ${namespace}_updateInfo(info);
204 });
205 });
206 </script>
207</#if>