Fehler bei der Verarbeitung der Vorlage.
Java method "static com.liferay.document.library.kernel.service.DLAppLocalServiceUtil.getFileEntry(long)" threw an exception; see cause exception in the Java stack trace. ---- FTL stack trace ("~" means nesting-related): - Failed at: fileEntry = DLAppLocalServiceUtil.get... [in template "20116#20152#34051" in function "setImgUrlFromImageObjectString" at line 237, column 25] - Reached through: @ait_contentreplacer["replace-content"] [in template "20116#20152#34051" at line 12, column 1] ----
1<#assign
2 ait_contentreplacer = taglibLiferayHash["/META-INF/ait-contentreplacer.tld"]
3
4 journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")
5 languageUtil = serviceLocator.findService("com.liferay.portal.kernel.language.LanguageUtil")
6 webKeys = staticUtil["com.liferay.portal.kernel.util.WebKeys"]
7
8 DLAppLocalServiceUtil = staticUtil["com.liferay.document.library.kernel.service.DLAppLocalServiceUtil"]
9 dlUtil = staticUtil["com.liferay.document.library.kernel.util.DLUtil"]
10/>
11
12<@ait_contentreplacer["replace-content"]>
13
14 <#assign
15 defaultDateFormat = "dd.MM.yyyy"
16 linkText = "Mehr Informationen"
17 />
18
19 <#-- Pagination -->
20 <style>
21 #_${themeDisplay.getPortletDisplay().getId()}_ocerSearchContainerPageIterator
22 .lfr-pagination {
23 display: none;
24 }
25 </style>
26
27 <script>
28 var ready = (callback) => {
29 if (document.readyState != "loading") callback();
30 else document.addEventListener("DOMContentLoaded", callback);
31 }
32
33 ready(() => {
34 // configs
35 let min = 5;
36 let max = 5;
37 let pageCountConfig = min + max;
38
39 // create new pagination objects
40 let newsPaginationNode = document.createElement('div');
41 newsPaginationNode.classList.add('news-pagination');
42
43 let paginationDesktop = document.createElement('ul');
44 paginationDesktop.classList.add('pagination', 'pag-desktop', 'hidden-xs');
45 newsPaginationNode.append(paginationDesktop);
46
47 let paginationMobile = document.createElement('ul');
48 paginationMobile.classList.add('pagination', 'pag-mobile', 'visible-xs-inline-block');
49 newsPaginationNode.append(paginationMobile);
50
51 document.querySelector('.taglib-page-iterator').prepend(newsPaginationNode)
52
53 // get the current page
54 let searchParam = window.location.search;
55 let regEx = /_cur=(\d+)/;
56 let cur = 1;
57 if (searchParam && searchParam !== '') {
58 cur = parseInt(regEx.exec(searchParam)[1]);
59 }
60
61 // get previous and next button
62 let previousButton = document.querySelector('.lfr-pagination-buttons li:nth-child(2)');
63 previousButton.querySelector('a').innerHTML = '<svg aria-hidden="true" class="lexicon-icon"><use xlink:href="#icon_arrow_alt_left" /></svg>';
64 previousButton.querySelector('a').classList.add('pagination-icon')
65
66 let nextButton = document.querySelector('.lfr-pagination-buttons li:nth-child(3)');
67 nextButton.querySelector('a').innerHTML = '<svg aria-hidden="true" class="lexicon-icon"><use xlink:href="#icon_arrow_alt_right" /></svg>';
68 nextButton.querySelector('a').classList.add('pagination-icon')
69
70 // create Desktop version
71 let paginationLinks = document.querySelectorAll('.lfr-pagination-page-selector li');
72 paginationLinks.forEach(function(el){
73 el.removeAttribute("role");
74 el.classList.add('page-item');
75 el.querySelector('a').classList.add('page-link');
76 let linkLabel = el.querySelector('a span').textContent;
77 el.querySelector('a').href = el.querySelector('a').href.replace(/_cur=\d+/g, '_cur=' + linkLabel);
78 });
79 let pageCount = paginationLinks.length;
80
81 // mark current item as active
82 paginationLinks[cur-1].classList.add('active')
83
84
85 if (pageCount > pageCountConfig) {
86 // remove left arrow / only show right arrow
87 if ((cur-(min + 1)) < 0 ) {
88 var trimPagLinks = [...paginationLinks].slice(Math.max(0, cur-(min + 1)), cur + max + 1);
89 trimPagLinks.forEach(function(el){paginationDesktop.append(el)})
90 trimPagLinks[trimPagLinks.length-1].querySelector('a').innerHTML = '<svg aria-hidden="true" class="lexicon-icon"><use xlink:href="#icon_arrow_alt_right" /></svg>';
91 trimPagLinks[trimPagLinks.length-1].querySelector('a').classList.add('pagination-icon')
92
93 // remove right arrow / only show left arrow
94 } else if ((cur+max + 1) > pageCount) {
95 let trimPagLinks = [...paginationLinks].slice(Math.max(0, cur-(min + 2)), cur + max);
96 trimPagLinks.forEach(function(el){paginationDesktop.append(el)})
97 trimPagLinks[0].querySelector('a').innerHTML = '<svg aria-hidden="true" class="lexicon-icon"><use xlink:href="#icon_arrow_alt_left" /></svg>';
98 trimPagLinks[0].querySelector('a').classList.add('pagination-icon')
99
100 // show left and right arrows
101 } else {
102 let trimPagLinks = [...paginationLinks].slice(Math.max(0, cur-(min + 2)), cur + max + 1);
103 trimPagLinks.forEach(function(el){paginationDesktop.append(el)})
104
105 if ((cur-min) !== 1) {
106 trimPagLinks[0].querySelector('a').innerHTML = '<svg aria-hidden="true" class="lexicon-icon"><use xlink:href="#icon_arrow_alt_left" /></svg>';
107 trimPagLinks[0].querySelector('a').classList.add('pagination-icon');
108 }
109
110 trimPagLinks[trimPagLinks.length-1].querySelector('a').innerHTML = '<svg aria-hidden="true" class="lexicon-icon"><use xlink:href="#icon_arrow_alt_right" /></svg>';
111 trimPagLinks[trimPagLinks.length-1].querySelector('a').classList.add('pagination-icon')
112 }
113 } else {
114 paginationLinks.forEach(function(el){paginationDesktop.append(el)})
115 }
116
117 // create Mobile Version
118 let previousButtonMobile = previousButton.cloneNode(true)
119 previousButtonMobile.classList.add('page-item')
120 previousButtonMobile.querySelector('a').classList.add('page-link')
121 paginationMobile.append(previousButtonMobile);
122
123 let currentPageNode = document.createElement('li')
124 currentPageNode.classList.add('page-item')
125 currentPageNode.innerHTML = '<span>'+cur+'</span>'
126 paginationMobile.append(currentPageNode)
127
128 let nextButtonMobile = nextButton.cloneNode(true)
129 nextButtonMobile.classList.add('page-item')
130 nextButtonMobile.querySelector('a').classList.add('page-link')
131 paginationMobile.append(nextButtonMobile);
132 });
133 </script>
134
135 <#-- Rendering -->
136 <#if !entries?has_content>
137 <#if !themeDisplay.isSignedIn()>
138 ${renderRequest.setAttribute("PORTLET_CONFIGURATOR_VISIBILITY", true)}
139 </#if>
140
141 <div class="alert alert-info">
142 <@liferay_ui["message"] key="no-entries-were-found" />
143 </div>
144 <#else>
145 <div class="content-list news-list">
146 <#list entries as entry>
147 <#assign
148 entry = entry
149
150 assetRenderer = entry.getAssetRenderer()
151
152 entryClassName = assetRenderer.getClassName()
153
154 entryTitle = htmlUtil.escape(assetRenderer.getTitle(locale))
155
156 viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, assetRenderer, entry, !stringUtil.equals(assetLinkBehavior, "showFullContent"))
157 />
158
159 <#if stringUtil.equals(entryClassName, "com.liferay.journal.model.JournalArticle")>
160
161 <#assign
162 journalArticle = assetRenderer.getArticle()
163
164 articleDocument = saxReaderUtil.read(journalArticle.getContent())
165 articleRootElement = articleDocument.getRootElement()
166
167 articleImage = ""
168 articleImageAlt = ""
169 articleHeading = ""
170 articleSummary = ""
171 >
172
173 <#list articleRootElement.elements() as dynamicElement>
174 <#switch dynamicElement.attributeValue("name")>
175 <#case "Image">
176 <#assign articleImageAlt = setImgDescriptionFromImageObjectString(dynamicElement.element("dynamic-content").getText())>
177 <#assign articleImage = setImgUrlFromImageObjectString(dynamicElement.element("dynamic-content").getText())>
178 <#break>
179 <#case "Heading">
180 <#assign
181 articleHeading = dynamicElement.element("dynamic-content").getText()
182 articleHeadingType = dynamicElement.attributeValue("type")
183 />
184 <#break>
185 <#case "Summary">
186 <#assign articleSummary = dynamicElement.element("dynamic-content").getText()>
187 <#if articleSummary?length > 400>
188 <#assign articleSummary = articleSummary?substring(0,400) + " …">
189 </#if>
190 <#break>
191 </#switch>
192 </#list>
193
194 <div class="content-list-item news-list-item">
195 <div class="lfr-portal-asset-edit-tooltip">
196 <@getEditIcon />
197 </div>
198 <div class="news-item">
199 <#if articleImage?? && articleImage != "">
200 <div class="news-item-col-image">
201 <div class="news-item-image aspect-ratio">
202 <img class="aspect-ratio-item aspect-ratio-item-top-center" alt="${articleImageAlt}" src="${articleImage}" />
203 </div>
204 </div>
205 </#if>
206 <div class="news-item-col-content">
207 <div class="news-item-content">
208 <p class="news-item-info">NEWS - <@getMetadataField fieldName="publish-date" /></p>
209 <div class="news-item-title">
210 <#if articleHeadingType != 'text'>
211 ${articleHeading}
212 <#else>
213 <h2>${articleHeading}</h2>
214 </#if>
215 </div>
216 <p class="news-item-text">${articleSummary}</p>
217 <a class="news-item-btn btn btn-secondary" href="${viewURL}" title="<@liferay.language key="read-more" />">${linkText} <svg aria-hidden="true" class="lexicon-icon scale-lexicon-icon icon-btn-right"><use xlink:href="#icn_arrow-right" /></svg></a>
218 </div>
219 </div>
220 </div>
221 </div>
222 <#else>
223 <#if themeDisplay.isSignedIn()>
224 <div class="alert alert-warning">
225 <@liferay_ui["message"] key="asset-type" /> <@liferay_ui["message"] key="not-supported" />
226 </div>
227 </#if>
228 </#if>
229 </#list>
230 </div>
231 </#if>
232
233 <#function setImgUrlFromImageObjectString objectString>
234 <#if objectString?has_content && !stringUtil.equals(objectString, "") >
235 <#assign
236 imgObjMap = jsonFactoryUtil.looseDeserialize(objectString)
237 fileEntry = DLAppLocalServiceUtil.getFileEntry(imgObjMap.fileEntryId?number)
238
239 imgPath = dlUtil.getDownloadURL(
240 fileEntry,
241 fileEntry.getFileVersion(),
242 themeDisplay,
243 "download=false",
244 false,
245 false
246 )
247 />
248 <#return imgPath>
249 <#else>
250 <#return "">
251 </#if>
252 </#function>
253
254 <#function setImgDescriptionFromImageObjectString objectString>
255 <#if objectString?has_content && !stringUtil.equals(objectString, "") >
256 <#assign
257 imgObjMap = jsonFactoryUtil.looseDeserialize(objectString)
258
259 imgDescription = imgObjMap.alt
260 />
261 <#return imgDescription>
262 <#else>
263 <#return "">
264 </#if>
265 </#function>
266
267 <#macro getEditIcon>
268 <#if assetRenderer.hasEditPermission(themeDisplay.getPermissionChecker())>
269 <#assign editPortletURL = assetRenderer.getURLEdit(renderRequest, renderResponse, windowStateFactory.getWindowState("NORMAL"), themeDisplay.getURLCurrent())!"" />
270
271 <#if validator.isNotNull(editPortletURL)>
272 <#assign title = languageUtil.format(locale, "edit-x", entryTitle, false) />
273
274 <@liferay_ui["icon"]
275 cssClass="icon-monospaced visible-interaction"
276 icon="pencil"
277 markupView="lexicon"
278 message=title
279 url=editPortletURL.toString()
280 />
281 </#if>
282 </#if>
283 </#macro>
284
285 <#macro getMetadataField
286 fieldName
287 >
288 <#if stringUtil.split(metadataFields)?seq_contains(fieldName)>
289 <span class="metadata-entry metadata-${fieldName}">
290 <#assign dateFormat = defaultDateFormat />
291
292 <#if stringUtil.equals(fieldName, "author")>
293 <@liferay.language key="by" /> ${htmlUtil.escape(portalUtil.getUserName(assetRenderer.getUserId(), assetRenderer.getUserName()))}
294 <#elseif stringUtil.equals(fieldName, "categories")>
295 <@liferay_ui["asset-categories-summary"]
296 className=entry.getClassName()
297 classPK=entry.getClassPK()
298 portletURL=renderResponse.createRenderURL()
299 />
300 <#elseif stringUtil.equals(fieldName, "create-date")>
301 ${dateUtil.getDate(entry.getCreateDate(), dateFormat, locale)}
302 <#elseif stringUtil.equals(fieldName, "expiration-date")>
303 ${dateUtil.getDate(entry.getExpirationDate(), dateFormat, locale)}
304 <#elseif stringUtil.equals(fieldName, "modified-date")>
305 ${dateUtil.getDate(entry.getModifiedDate(), dateFormat, locale)}
306 <#elseif stringUtil.equals(fieldName, "priority")>
307 ${entry.getPriority()}
308 <#elseif stringUtil.equals(fieldName, "publish-date")>
309 ${dateUtil.getDate(entry.getPublishDate(), dateFormat, locale)}
310 <#elseif stringUtil.equals(fieldName, "tags")>
311 <@liferay_ui["asset-tags-summary"]
312 className=entry.getClassName()
313 classPK=entry.getClassPK()
314 portletURL=renderResponse.createRenderURL()
315 />
316 <#elseif stringUtil.equals(fieldName, "view-count")>
317 ${entry.getViewCount()} <@liferay.language key="views" />
318 </#if>
319 </span>
320 </#if>
321 </#macro>
322
323</@>
—
10 Elemente pro Seite