Aktuelle Themen mit Video

Alles beim Neuen.

Digital hilft Baden-Württemberg.

Alles beim Neuen.

News

Asset Publisher

Videos

Asset Publisher

Weiterlesen Überdigital-dabei Folge #35 - Mobile Payment
digital-dabei Folge #35 - Mobile Payment
22.05.2020
Digital hilft durch kontaktloses Bezahlen (Mobile Payment) über das Smartphone. Besonders in ...
Weiterlesen Überdigital-dabei Folge #35 - Mobile Payment
Weiterlesen ÜberSchnelles Internet für den Hochschwarzwald
Schnelles Internet für den Hochschwarzwald
20.05.2020
Für den Ausbau der digitalen Infrastruktur im Landkreis Breisgau-Hochschwarzwald hat das Land rund 70 ...
Weiterlesen ÜberSchnelles Internet für den Hochschwarzwald
Weiterlesen ÜberDigital aufs Amt
Digital aufs Amt
27.04.2020
Das Land stellt ab sofort allen 1.101 Städten und Gemeinden auf der zentralen Plattform www.service-bw.de ...
Weiterlesen ÜberDigital aufs Amt
Weiterlesen ÜberDigital hilft bei Behördengängen.
Digital hilft bei Behördengängen.
17.04.2020
Zum Beispiel, wenn man für eine Bestätigung oder Genehmigung vom Rathaus nicht mehr anstehen muss. ...
Weiterlesen ÜberDigital hilft bei Behördengängen.
Weiterlesen ÜberDigital hilft, überall Netz zu haben.
Digital hilft, überall Netz zu haben.
17.04.2020
Zum Beispiel durch den Ausbau von schnellem Internet und 5G-Mobilfunk. Damit lassen sich nicht nur ...
Weiterlesen ÜberDigital hilft, überall Netz zu haben.
Weiterlesen Überdigital-dabei Folge #35 - Mobile Payment
digital-dabei Folge #35 - Mobile Payment
22.05.2020

digital-dabei Folge #35 - Mobile Payment

Digital hilft durch kontaktloses Bezahlen (Mobile Payment) über das Smartphone. Besonders in ...
Weiterlesen Überdigital-dabei Folge #35 - Mobile Payment
Weiterlesen ÜberSchnelles Internet für den Hochschwarzwald
Schnelles Internet für den Hochschwarzwald
20.05.2020

Schnelles Internet für den Hochschwarzwald

Für den Ausbau der digitalen Infrastruktur im Landkreis Breisgau-Hochschwarzwald hat das Land rund 70 ...
Weiterlesen ÜberSchnelles Internet für den Hochschwarzwald
Weiterlesen ÜberDigital aufs Amt
Digital aufs Amt
27.04.2020

Digital aufs Amt

Das Land stellt ab sofort allen 1.101 Städten und Gemeinden auf der zentralen Plattform www.service-bw.de ...
Weiterlesen ÜberDigital aufs Amt
Weiterlesen ÜberDigital hilft bei Behördengängen.
Digital hilft bei Behördengängen.
17.04.2020

Digital hilft bei Behördengängen.

Zum Beispiel, wenn man für eine Bestätigung oder Genehmigung vom Rathaus nicht mehr anstehen muss. ...
Weiterlesen ÜberDigital hilft bei Behördengängen.

Events

Asset Publisher

Inhalte mit Hauptkategorie Intelligente Mobilität times .

Fehler bei der Verarbeitung der Vorlage.
Java method "com.sun.proxy.$Proxy154.getEntries(com.liferay.asset.kernel.service.persistence.AssetEntryQuery)" threw an exception when invoked on com.sun.proxy.$Proxy154 object "com.liferay.portlet.asset.service.impl.AssetEntryServiceImpl@65288873"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign allEntries = assetEntryServic...  [in template "20115#20151#93443" at line 119, column 5]
----
1<#-- @ftlvariable name="groupLocalService" type="com.liferay.portal.kernel.service.GroupLocalService" --> 
2<#-- @ftlvariable name="assetVocabularyLocalService" type="com.liferay.asset.kernel.service.AssetVocabularyLocalService" --> 
3<#-- @ftlvariable name="assetCategoryLocalService" type="com.liferay.asset.kernel.service.AssetCategoryLocalService" --> 
4<#-- @ftlvariable name="ddmStructureLocalService" type="com.liferay.dynamic.data.mapping.service.DDMStructureLocalService" --> 
5<#-- @ftlvariable name="classNameLocalService" type="com.liferay.portal.kernel.service.ClassNameLocalService" --> 
6<#-- @ftlvariable name="ddmStructureFieldFilterURL" type="com.liferay.portal.kernel.portlet.LiferayPortletURL" --> 
7 
8 
9<script type="text/javascript" src="/o/digital-bw-theme/js/mini-event-calendar.min.js"></script> 
10 
11<#function filter items name value> 
12    <#local result = []> 
13    <#list items as item> 
14        <#if item[name] == value> 
15            <#local result = result + [item]> 
16        </#if> 
17    </#list> 
18    <#return result> 
19</#function> 
20 
21<#assign 
22groupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService") 
23assetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") 
24assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") 
25ddmStructureLocalService = serviceLocator.findService("com.liferay.dynamic.data.mapping.service.DDMStructureLocalService") 
26classNameLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.ClassNameLocalService") 
27assetEntryService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryService") 
28dayMonthYearFormat = dateFormatFactory.getSimpleDateFormat("dd.MM.yy") 
29globalGroup = groupLocalService.getGroup(companyId, companyId?c) 
30articleCategoryVocabularyHauptkategorie = assetVocabularyLocalService.getGroupVocabulary(globalGroup.groupId, "Hauptkategorie") 
31eventsArray = '[' 
32/> 
33 
34<#list entries as entry> 
35    <#assign 
36    assetRenderer = entry.getAssetRenderer() 
37    entryTitle = htmlUtil.escape(assetRenderer.getTitle(locale)) 
38    viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, assetRenderer, entry, !stringUtil.equals(assetLinkBehavior, "showFullContent")) 
39    viewURL = httpUtil.removeParameter(viewURL, "redirect") 
40    /> 
41 
42    <#if assetRenderer.getClassName()=="com.liferay.journal.model.JournalArticle"> 
43        <#assign 
44        assetCategories = assetCategoryLocalService.getAssetEntryAssetCategories(entry.entryId) 
45        filteredAssetCategories = filter(assetCategories, "vocabularyId", articleCategoryVocabularyHauptkategorie.vocabularyId) 
46        docXml = saxReaderUtil.read(assetRenderer.getArticle().getContent()) 
47        image = docXml.valueOf("//dynamic-element[@name='image']/dynamic-content/text()") 
48        youtubeurl = docXml.valueOf("//dynamic-element[@name='youtubeurl']/dynamic-content/text()") 
49        startdate = docXml.valueOf("//dynamic-element[@name='startdate']/dynamic-content/text()") 
50        starttime = docXml.valueOf("//dynamic-element[@name='starttime']/dynamic-content/text()") 
51        eventlocation = docXml.valueOf("//dynamic-element[@name='eventlocation']/dynamic-content/text()") 
52        eventlocation = eventlocation?replace("\n", "&#10;") 
53        city = "" 
54        /> 
55        <#list assetCategories as assetCategory> 
56            <#if assetVocabularyLocalService.fetchAssetVocabulary(assetCategory.vocabularyId)??> 
57                <#if ("Ort" == assetVocabularyLocalService.fetchAssetVocabulary(assetCategory.vocabularyId).name)> 
58                    <#assign city = assetCategory.getTitle(locale) /> 
59                    <#break /> 
60                </#if> 
61            </#if> 
62        </#list> 
63        <#assign 
64        assetCategoriesString = '' 
65        event = '{"title": "${entryTitle}", "image": "${getScaledImageURL(image)}","youtubeurl": "${youtubeurl}",' + 
66        '"startdate": "${startdate}","starttime": "${starttime}","city": "${city}","eventlocation": "${eventlocation}", ' + 
67        '"viewURL": "${viewURL}", "description": "${htmlUtil.escape(assetRenderer.getSummary(renderRequest, renderResponse))?json_string?js_string}",' 
68        eventsArray = eventsArray + event 
69        /> 
70 
71        <#list filteredAssetCategories as assetCategory> 
72            <#assign 
73            assetCategoriesString = assetCategoriesString + '"' +  assetCategory.getTitle(locale) + '"' 
74            /> 
75            <#if assetCategory?has_next> 
76                <#assign 
77                assetCategoriesString = assetCategoriesString + "," 
78                /> 
79            </#if> 
80        </#list> 
81 
82 
83        <#assign 
84        eventsArray = eventsArray + '"assetCategories": [' + assetCategoriesString + ']}' 
85        /> 
86 
87        <#if entry?has_next> 
88            <#assign 
89            eventsArray = eventsArray + "," 
90            /> 
91        </#if> 
92    </#if> 
93</#list> 
94<#assign 
95eventsArray = eventsArray + ']' 
96/> 
97 
98 
99<div id="events_desktop" class="row events-desktop desktop-version"> 
100 
101    <#assign 
102    assetEntryQuery = objectUtil("com.liferay.asset.kernel.service.persistence.AssetEntryQuery") 
103    VOID = assetEntryQuery.setEnablePermissions(true) 
104    /> 
105    <#if classNameIds?has_content> 
106        <#assign 
107        strClassNameIds = stringUtil.split(classNameIds) 
108        lngClassNameIds = getterUtil.getLongValues(strClassNameIds) 
109        VOID = assetEntryQuery.setClassNameIds(lngClassNameIds) 
110        /> 
111    </#if> 
112    <#if anyClassTypeJournalArticleAssetRendererFactory?has_content> 
113        <#assign 
114        strClassTypeIds = stringUtil.split(anyClassTypeJournalArticleAssetRendererFactory) 
115        lngClassTypeIds = getterUtil.getLongValues(strClassTypeIds) 
116        VOID = assetEntryQuery.setClassTypeIds(lngClassTypeIds) 
117        /> 
118    </#if> 
119    <#assign 
120    allEntries = assetEntryService.getEntries(assetEntryQuery) 
121    /> 
122 
123    <#assign 
124    allCategoryIds = [] 
125    /> 
126 
127    <#list allEntries as entry> 
128        <#list entry.getCategoryIds() as categoryId> 
129            <#assign 
130            strCategoryId = categoryId?c 
131            /> 
132            <#if !allCategoryIds?seq_contains(strCategoryId)> 
133                <#assign 
134                allCategoryIds = allCategoryIds + [ categoryId?c ] 
135                /> 
136            </#if> 
137        </#list> 
138    </#list> 
139 
140    <#assign 
141    allAssetCategoriesHauptkategorie = assetCategoryLocalService.getVocabularyRootCategories(articleCategoryVocabularyHauptkategorie.vocabularyId, -1, -1, null) 
142    /> 
143    <div id="filter-tab-section-events"> 
144        <ul class="filter-tabs"> 
145            <li class="filter-tab"> 
146                <a href="#tab-categories-filter"> 
147                    <h6> 
148                        <@liferay.language key="filter-by-category" /> 
149                        <i id="filter-tab-icon" class="mdi mdi-chevron-down"></i> 
150                    </h6> 
151                </a> 
152            </li> 
153        </ul> 
154 
155        <div class="tab-content"> 
156            <div id="#tab-categories-filter" class="tab-pane"> 
157                <div class="filter-list-container"> 
158                    <ul class="filter-list"> 
159                        <#assign layoutTemplateId = layout.getTypeSettingsProperty("layout-template-id")!"" /> 
160 
161                        <#list allAssetCategoriesHauptkategorie as assetCategory> 
162                            <#if allCategoryIds?seq_contains(assetCategory.categoryId?c)> 
163                                <li class="filter-item"> 
164                                    <#assign 
165                                    categoryURL = renderResponse.createRenderURL() 
166                                    VOID = categoryURL.setParameter("positionMarker", "true") 
167                                    categoryURLCssClass = "btn filter-btn-outline btn-outline event-filter" 
168                                    /> 
169                                    <#if assetCategory.getCategoryId() == paramUtil.get(renderRequest, "categoryId", 0)> 
170                                        <#assign categoryURLCssClass = "selected " + categoryURLCssClass /> 
171                                    </#if> 
172                                    <#assign 
173                                    href = categoryURL.toString() 
174                                    href = httpUtil.setParameter(href, renderResponse.getNamespace() + "categoryId", assetCategory.getCategoryId()?string) 
175                                    href = httpUtil.setParameter(href, renderResponse.getNamespace() + "resetCur", "true") 
176                                    /> 
177                                    <#if layoutTemplateId == "startpage"> 
178                                        <#assign 
179                                        href = href + "#tab-events" 
180                                        /> 
181                                    </#if> 
182                                    <a class="${categoryURLCssClass}" 
183                                       href="${href}">${assetCategory.getTitle(locale)}</a> 
184                                </li> 
185                            </#if> 
186                        </#list> 
187                    </ul> 
188 
189                    <#assign 
190                    resetCategoryURL = renderResponse.createRenderURL() 
191                    VOID = resetCategoryURL.setParameter("positionMarker", "true") 
192                    href= resetCategoryURL.toString() 
193                    href = httpUtil.setParameter(href, renderResponse.getNamespace() + "categoryId", "0") 
194                    /> 
195 
196                    <#if layoutTemplateId == "startpage"> 
197                        <#assign 
198                        href = href + "#tab-events" 
199                        /> 
200                    </#if> 
201 
202                    <a href="${href}" class="btn"> 
203                        Filter zurücksetzen 
204                        <i class="mdi mdi-close"></i> 
205                    </a> 
206                </div> 
207            </div> 
208        </div> 
209    </div> 
210 
211 
212    <div class="container-items row"> 
213        <div id="event-items" class="col-md-6 col-lg-8"> 
214            <#if !entries?has_content> 
215                <div class="alert alert-info"> 
216                    <@liferay_ui["message"] key="there-are-no-results" /> 
217                </div> 
218            </#if> 
219        </div> 
220        <div class="col-md-6 col-lg-4 event-calendar-wrapper"> 
221            <div class="col-md-12"> 
222                <div class="card"> 
223                    <div class="asset-abstract event-calendar-card"> 
224                        <div class="aspect-ratio aspect-ratio-bg-cover" style="max-height: 470px;"> 
225                            <div class="card-content"> 
226                                <h4>Eventkalender</h4> 
227                                <span>Entdecken Sie neue und spannende Events zum Thema Digitalisierung in Baden-Württemberg!</span> 
228                                <div id="mini-event-calendar"></div> 
229                            </div> 
230                        </div> 
231                    </div> 
232                    <div class="asset-abstract selected-event-card"> 
233                        <div class="aspect-ratio aspect-ratio-bg-cover" style="max-height: 300px; padding-bottom: 420px"> 
234                            <h6 class="selected-event-date"> 
235                                <img class="item-icon" 
236                                     src="${themeDisplay.getPathThemeImages()}/icons/icon_calendar.svg" alt="" /> 
237                                <span id="selected-event-date-text"></span> 
238                            </h6> 
239                            <div class="card-content"> 
240                                <div class="selected-event"></div> 
241                            </div> 
242                        </div> 
243                    </div> 
244                </div> 
245            </div> 
246        </div> 
247 
248        <div class="col-md-12 center"> 
249            <a class="btn btn-outline" href="/events"> <@liferay["language"] key="more-events" />&nbsp;<i 
250                    class="mdi mdi-arrow-right"></i></a> 
251        </div> 
252    </div> 
253</div> 
254    <script> 
255        var events = JSON.parse('${eventsArray}'); 
256        var eventsContainer = $('#event-items'); 
257        var now = new Date(); 
258        var activeDate = now.getDate(); 
259        var activeMonth = now.getMonth(); 
260        var activeYear = now.getFullYear(); 
261        var hasFutureEvents = false; 
262        events && events.forEach(function (event) { 
263            var timestamp = new Date(event.startdate).getTime(); 
264            event.timestamp = timestamp; 
265            if (timestamp > now.getTime()) { 
266                hasFutureEvents = true; 
267
268        }); 
269        var activeMonthEvents = getMonthlyEvents(events, activeMonth, activeYear); 
270        var selectedEvent = null; 
271        var event_cal = $("#mini-event-calendar"); 
272        var selected_event_date = $("#selected-event-date-text"); 
273 
274        selected_event_date.append(("0" + activeDate).slice(-2) + '.' + ("0" + (activeMonth + 1)).slice(-2) + '.' + activeYear); 
275 
276        activeMonthEvents.forEach(function (event) { 
277            if (event.startdate === (activeYear + '-' + ("0" + (activeMonth + 1)).slice(-2) + '-' + ("0" + activeDate).slice(-2))) { 
278                selectedEvent = event; 
279
280        }); 
281        buildSelectedEvent(selectedEvent); 
282 
283        // filter tabs 
284        var initializeFilterTab = function () { 
285            YUI().use( 
286                    'aui-tabview', 
287                    function (Y) { 
288                        function onTabClick(e) { 
289                            var currentTarget = e.currentTarget; 
290                            if (currentTarget && currentTarget.classList.contains('active')) { 
291                                e.preventDefault(); 
292                                e.stopPropagation(); 
293                                tabview.deselectAll(); 
294
295
296 
297                        var tabview = new Y.TabView( 
298
299                                    srcNode: '#filter-tab-section-events' 
300
301                        ).render(); 
302                        tabview.deselectAll(); 
303                        $('.filter-tab').on('click', onTabClick); 
304 
305
306            ); 
307        }; 
308 
309        initializeFilterTab(); 
310        Liferay.on('assetPublisherLoadMoreSuccess', initializeFilterTab); 
311 
312        // calender 
313        event_cal.MEC({ 
314            events: events 
315        }); 
316 
317        event_cal.addClass('current-month-year'); 
318 
319        event_cal.on('date-changed', function (e, date, month, year) { 
320            activeDate = date; 
321            activeMonth = month; 
322            activeYear = year; 
323            activeMonthEvents = getMonthlyEvents(events, activeMonth, activeYear); 
324            eventsContainer.empty(); 
325            activeMonthEvents.forEach(function (event) { 
326                eventsContainer.append('<div class="col-lg-6" itemscope itemtype="http://schema.org/Event">' + buildEventCard(event) + '</div>'); 
327            }); 
328            events && events.forEach(function (event) { 
329                var eventDate = new Date(activeYear + '-' + activeMonth + '-' + activeDate).getTime(); 
330                if (event.timestamp > eventDate) { 
331                    hasFutureEvents = true; 
332
333            }); 
334 
335            if (month == now.getMonth() && year == now.getFullYear()) { 
336                event_cal.addClass('current-month-year'); 
337            } else { 
338                event_cal.removeClass('current-month-year'); 
339
340 
341            Liferay.fire('eventCalendarDateChanged'); 
342        }); 
343 
344        event_cal.on('date-select', function (e, selectedDate) { 
345            selected_event_date.text(selectedDate.toLocaleDateString('de-DE', {day: '2-digit', month: '2-digit', year: 'numeric'})); 
346        }); 
347 
348        event_cal.on('show-event', function (e, event) { 
349            selectedEvent = event; 
350            buildSelectedEvent(event); 
351        }); 
352 
353        var currentMonthHasEvents = true; 
354 
355        while ((!activeMonthEvents || activeMonthEvents.length === 0) && hasFutureEvents) { 
356            event_cal.viewNextMonth(); 
357 
358            currentMonthHasEvents = false; 
359
360 
361        if (currentMonthHasEvents) { 
362            activeMonthEvents.forEach(function (event) { 
363                eventsContainer.append('<div class="col-lg-6" itemscope itemtype="http://schema.org/Event">' + buildEventCard(event) + '</div>'); 
364            }); 
365
366 
367 
368        function getMonthlyEvents(events, month, year) { 
369            var res = events 
370                    .filter(function (event) { 
371                        var eventDate = new Date(event.startdate); 
372                        return eventDate.getMonth() === month && eventDate.getFullYear() === year; 
373                    }) 
374                    .sort(function (a, b) { 
375                        var date1 = new Date(a.startdate); 
376                        var date2 = new Date(b.startdate); 
377                        return date1.getDate() > date2.getDate(); 
378                    }); 
379            if (res.length > 4) { 
380                res = res.slice(0, 4); 
381
382            return res; 
383
384 
385        function buildSelectedEvent(event) { 
386            var selectedEventContainer = $('.selected-event'); 
387            selectedEventContainer.empty(); 
388            if (!event) { 
389                selectedEventContainer.append('<span>Keine Veranstaltungen<span>'); 
390            } else { 
391                selectedEventContainer.append( 
392                        '<h4 class="calender-title">' + event.title + '</h4>' + 
393                        '<p>' + event.description + '</p>' + 
394                        '<a href="' + event.viewURL + '"><i class="mdi mdi-arrow-right"></i></a>' 
395                ); 
396
397
398 
399        // events 
400        function buildEventCard(event) { 
401            var city = event.city ? '<span class="metadata-entry metadata-city location" itemprop="location">' + event.city + '</span>' : ''; 
402            var assetCategories = ""; 
403            event.assetCategories.forEach(function (category) { 
404                assetCategories += ' <span class="category badge badge-default">' + category + ' </span>'; 
405            }); 
406 
407            return '<div class="asset-abstract card events">' + 
408                    '<img class="item-icon" src="' + themeDisplay.getPathThemeImages() + '/icons/icon_calendar.svg" alt="" />' + 
409                    '<a href="' + event.viewURL + '" itemprop="url"><span class="hide-accessible"><@liferay.language key="read-more" /> <@liferay.language key="about" />' + event.title + '</span>' + 
410                    '<div class="aspect-ratio aspect-ratio-bg-cover" style="max-height: 300px;">' + 
411                    '<img class="img lazy-image" data-src=' + event.image + ' title=' + event.title + ' alt=' + event.title + ' itemprop="image" content=' + themeDisplay.getPortalURL() + event.image + '>' + 
412                    '<div class="img-filter">' + 
413                    '<div class="bg-box">' + 
414                    '<div class="card-content">' + 
415                    '<span itemprop="startDate" content="' + new Date(event.startdate).toISOString() + '"></span>' + 
416                    '<span itemprop="location" itemscope itemtype="http://schema.org/Place"><span itemprop="address" content="' + event.eventlocation + '"></span></span>' + 
417                    '<span class="date">' + new Date(event.startdate).toLocaleDateString('de-DE', {day: '2-digit', month: '2-digit', year: 'numeric'}) + '</span>' + city + 
418                    '<h3 class="asset-title">' + 
419                    '<span itemprop="name">' + event.title + '</span>' + 
420                    '</h3>' + 
421                    '<div class="asset-summary" itemprop="description">' + 
422                    event.description + 
423                    '</div>' + 
424                    assetCategories + 
425                    '<i class="mdi mdi-arrow-right"></i>' + 
426                    '</div>' + 
427                    '</div>' + 
428                    '</div>' + 
429                    '</div' + 
430                    '</a>' + 
431                    '</div>'; 
432
433    </script> 
434 
435 
436<#if entries?has_content> 
437<div id="events_mobile" class="events-mobile swiper-version"> 
438    <div class="swiper-container event-swiper"> 
439        <!-- Additional required wrapper --> 
440        <div class="swiper-wrapper"> 
441                        <#list entries as entry> 
442                            <#if entry?counter == 5> 
443                                <#break /> 
444                            </#if> 
445                            <#assign 
446                            assetRenderer = entry.getAssetRenderer() 
447                            entryTitle = htmlUtil.escape(assetRenderer.getTitle(locale)) 
448                            viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, assetRenderer, entry, !stringUtil.equals(assetLinkBehavior, "showFullContent")) 
449                            viewURL = httpUtil.removeParameter(viewURL, "redirect") 
450                            /> 
451 
452                            <#if assetRenderer.getClassName()=="com.liferay.journal.model.JournalArticle"> 
453                                <#assign 
454                                assetCategories = assetCategoryLocalService.getAssetEntryAssetCategories(entry.entryId) 
455                                docXml = saxReaderUtil.read(assetRenderer.getArticle().getContent()) 
456                                image = docXml.valueOf("//dynamic-element[@name='image']/dynamic-content/text()") 
457                                youtubeId = docXml.valueOf("//dynamic-element[@name='youtubeId']/dynamic-content/text()") 
458                                startdate = docXml.valueOf("//dynamic-element[@name='startdate']/dynamic-content/text()") 
459                                starttime = docXml.valueOf("//dynamic-element[@name='starttime']/dynamic-content/text()") 
460                                enddate = docXml.valueOf("//dynamic-element[@name='enddate']/dynamic-content/text()") 
461                                endtime = docXml.valueOf("//dynamic-element[@name='endtime']/dynamic-content/text()") 
462                                eventlocation = docXml.valueOf("//dynamic-element[@name='eventlocation']/dynamic-content/text()") 
463                                city = "" 
464                                /> 
465                                <#list assetCategories as assetCategory> 
466                                    <#if assetVocabularyLocalService.fetchAssetVocabulary(assetCategory.vocabularyId)??> 
467                                        <#if ("Ort" == assetVocabularyLocalService.fetchAssetVocabulary(assetCategory.vocabularyId).name)> 
468                                            <#assign city = assetCategory.getTitle(locale) /> 
469                                            <#break /> 
470                                        </#if> 
471                                    </#if> 
472                                </#list> 
473 
474                         <div class="swiper-slide" itemscope itemtype="http://schema.org/Event"> 
475                                <@getEditIcon /> 
476 
477                             <#assign startDateValue = "" /> 
478                             <#assign endDateValue = "" /> 
479                             <#if startdate?? && startdate?has_content> 
480                                 <#assign startDateValue = startdate /> 
481                             </#if> 
482                             <#if enddate?? && enddate?has_content> 
483                                 <#assign endDateValue = enddate /> 
484                             </#if> 
485                             <#assign startTimeValue = "" /> 
486                             <#assign endTimeValue = "" /> 
487                             <#if (starttime?? && starttime?has_content)> 
488                                 <#assign startTimeValue = starttime /> 
489                             </#if> 
490                             <#if (endtime?? && endtime?has_content)> 
491                                 <#assign endTimeValue = endtime /> 
492                             </#if> 
493 
494                             <#if startDateValue?has_content> 
495                                <span itemprop="startDate" content="<@formatIsoDateTime dateValue=startDateValue timeValue=startTimeValue />"></span> 
496                             </#if> 
497                             <#if endDateValue?has_content> 
498                                <span itemprop="endDate" content="<@formatIsoDateTime dateValue=endDateValue timeValue=endTimeValue />"></span> 
499                             </#if> 
500 
501                             <a href="${viewURL}" itemprop="url"><span 
502                                     class="hide-accessible"><@liferay.language key="read-more" /> <@liferay.language key="about" />${entryTitle}</span> 
503                                 <div class="asset-abstract card events"> 
504                                     <img class="item-icon" 
505                                          src="${themeDisplay.getPathThemeImages()}/icons/icon_calendar.svg" alt=""/> 
506                    <#assign imageURL = "" /> 
507                     <#assign isYoutube = false /> 
508 
509                    <#if image?has_content> 
510                        <#assign imageURL = image /> 
511                        <#assign seoImageURL = portal.getPortalURL(themeDisplay) + imageURL /> 
512                    <#elseif youtubeId?has_content> 
513                        <#assign imageURL = "//i.ytimg.com/vi/${youtubeId}/maxresdefault.jpg" /> 
514                        <#assign seoImageURL = "https:" + imageURL /> 
515                        <#assign isYoutube = true /> 
516                    </#if> 
517                                     <div class="aspect-ratio aspect-ratio-bg-cover" style="max-height: 300px;"> 
518                                         <@createScaledImageTag imageURL=imageURL title=entryTitle seoImageURL=seoImageURL isYoutube=isYoutube/> 
519                                         <div class="img-filter"> 
520                                             <div class="bg-box"> 
521                                                 <div class="card-content"> 
522                        <#if startdate?has_content> 
523                            <#assign 
524                            startDateObj = dateUtil.parseDate("yyyy-MM-dd", startdate, locale) 
525                            /> 
526                            <span class="metadata-entry metadata-startdate">${dayMonthYearFormat.format(startDateObj)}</span> 
527                        </#if> 
528 
529                        <span itemprop="location" itemscope itemtype="http://schema.org/Place"> 
530                            <#if city?has_content> 
531                                <span class="metadata-entry metadata-city location">${city}</span> 
532                                <span itemprop="name" content="${city}"></span> 
533                            </#if> 
534                            <span itemprop="address" content="${eventlocation}"></span> 
535                        </span> 
536 
537                                                     <h3 class="asset-title"> 
538                                                         <span itemprop="name">${entryTitle}</span> 
539                                                     </h3> 
540 
541                                                     <div class="asset-summary" itemprop="description"> 
542                                                         ${htmlUtil.escape(assetRenderer.getSummary(renderRequest, renderResponse))} 
543                                                     </div> 
544                        <#list assetCategories as assetCategory> 
545                            <#if assetCategory.vocabularyId == articleCategoryVocabularyHauptkategorie.vocabularyId> 
546                                <span class="category badge badge-default"> 
547                                    ${assetCategory.getTitle(locale)} 
548                                </span> 
549                            </#if> 
550                        </#list> 
551                                                     <i class="mdi mdi-arrow-right"></i> 
552 
553                                                 </div> 
554                                             </div> 
555                                         </div> 
556                                     </div> 
557                                 </div> 
558                             </a> 
559                         </div> 
560                            </#if> 
561                        </#list> 
562        </div> 
563 
564        <!-- If we need pagination --> 
565        <div class="swiper-pagination"></div> 
566    </div> 
567    <#if entries?has_content> 
568        <div class="col-md-12 center"> 
569            <a class="btn btn-outline" href="/events"> <@liferay["language"] key="more-events" />&nbsp;<i 
570                    class="mdi mdi-arrow-right"></i></a> 
571        </div> 
572    </#if> 
573</div> 
574<script> 
575    var eventSwiper; 
576 
577    function onResize() { 
578        var width = document.body.clientWidth; 
579        if (eventSwiper && width < 992) { 
580            eventSwiper.update(); 
581        } else if (width < 992) { 
582            if (AUI().one('.event-swiper')) { 
583                eventSwiper = new Swiper('.event-swiper', { 
584                    pagination: { 
585                        el: '#events_mobile .swiper-pagination' 
586
587                }); 
588 
589                activeMonthEvents.forEach(function (event) { 
590                    eventSwiper.appendSlide( 
591                        '<div class="swiper-slide">' + buildEventCard(event) + '</div>' 
592                    ); 
593                }); 
594
595        } else if (eventSwiper) { 
596            eventSwiper.destroy(); 
597            eventSwiper = null; 
598
599
600 
601    onResize(); 
602    window.addEventListener('resize', onResize); 
603 
604    Liferay.on('endNavigate', function() { 
605        eventSwiper = null; 
606        onResize(); 
607    }); 
608</script> 
609</#if> 
610 
611<#if paramUtil.get(renderRequest, "positionMarker", false)> 
612    <script type="text/javascript"> 
613        //var elem = document.getElementById('p_p_id_${themeDisplay.portletDisplay.portletName}_INSTANCE_${themeDisplay.portletDisplay.instanceId}_'); 
614        var elem = document.getElementById('tab-items'); 
615 
616        if (elem) { 
617            elem.scrollIntoView( 
618
619                        block: "start", 
620
621            ); 
622
623    </script> 
624 
625</#if> 
626 
627<#macro getEditIcon> 
628    <#if assetRenderer.hasEditPermission(themeDisplay.getPermissionChecker())> 
629        <#assign redirectURL = renderResponse.createRenderURL() /> 
630 
631        ${redirectURL.setParameter("mvcPath", "/add_asset_redirect.jsp")} 
632        ${redirectURL.setWindowState("pop_up")} 
633 
634        <#assign editPortletURL = assetRenderer.getURLEdit(renderRequest, renderResponse, windowStateFactory.getWindowState("pop_up"), redirectURL)!"" /> 
635 
636        <#if validator.isNotNull(editPortletURL)> 
637            <#assign title = languageUtil.format(locale, "edit-x", entryTitle, false) /> 
638 
639            <@liferay_ui["icon"] 
640            cssClass="icon-monospaced visible-interaction" 
641            icon="pencil" 
642            markupView="lexicon" 
643            message=title 
644            url="javascript:Liferay.Util.openWindow({id:'" + renderResponse.getNamespace() + "editAsset', title: '" + title + "', uri:'" + htmlUtil.escapeURL(editPortletURL.toString()) + "'});" 
645            /> 
646        </#if> 
647    </#if> 
648</#macro> 
649 
650<#function getYoutubeId youtubeUrl> 
651    <#assign url = httpUtil.getPath(youtubeUrl) /> 
652    <#assign url = stringUtil.extractLast(url, '/') /> 
653    <#return url /> 
654</#function> 
655 
656<#function getScaledImageURL imageURL> 
657    <#assign 
658    imageFileUid = stringUtil.extractLast(imageURL, "/") 
659    /> 
660    <#if (stringUtil.extractFirst(imageFileUid, "t")??)> 
661        <#assign imageFileUid = stringUtil.extractFirst(imageFileUid, "t")/> 
662        <#assign imageFileUid= imageFileUid?substring(0,imageFileUid?length-1)/> 
663    </#if> 
664 
665    <#attempt> 
666        <#assign 
667        dlAppService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppService") 
668        fileEntry = dlAppService.getFileEntryByUuidAndGroupId(imageFileUid,groupId)!"" 
669        /> 
670        <#if fileEntry??> 
671            <#assign 
672            scaledImageURL = "/o/adaptive-media/image/${fileEntry.fileEntryId?c}/720/${fileEntry.fileName}" 
673            /> 
674            <#return scaledImageURL /> 
675        <#else> 
676            <#return imageURL /> 
677        </#if> 
678        <#recover> 
679            <#return imageURL /> 
680    </#attempt> 
681</#function> 
682 
683<#macro createScaledImageTag imageURL title seoImageURL isYoutube> 
684    <img class="img lazy-image" data-src="${isYoutube?then(imageURL, getScaledImageURL(imageURL))}" title="${htmlUtil.escapeAttribute(title)}" alt="${htmlUtil.escapeAttribute(title)}" itemprop="image" content="${seoImageURL}" /> 
685</#macro> 
686 
687<#macro formatIsoDateTime dateValue="" timeValue=""> 
688    <#assign 
689    dateObj = dateUtil.parseDate("yyyy-MM-dd", dateValue, locale) 
690    /> 
691    <#if timeValue?? && timeValue?has_content> 
692        <#assign timeString = timeValue?replace('[A-Za-z]+', '', 'ri') /> 
693        <#assign timeString = timeValue?replace('\\.', ':', 'ri') /> 
694        <#assign timeString = timeString?trim /> 
695        <#assign dateAndTimeString = dateValue + " " + timeString /> 
696        <#attempt> 
697            <#assign 
698            dateObj = dateAndTimeString?datetime('yyyy-MM-dd HH:mm') 
699            /> 
700            <#recover> 
701        </#attempt> 
702    </#if> 
703    <#assign isoDateFormat = dateFormatFactory.getSimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ") /> 
704${isoDateFormat.format(dateObj)}</#macro> 

Das wollen wir erreichen

digital@bw bewegt

Das wollen wir erreichen

Das wollen wir erreichen (Info-Box)

Digitale Leitregion Europas werden

Digitale Leitregion Europas werden

Nachhaltige Entwicklung voranbringen

Nachhaltige Entwicklung voranbringen

Firmengründungen unterstützen & Arbeitsplätze schaffen

Firmengründungen unterstützen & Arbeitsplätze schaffen

Digitale Leitregion Europas werden

Digitale Leitregion Europas werden

Nachhaltige Entwicklung voranbringen

Nachhaltige Entwicklung voranbringen

Firmengründungen unterstützen & Arbeitsplätze schaffen

Firmengründungen unterstützen & Arbeitsplätze schaffen

Wie wir das schaffen? (Gelbe Info-Box)

WIE WIR DAS SCHAFFEN?

Gemeinsam mit Bund, Landeseinrichtungen, Kommunen, Unternehmen sowie Bürgerinnen und Bürgern

Unsere Partner 

Die Projekte

Die Projekte

Hier machen wir Digitalisierung und Innovation im Land sichtbar.

Asset Publisher