Fehler bei der Verarbeitung der Vorlage.
Java method "com.sun.proxy.$Proxy909.getLatestArticle(long)" threw an exception when invoked on com.sun.proxy.$Proxy909 object "com.liferay.journal.service.impl.JournalArticleLocalServiceImpl@300fe2c"; see cause exception in the Java stack trace. ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign jArt = JournalArticleLocalSer... [in template "20116#20152#510999" at line 105, column 13] ----
1<#--
2Application display templates can be used to modify the look of a
3specific application.
4
5Please use the left panel to quickly add commonly used variables.
6Autocomplete is also available and can be invoked by typing "${".
7-->
8
9<#assign DLFileEntryLocalService = serviceLocator.findService(
10"com.liferay.document.library.kernel.service.DLFileEntryLocalService")>
11<#assign DLFolderLocalService = serviceLocator.findService(
12"com.liferay.document.library.kernel.service.DLFolderLocalService")>
13<#assign JournalArticleLocalService = serviceLocator.findService(
14"com.liferay.journal.service.JournalArticleLocalService")>
15<#assign GroupLocalService = serviceLocator.findService(
16"com.liferay.portal.kernel.service.GroupLocalService")>
17<#assign LayoutSetService = serviceLocator.findService(
18"com.liferay.portal.kernel.service.LayoutSetLocalService")>
19<#assign AssetCategoryLocalService = serviceLocator.findService(
20"com.liferay.asset.kernel.service.AssetCategoryLocalService")>
21<#assign AssetVocabularyLocalService = serviceLocator.findService(
22"com.liferay.asset.kernel.service.AssetVocabularyLocalService")>
23<#assign AssetCategoryPropertyLocalService = serviceLocator.findService(
24"com.liferay.asset.category.property.service.AssetCategoryPropertyLocalService")/>
25<#assign PropertyFactoryUtil = serviceLocator.findService(
26"com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil") />
27
28<#assign portletId = themeDisplay.getPortletDisplay().getId()>
29<#assign locale = themeDisplay.getLocale()>
30<#assign PortletPreferencesLocalService = serviceLocator.findService(
31"com.liferay.portal.kernel.service.PortletPreferencesLocalService")/>
32
33<#--
347.4 Upgrade Start - portlet perferences would not be stored as xml, see https://github.com/liferay/liferay-portal/blob/master/readme/BREAKING_CHANGES.markdown#what-changed-11
35
36assign portletPreferencesXML = saxReaderUtil.read((PortletPreferencesLocalService.getPortletPreferences(themeDisplay.getPlid(), portletId)?first).getPreferences())
37-->
38
39<#assign plid = themeDisplay.getPlid()>
40
41<#assign portletPreferences = PortletPreferencesLocalService.getPortletPreferences(plid, portletId)?first />
42
43<#assign preferences = PortletPreferencesLocalService.fetchPreferences(portletPreferences.getCompanyId(), portletPreferences.getOwnerId(), portletPreferences.getOwnerType(), plid, portletId) />
44
45<#--
467.4 Upgrade End
47-->
48
49<#assign TemplateCustomService = serviceLocator.findService("template.custom.services.TemplateCustomService") />
50
51<#-- Macro used to get specific field text from an Asset Entry -->
52<#macro entryNode document field>
53 <#if document.selectSingleNode("/root/dynamic-element[@name='"+field+"']/dynamic-content")??>
54 "${document.selectSingleNode("/root/dynamic-element[@name='"+field+"']/dynamic-content").getText()?js_string}"
55 <#else>
56 ""
57 </#if>
58</#macro>
59
60<#-- Macro used to get specific portlet preference -->
61
62<#-- 7.4 Upgrade question: where do we need this macro? -->
63
64<#macro preference prefKey prefIndex defaultValue>
65 <#if portletPreferencesXML.selectSingleNode("/portlet-preferences/preference[name='"+prefKey+"-"+prefIndex+"']/value")??>
66 "${portletPreferencesXML.selectSingleNode("/portlet-preferences/preference[name='"+prefKey+"-"+prefIndex+"']/value").getText()?js_string}"<#return>
67 <#else>
68 "${defaultValue?js_string}"<#return>
69 </#if>
70</#macro>
71
72<div id="articleAdtDiv_${portletId}"></div>
73<script>
74 <#if preferences.getValue("useSmallerHeadings", "false")?js_string == "true">
75 <#assign overrideHeadingSize = "heading3 mobile-heading2">
76 </#if>
77
78 <#assign multiArtBehavior = preferences.getValue("multiArticleBehavior", "Vertical Stack")?js_string>
79
80 <#assign fullWidthDisplay = preferences.getValue("fullWidthDisplay", "false")?js_string>
81
82 <#assign featureDisplayType = preferences.getValue("featureDisplayType", "Image Left")?js_string>
83
84 <#assign greyBackground = preferences.getValue("greyBackground", "false")?js_string>
85
86 <#assign extraSpacer = preferences.getValue("extraSpacer", "None")?js_string>
87
88 <#assign autoplay = preferences.getValue("autoPlay", "false")?js_string>
89
90 <#assign seeAllLink = preferences.getValue("seeAllLink", "")?js_string>
91
92 <#assign seeAllLinkText = preferences.getValue("seeAllLinkText", "")?js_string>
93
94 <#assign featureDisplayButtonType = preferences.getValue("featureDisplayButtonType", "Visible")?js_string>
95
96 <#assign featureDisplayButtonText = preferences.getValue("featureDisplayButtonText", "")?js_string>
97
98 <#assign gridTitle = preferences.getValue("gridTitle", "")?js_string>
99
100 var entries = [];
101
102 <#if entries?has_content>
103 <#list entries as curEntry>
104
105 <#assign jArt = JournalArticleLocalService.getLatestArticle(curEntry.getClassPK())>
106 <#assign document = saxReaderUtil.read(jArt.getContentByLocale(themeDisplay.getLocale()))>
107
108 <#assign structureName = jArt.getDDMStructure().getName("en_US")>
109
110
111 var componentType = "FEATURED_ARTICLE";
112 var voiceSearch = "featured-article";
113
114 var title = <@entryNode document=document field="ArticleTitle"/>;
115
116 var subtitle = <@entryNode document=document field="Subtitle"/>;
117
118 var description = <@entryNode document=document field="Description"/>;
119 if (description == ""){
120 description = <@entryNode document=document field="Intro"/>;
121 }
122
123 var slug = <@entryNode document=document field="Slug"/>;
124
125 <#assign articleGroup = GroupLocalService.getGroup(jArt.getGroupId())>
126
127 <#if LayoutSetService.getLayoutSet(themeDisplay.getScopeGroupId(), false)??
128 && LayoutSetService.getLayoutSet(themeDisplay.getScopeGroupId(), false).getThemeSetting("isMicroSite", "regular")?? >
129 <#assign isMicroSite = (LayoutSetService.getLayoutSet(themeDisplay.getScopeGroupId(), false).getThemeSetting("isMicroSite", "regular") == "true")>
130 <#else>
131 <#assign isMicroSite = false>
132 </#if>
133
134 var image = '${TemplateCustomService.getDocumentURL(document,"ThumbnailSquare",themeDisplay)}';
135 if (null == image || "" == image || ${(fullWidthDisplay == "true")?c}) {
136 image = '${TemplateCustomService.getDocumentURL(document,"Thumbnail",themeDisplay)}';
137 }
138 if (null == image) {
139 image = "";
140 }
141
142 var componentData = {
143 locale: "${locale}",
144 structureName: "${structureName}",
145 displayType: "${featureDisplayType}",
146 slug: slug,
147 title: title,
148 subtitle: subtitle,
149 description: description,
150 image: image.trim(),
151 groupFriendlyUrl: '${articleGroup.getFriendlyURL()}',
152 isMicrosite: ${isMicroSite?c},
153 multiArtBehavior: '${multiArtBehavior}',
154 featureDisplayButtonText: '${featureDisplayButtonText}',
155 featureDisplayButtonType: '${featureDisplayButtonType}',
156 componentType: componentType,
157 voiceSearch: voiceSearch
158 };
159
160 <#if structureName == "Video">
161
162 componentData.displayType = "Video";
163 componentData.link = <@entryNode document=document field="LinkURL"/>;
164 componentData.videoUrl = <@entryNode document=document field="VideoURL"/>;
165
166 <#elseif structureName == "Article">
167
168 var linkTargetOverride = <@entryNode document=document field="LinkTargetOverride"/>;
169
170 if (linkTargetOverride !== ""){
171 componentData.link = linkTargetOverride;
172 } else {
173 <#assign assetCategories = AssetCategoryLocalService.getCategories(curEntry.getClassNameId(), curEntry.getClassPK())>
174
175 var articleCategories = [];
176
177 <#list assetCategories as category>
178 <#assign categoryVocabulary = AssetVocabularyLocalService.getAssetVocabulary(category.getVocabularyId())>
179 <#assign categoryUrl = "#">
180
181 <#list AssetCategoryPropertyLocalService.getCategoryProperties(category.categoryId) as categoryProperty>
182
183 <#if categoryProperty.key == "url">
184 <#assign categoryUrl = categoryProperty.value>
185 </#if>
186 </#list>
187
188 articleCategories.push({
189 id: "${category.categoryId}",
190 name: "${category.name}",
191 url: "${categoryUrl}",
192 vocabularyName: "${categoryVocabulary.getTitle(locale)}",
193 });
194
195 </#list>
196
197
198 componentData.categories = articleCategories;
199 componentData.urlTitle = "${jArt.getUrlTitle()?js_string}";
200 }
201
202 var byline = <@entryNode document=document field="Byline"/>;
203 if (byline != null && byline != ""){
204 componentData.byline = [];
205 };
206
207 <#elseif structureName == "External Article">
208
209
210
211 <#-- All External Articles should display at /media-center/article, so populate categories accordingly -->
212 <#-- var articleCategories = [];
213 articleCategories.push({
214 id: "0",
215 name: "Media Center",
216 url: "media-center",
217 vocabularyName: "Topics",
218 });
219 articleCategories.push({
220 id: "1",
221 name: "Article",
222 url: "article",
223 vocabularyName: "Article Type",
224 });
225
226 componentData.categories = articleCategories;
227 componentData.urlTitle = "${jArt.getUrlTitle()?js_string}"; -->
228
229 componentData.link = <@entryNode document=document field="LinkURL"/>;
230 componentData.isExternal = true;
231
232 var bylineSegments = [];
233 var pubName = <@entryNode document=document field="PublicationName"/>;
234
235 if (pubName != null && pubName != ""){
236 bylineSegments.push(pubName);
237 componentData.italicizeFirstByline = true;
238 };
239
240 <#--bylineSegments.push(<@entryNode document=document field="PublicationDate"/>); -->
241 componentData.byline = bylineSegments;
242
243 <#elseif structureName == "Link">
244
245 componentData.link = <@entryNode document=document field="LinkURL"/>;
246 componentData.isExternal = true;
247
248 var bylineSegments = [];
249
250 <#assign linkja = JournalArticleLocalService.getLatestArticle(curEntry.getClassPK()) >
251 <#assign linkdocument = saxReaderUtil.read(linkja.getContent())>
252 <#assign linknodes = document.selectNodes("/root/dynamic-element[@name='BylineSegment']/dynamic-content")>
253
254 <#list linknodes as curN>
255 bylineSegments.push("${curN.getText()?js_string}");
256 </#list>
257
258 componentData.byline = bylineSegments;
259 componentData.italicizeFirstByline = true;
260
261 </#if>
262
263 entries.push(componentData);
264 </#list>
265 </#if>
266
267 <#if multiArtBehavior == "Carousel">
268 var carouselProps = {
269 entries: entries,
270 gridTitle: "${gridTitle}",
271 fullWidthDisplay: ${(fullWidthDisplay == "true")?c},
272 greyBackground: "${greyBackground}",
273 autoplay: ${(autoplay == "true")?c}
274 };
275
276 ATK.React.Component.Carousel("articleAdtDiv_${portletId?js_string}", carouselProps);
277 <#else>
278 var componentVoiceSearch = "featured-article";
279 var extraProps = {
280 multiArtBehavior: "${multiArtBehavior}",
281 gridTitle: "${gridTitle}",
282 fullWidthDisplay: "${fullWidthDisplay}",
283 greyBackground: "${greyBackground}",
284 extraSpacer: "${extraSpacer}",
285 seeAllLink: "${seeAllLink}",
286 seeAllLinkText: "${seeAllLinkText}",
287 componentVoiceSearch: componentVoiceSearch
288 };
289 ATK.React.Component.FeaturedMultiDisplay("articleAdtDiv_${portletId?js_string}", extraProps, entries);
290 </#if>
291
292</script>