Paola Pedemonte
modificato 3 Anni fa.
Si è verificato un errore nell'elaborarazione del modello.
The following has evaluated to null or missing: ==> journalArticleLocalService.fetchLatestArticle(relatedAssetEntry.classPK) [in template "20101#20127#35063" at line 249, column 90] ---- Tip: If the failing expression is known to be 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 relatedJournalArticle = journ... [in template "20101#20127#35063" at line 249, column 57] ----
1<#--
2LargoConsumo ~ Thread solutions ~ 2019
3@baxtheman
4journal template / full content article
5///
6see https://bitbucket.org/threadsolutions/largoconsumo-liferay-7.2/issues/18/gestione-stati-campo-testo-e-pulsanti-web
7-->
8<#assign ARTICLEID = .vars['reserved-article-id'].data />
9
10<#assign count = 0 />
11<#if serviceLocator??>
12 <#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") />
13 <#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
14 <#assign journalArticle = journalArticleLocalService.getArticle(articleGroupId,ARTICLEID) />
15 <#assign assetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", journalArticle.resourcePrimKey) />
16 ${assetEntryLocalService.incrementViewCounter(themeDisplay.getUserId(), assetEntry)}
17
18 <#assign count = assetEntry.viewCount />
19</#if>
20<#assign mimeTypesUtil = staticUtil["com.liferay.portal.kernel.util.MimeTypesUtil"] />
21
22<#setting date_format="dd/MM/yyyy">
23<#setting locale = 'it_IT'>
24<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext()>
25<#assign httpServletRequest = serviceContext.getRequest()>
26
27<#assign ARTICLEID = .vars['reserved-article-id'].data />
28<#assign ARTICLEURL = themeDisplay.getURLPortal() + '/-/' + .vars['reserved-article-url-title'].data />
29<#assign SMALLIMAGEURL = .vars['reserved-article-small-image-url'].data />
30<#assign LCLOGO = themeDisplay.getURLPortal() +'/o/largoconsumo-theme/images/largo-consumo.svg'/>
31<#assign TITLE = .vars['reserved-article-title'].data />
32<#assign DISPLAYDATE = .vars['reserved-article-display-date'].data?date('EEE, dd MMM yyyy HH:mm:ss Z') />
33<#assign ISCORPORATE = (CORPORATE??)?then(getterUtil.getBoolean(CORPORATE.getData()),false) />
34<#assign TAGS = .vars['reserved-article-asset-tag-names'].data?replace(',', ', ') />
35
36<#assign ISPDF = (PDF?? && PDF.data?has_content) />
37<#assign ISBOT = webContentUtil.botVerifie(httpServletRequest)>
38
39<#assign SHOW_FULL_ABSTRACT = (FULL_ABSTRACT??)?then(getterUtil.getBoolean(FULL_ABSTRACT.getData()),false) />
40<#assign PREVIEW = (SUMMARY??)?then(SUMMARY.data,'') />
41<#if (PREVIEW?length > 300 && !SHOW_FULL_ABSTRACT)>
42 <#assign TRIMMED = PREVIEW?substring(0,300) + "..." />
43 <#assign ABSTRACT = htmlService.repair(TRIMMED) />
44<#else>
45 <#assign ABSTRACT = PREVIEW />
46</#if>
47<#assign CONTENT = (HTML?? && HTML.data?has_content)?then(HTML.data,PREVIEW) />
48<#assign WOWBOOKURL = '/DOCUMENTI/articoli/index.html?file=' />
49<#assign PDFURL = WOWBOOKURL + '/c/portal/createpdf?articleId=${ARTICLEID}&groupId=${articleGroupId}#book/' />
50
51<#assign ISGUEST = themeDisplay?? && !themeDisplay.isSignedIn() />
52<#assign ISSIGNIN = themeDisplay?? && themeDisplay.isSignedIn() />
53<#assign ISPAYWALL = (PAYWALL??)?then(getterUtil.getBoolean(PAYWALL.getData()),false) />
54<#assign ISFREE = !ISPAYWALL />
55<#assign ISSUBSCRIBER = permissionChecker.isOmniadmin() || portletPermission.contains(permissionChecker,'com_thread_largoconsumo_login_register','SUBSCRIPTION') />
56
57
58<#assign SMALLIMAGEURL = SMALLIMAGEURL?replace("@cdn_host", portalUtil.getCDNHost(request)) />
59<#assign SMALLIMAGEURL = SMALLIMAGEURL?replace("root_path", portalUtil.getPathContext(request)) />
60<#assign SMALLIMAGEURL = SMALLIMAGEURL?replace("@", "") />
61<#assign SMALLIMAGEURL = themeDisplay.getURLPortal() + SMALLIMAGEURL />
62
63
64<@assettics_util["event"]
65 action="view"
66 category="article"
67 label=TITLE
68/>
69
70<#assign CSSTRACKLEAD = "" />
71<#assign TRACKLEAD = false />
72<#assign SHOWCHECKBOX = false />
73<#assign LEADMESSAGE = "" />
74<#assign ISINTERNALROLE = false />
75<#assign roleLocalService= serviceLocator.findService("com.liferay.portal.kernel.service.RoleLocalService")>
76<#assign rolesList = roleLocalService.getUserRoles(themeDisplay.getUserId()) />
77
78<#list rolesList as role>
79 <#if role.getRoleId()==(roleLocalService.getRole(themeDisplay.getCompanyId(),"Administrator").getRoleId()) >
80 <#assign ISINTERNALROLE = true />
81 </#if>
82</#list>
83
84<#if (permissionChecker.isOmniadmin() ) || ISINTERNALROLE>
85
86 <div class="contatore " style="width: fit-content;padding:10px; margin-bottom: 10px; background-color: #f2f3f5;border-style: solid">
87 <div class="text" style="color: #293b53;">
88 Questo articolo è stato visualizzato <b>${count}</b> volte
89 </div>
90 </div>
91</#if>
92<#if ISSIGNIN >
93 <#assign campaignsArticle = campaignArticleService.getByJournalArticleAndEnabled(themeDisplay.getCompanyId(), themeDisplay.getScopeGroupId(), ARTICLEID?number, true) />
94 <#if (campaignsArticle?size > 0) >
95 <#assign CAMPAIGN = campaignsArticle[0] />
96 <#if ISSUBSCRIBER >
97 <#assign LEADMESSAGE = CAMPAIGN.messageSubscribed />
98 <#else>
99 <#assign LEADMESSAGE = CAMPAIGN.messageRegistered />
100 </#if>
101 <#assign CSSTRACKLEAD = " trackLead " />
102 <#assign TRACKLEAD = true />
103 <#assign campaignsUser = campaignUserService.getByUser(themeDisplay.getCompanyId(), themeDisplay.getScopeGroupId(), themeDisplay.getUserId()) />
104 <#if (campaignsUser?size == 0) >
105 <#assign SHOWCHECKBOX = true />
106 </#if>
107 </#if>
108</#if>
109
110<article class="article">
111
112 <header>
113 <div class="article__heading b-block d-md-flex justify-content-between align-items-top">
114 <div class="text h4">
115 <strong>${DISPLAYDATE?date}</strong><br>
116 ${(REFERENCE?? && REFERENCE.data?has_content)?then(REFERENCE.getData(), '')}
117 ${(TYPE?? && TYPE.data?has_content)?then('- ' + TYPE.getData(), '')}
118 ${ISCORPORATE?then(" di comunicazione d'Impresa", "")}
119 <#if (START_PAGE?? && START_PAGE.data?has_content)>
120 <#if (START_PAGE.data?length > 3)>
121 - ${START_PAGE.getData()}
122 <#else>
123 - pagina ${START_PAGE.getData()}
124 </#if>
125 </#if>
126 <#if (LENGTH?? && LENGTH.data?has_content)>
127 <#if (LENGTH.data?length > 3)>
128 - ${LENGTH.getData()}
129 <#else>
130 <#if (LENGTH.getData() == '1')>
131 - ${LENGTH.getData()} pagina
132 <#else>
133 - ${LENGTH.getData()} pagine
134 </#if>
135 </#if>
136 </#if>
137 ${(AUTHOR?? && AUTHOR.data?has_content)?then('- ' + AUTHOR.getData(), '')}
138 </div>
139 <div class="socials-share socials-share--circle mt-3 mt-sm-0 pl-0 pl-md-3">
140 <@liferay_social_bookmarks["bookmarks"]
141 className="com.liferay.journal.model.JournalArticle"
142 classPK=ARTICLEID?number
143 displayStyle="inline"
144 title=TITLE
145 types="twitter,facebook,linkedin"
146 url=ARTICLEURL
147 />
148 </div>
149 </div>
150
151 <div class="d-block d-sm-flex justify-content-between align-items-center">
152 <#if SUBTITLE.data?has_content>
153 <span class="lc-tag lc-tag-primary mb-0 ${ISCORPORATE?then('corporate', '')}">
154 ${SUBTITLE.getData()}
155 </span>
156 </#if>
157 </div>
158 </header>
159
160 <section class="mt-3">
161 <h1>
162 ${TITLE}
163 </h1>
164
165 <div class="content mt-5">
166 <#if SMALLIMAGEURL?has_content>
167 <img class="article__image" alt="${TITLE}" src="${SMALLIMAGEURL}" />
168 </#if>
169
170 <#-- gestione testo -->
171 <div class="text">
172 <#if ISGUEST || TRACKLEAD>
173 ${ABSTRACT}
174 <#elseif (ISSIGNIN && ISFREE)>
175 ${CONTENT}
176 <#elseif !ISSUBSCRIBER && ISPAYWALL>
177 ${ABSTRACT}
178 <#elseif ISSUBSCRIBER || ISBOT>
179 ${CONTENT}
180 </#if>
181 </div>
182
183 <#if SHOWCHECKBOX >
184 <div id="trackLeadCheckbox" style="clear:both">
185 <input type="checkbox" id="chkTrackLead"> ${LEADMESSAGE}
186 </div>
187 </#if>
188 <#-- gestione azione -->
189 <div id="action" <#if SHOWCHECKBOX > style="display:none" </#if> >
190 <#if ISGUEST>
191 <div class="mt-5 text-right">
192 <#assign portalUtil = staticUtil["com.liferay.portal.kernel.util.PortalUtil"] />
193 <#assign httpUtil = staticUtil["com.liferay.portal.kernel.util.HttpUtil"] />
194 <#assign
195 loginURL = portalUtil.getSiteLoginURL(themeDisplay)
196 loginURL = httpUtil.addParameter(loginURL, "p_p_lifecycle", 0)
197 loginURL = httpUtil.addParameter(loginURL, "p_p_state", "normal")
198 loginURL = httpUtil.addParameter(loginURL, "p_p_mode", "view")
199 loginURL = httpUtil.addParameter(loginURL, "p_p_id", "com_liferay_login_web_portlet_LoginPortlet")
200 loginURL = httpUtil.addParameter(loginURL, "_com_liferay_login_web_portlet_LoginPortlet_redirect", portalUtil.getCurrentURL(request))
201 />
202 <a href="${loginURL}" class="btn btn-primary">
203 Accedi per continuare...
204 </a>
205 </div>
206 <#elseif !ISSUBSCRIBER && ISPAYWALL>
207 <div class="mt-5 text-right">
208 <a href="/abbonamenti" class="btn btn-primary">
209 Sottoscrivi l'abbonamento per continuare...
210 </a>
211 </div>
212 <#elseif ISPDF >
213 <div class="mt-5 text-right">
214 <a target="_blank" href="${PDFURL}" class="btn btn-primary ${CSSTRACKLEAD}">
215 <@clay["icon"] symbol="web-content" />
216 Leggi l'articolo completo in PDF
217 </a>
218 </div>
219 <#elseif TRACKLEAD >
220 <div class="mt-5 text-right">
221 <a target="_blank" href="#" class="btn btn-primary ${CSSTRACKLEAD}">
222 <@clay["icon"] symbol="web-content" />
223 Leggi tutto
224 </a>
225 </div>
226 </#if>
227 </div>
228
229 </div>
230 </section>
231
232 <footer class="mt-5">
233
234 <#if serviceLocator??>
235 <#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
236 <#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") />
237 <#assign assetLinkLocalServiceUtil = serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService") />
238 <#assign journalArticle = journalArticleLocalService.getArticle(articleGroupId,ARTICLEID) />
239 <#assign assetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", journalArticle.resourcePrimKey) />
240 <#assign assetLinks = assetLinkLocalServiceUtil.getDirectLinks(assetEntry.getEntryId()) />
241 <#if assetLinks?has_content>
242 <section>
243 <div class="heading-decorated">
244 <h2 class="portlet-title-text">Informazioni a corredo</h2>
245 </div>
246 <ul class="asset-links mt-3 mb-0 h3">
247 <#list assetLinks as assetLink>
248 <#assign relatedAssetEntry = assetEntryLocalService.getAssetEntry(assetLink.entryId2) />
249 <#assign relatedJournalArticle = journalArticleLocalService.fetchLatestArticle(relatedAssetEntry.classPK) />
250 <li>
251 <#assign docXml = saxReaderUtil.read(relatedJournalArticle.getContent()) />
252 <#assign pdf = docXml.valueOf("//dynamic-element[@name='PDF']/dynamic-content/text()") />
253 <#assign relatedTitle = relatedJournalArticle.title?replace("(?s)<[^>]*>(\\s*<[^>]*>)*", " ", "r") />
254 <#if (relatedJournalArticle.getDDMStructureKey() == "299426" && pdf == '')>
255 ${relatedJournalArticle.title}
256 <#else>
257 <a href="/-/${relatedJournalArticle.urlTitle}">${relatedTitle}</a>
258 </#if>
259 </li>
260 </#list>
261 </ul>
262 </section>
263 </#if>
264
265 <#assign assetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") />
266 <#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") />
267 <#assign assetVocabulary = assetVocabularyLocalService.fetchGroupVocabulary(articleGroupId, "Argomenti") />
268 <#assign assetCategories = assetEntry.categories />
269 <#if assetCategories?has_content>
270 <section class="justify-content-start align-items-start row no-gutters">
271 <div class="heading-decorated">
272 <h2 class="portlet-title-text">Argomenti</h2>
273 </div>
274 <div class="col mt-3">
275 <ul class="list-inline mb-0">
276 <#list assetCategories as assetCategory>
277 <#if assetCategory.vocabularyId = assetVocabulary.vocabularyId>
278 <#assign categoryUrl = '/percorsi/-/categoria/' + assetCategory.name?replace(' ','-')?url('utf-8') + '/' + assetCategory.categoryId + '?p_r_p_categoryId=' + assetCategory.categoryId />
279 <li class="list-inline-item">
280 <span class="lc-tag"><a href="${categoryUrl}">${assetCategory.name}</a></span>
281 </li>
282 </#if>
283 </#list>
284 </ul>
285 </div>
286 </section>
287 </#if>
288 </#if>
289
290 <#if TAGS?has_content >
291 <section class="justify-content-start align-items-start row no-gutters border-top mt-3">
292 <div class="title col-12 col-md-auto mb-2 mb-md-0 mr-3">
293 Citati in questo articolo:
294 </div>
295 <div class="col">
296 ${TAGS}
297 </div>
298 </section>
299 </#if>
300
301 <#assign TITLE = stringUtil.shorten(htmlUtil.stripHtml(.vars['reserved-article-title'].data), 60) />
302 <#assign description = stringUtil.shorten(htmlUtil.stripHtml(.vars['reserved-article-description'].data), 150) />
303 <#if !description?has_content >
304 <#assign description = stringUtil.shorten(htmlUtil.stripHtml(ABSTRACT), 150) />
305 </#if>
306
307 <#assign section = "" />
308 <#if SUBTITLE.data?has_content>
309 <#assign section = SUBTITLE.data />
310 </#if>
311
312
313 <#assign og_image = LCLOGO />
314 <#if SMALLIMAGEURL?? && SMALLIMAGEURL !="" >
315 <#assign og_image = SMALLIMAGEURL />
316 </#if>
317 <#assign og_image_type = mimeTypesUtil.getContentType(og_image) />
318
319 <#assign createdate = .vars['reserved-article-create-date'].data ?datetime("EEE, d MMM yyyy HH:mm:ss Z")/>
320 <#assign modifieddate = .vars['reserved-article-modified-date'].data?datetime("EEE, d MMM yyyy HH:mm:ss Z")/>
321 <#assign tags = .vars['reserved-article-asset-tag-names'].data/>
322
323 <@liferay_util["html-top"]>
324 <title>${TITLE}</title>
325 <meta name="description" content="${description}"/>
326 <meta property="og:title" content="${TITLE}">
327 <meta property="og:description" content="${description}">
328 <meta property="og:type" content="article">
329 <meta property="og:url" content="${portalUtil.getCurrentCompleteURL(request)?keep_before('?')}">
330
331 <#list tags?split(",") as tag>
332 <meta property="article:tag" content="${tag}">
333 </#list>
334 <#list assetCategories as assetCategory>
335 <meta property="article:tag" content="${assetCategory.name}">
336 </#list>
337
338 <meta property="article:published_time" content="${createdate?iso_utc}">
339 <meta property="article:modified_time" content="${modifieddate?iso_utc}">
340 <meta property="article:author" content="${.vars['reserved-article-author-name'].data }">
341 <meta property="article:section" content="${section}">
342 <meta property="og:image" content="${og_image}">
343 <meta property="og:image:type" content="${og_image_type}">
344 <meta property="og:image:alt" content="${TITLE}">
345 </@>
346
347 </footer>
348
349
350</article>
351
352<@liferay_aui.script use="liferay-navigation-interaction">
353 var A=AUI();
354 var _item = A.one(".trackLead");
355 if (_item) {
356 _item.on('click',function(e) {
357 Liferay.Service(
358 '/lead.campaignuser/create-articolo-utente',
359 {
360 companyId: ${themeDisplay.getCompanyId()},
361 groupId: ${themeDisplay.getScopeGroupId()},
362 campaignId: ${(CAMPAIGN??)?then(CAMPAIGN.campaignId, '""')},
363 campaignArticleId: ${(CAMPAIGN??)?then(CAMPAIGN.campaignArticleId, '""')},
364 userId: ${themeDisplay.getUserId()}
365 },
366 function(obj) {
367 console.log(obj);
368 }
369 );
370 });
371 } else {
372 console.log("nessun oggetto trovato");
373 }
374
375 var _item = A.one("#trackLeadCheckbox");
376 if (_item) {
377 _item.on('change',function(e) {
378 console.log("click");
379 A.one("#trackLeadCheckbox").hide();
380 A.one("#action").show();
381 });
382 } else {
383 console.log("nessuna checkbox trovata");
384 }
385
386</@>
Percorsi di lettura correlati
Questo sito utilizza i cookie per migliorare la tua esperienza di navigazione.
Continuando ad utilizzare questo sito si acconsente al loro utilizzo.
Continuando ad utilizzare questo sito si acconsente al loro utilizzo.
Cookie Interceptor
Gestione Cookie