Indietro

Fondo Pensione Aperto Cattolica Gestione Previdenza

Si è verificato un errore nell'elaborarazione del modello.
Error on line 858, column 33 in 20155#20195#CATTOLICA-PORTAL-TPL-PRODUCT
dLFileEntryLocalService.getFileEntryByUuidAndGroupId(docUuid, groupId) is undefined.
It cannot be assigned to docDM
1<#-- 
2## Costanti 
3--> 
4<#assign CATTOLICA_PRODUCTS_CATEGORIES_VOCABULARY = "cattolica-portal-products-categories" /> 
5<#assign CATTOLICA_PRODUCTS_HASHTAGS_VOCABULARY = "cattolica-portal-products-hashtags" /> 
6<#assign CATTOLICA_SHOWCASE_STRUCTURE_KEY = "CATTOLICA-PORTAL-ST-SHOWCASE" /> 
7<#assign CATTOLICA_CUSTOMERCARE_STRUCTURE_KEY = "CATTOLICA-PORTAL-ST-CUSTOMERCARE" /> 
8<#assign CATTOLICA_PRODUCT_STRUCTURE_KEY = "CATTOLICA-PORTAL-ST-PRODUCT" /> 
9<#assign CATTOLICA_BANNER_STRUCTURE_KEY = "CATTOLICA-PORTAL-ST-BANNER" /> 
10<#assign CATTOLICA_QUOTTI_STRUCTURE_KEY = "CATTOLICA-PORTAL-ST-QUOTTI" /> 
11<#assign CATTOLICA_SHORTLINK_STRUCTURE_KEY = "CATTOLICA-PORTAL-ST-SHORTLINK" /> 
12<#assign CATTOLICA_PRODUCTBOX_MODEL_KEY = "CATTOLICA-PORTAL-TPL-PRODUCTBOX" /> 
13<#assign CATTOLICA_VIDEO_MODAL_MODEL_KEY = "CATTOLICA-PORTAL-ST-VIDEOMODAL" /> 
14<#assign CATTOLICA_AGENCYLOCATOR_STRUCTURE_KEY = "CATTOLICA-PORTAL-ST-AGENCYLOCATOR" /> 
15<#assign JOURNAL_ARTICLE_CLASS_NAME_ID = portalUtil.getClassNameId("com.liferay.portlet.journal.model.JournalArticle") /> 
16<#assign JOURNAL_ARTICLE_CLASS_NAME = portalUtil.getClassName(JOURNAL_ARTICLE_CLASS_NAME_ID) /> 
17 
18<#-- 
19## Servizi 
20--> 
21<#assign ddmStructureLocalService = serviceLocator.findService("com.liferay.portlet.dynamicdatamapping.service.DDMStructureLocalService") /> 
22<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.portlet.asset.service.AssetCategoryLocalService") /> 
23<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.portlet.asset.service.AssetEntryLocalService") /> 
24<#assign assetLinkLocalService = serviceLocator.findService("com.liferay.portlet.asset.service.AssetLinkLocalService") /> 
25<#assign assetVocabularyLocalService = serviceLocator.findService("com.liferay.portlet.asset.service.AssetVocabularyLocalService") /> 
26<#assign dLFileEntryLocalService = serviceLocator.findService("com.liferay.portlet.documentlibrary.service.DLFileEntryLocalService")> 
27<#assign groupLocalService = serviceLocator.findService("com.liferay.portal.service.GroupLocalService") /> 
28<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.portlet.journal.service.JournalArticleLocalService")> 
29<#assign layoutLocalService = serviceLocator.findService("com.liferay.portal.service.LayoutLocalService")> 
30 
31<#-- 
32## Variables 
33--> 
34<#assign serviceContext = staticUtil["com.liferay.portal.service.ServiceContextThreadLocal"].getServiceContext()> 
35<#assign themeDisplay = serviceContext.getThemeDisplay() /> 
36<#assign journalArticleId = .vars['reserved-article-id'].data /> 
37<#assign svgSpritePath = themeDisplay.getPathThemeImages() /> 
38 
39<#attempt> 
40  <#assign journalArticleProduct = journalArticleLocalService.getArticle(groupId, journalArticleId)/> 
41  <#recover> 
42</#attempt> 
43 
44<#attempt> 
45  <#assign productsCategoriesVocabulary = assetVocabularyLocalService.getGroupVocabulary(groupId, CATTOLICA_PRODUCTS_CATEGORIES_VOCABULARY) /> 
46  <#assign productsHashtagsVocabulary = assetVocabularyLocalService.getGroupVocabulary(groupId, CATTOLICA_PRODUCTS_HASHTAGS_VOCABULARY) /> 
47  <#recover> 
48</#attempt> 
49 
50<#assign agencyLocatorJA = "" /> 
51<#assign showcaseJA = "" /> 
52<#assign customercareJA = "" /> 
53<#assign bannerJA = [] /> 
54<#assign productboxJA = [] /> 
55<#assign productboxJATemp = [] /> 
56<#assign productboxPriorities = [] /> 
57<#assign quottiJA = "" /> 
58<#assign shortLinkJA = "" /> 
59<#assign videoJA = "" /> 
60 
61<#if validator.isNotNull(journalArticleProduct)> 
62  <#assign classPK = journalArticleProduct.getResourcePrimKey() /> 
63  <#assign jaAssetEntry = assetEntryLocalService.getEntry(JOURNAL_ARTICLE_CLASS_NAME, classPK) /> 
64  <#assign articleCat = assetCategoryLocalService.getCategories("com.liferay.portlet.journal.model.JournalArticle", getterUtil.getLong(classPK))> 
65  <#assign articleCatProductId = [] /> 
66 
67  <#list articleCat as category> 
68    <#if category.getVocabularyId() == productsCategoriesVocabulary.getVocabularyId() > 
69      <#assign articleCatProductId = articleCatProductId + [category.getCategoryId()] /> 
70    </#if> 
71  </#list> 
72 
73  <#-- 
74  ## Risorse correlate prodotto 
75  --> 
76  <#if validator.isNotNull(jaAssetEntry)> 
77    <#assign jaAssetEntryId = jaAssetEntry.getEntryId()> 
78 
79    <#if (jaAssetEntryId > 0)> 
80      <#assign assetLinks = assetLinkLocalService.getDirectLinks(jaAssetEntryId)> 
81 
82      <#if validator.isNotNull(assetLinks) && (assetLinks?size > 0) > 
83        <#assign relatedEntry = "" /> 
84 
85        <#list assetLinks as assetLink> 
86 
87          <#if assetLink.getEntryId1() == jaAssetEntryId> 
88            <#assign relatedEntry = assetEntryLocalService.getEntry(assetLink.getEntryId2()) /> 
89          <#else> 
90            <#assign relatedEntry = assetEntryLocalService.getEntry(assetLink.getEntryId1()) /> 
91          </#if> 
92 
93          <#if validator.isNotNull(relatedEntry) && relatedEntry != ""> 
94            <#assign renderer = relatedEntry.getAssetRenderer() /> 
95            <#assign relatedJA = renderer.getArticle() /> 
96 
97            <#if relatedJA.getStructureId() == CATTOLICA_BANNER_STRUCTURE_KEY> 
98              <#assign bannerJA = bannerJA + [relatedJA] /> 
99            <#elseif relatedJA.getStructureId() == CATTOLICA_SHOWCASE_STRUCTURE_KEY> 
100              <#assign showcaseJA = relatedJA /> 
101            <#elseif relatedJA.getStructureId() == CATTOLICA_CUSTOMERCARE_STRUCTURE_KEY> 
102              <#assign customercareJA = relatedJA /> 
103            <#elseif relatedJA.getStructureId() == CATTOLICA_PRODUCT_STRUCTURE_KEY> 
104              <#assign productboxJATemp = productboxJATemp + [{"priority":relatedEntry.getPriority(),"obj":relatedJA}] /> 
105            <#elseif relatedJA.getStructureId() == CATTOLICA_QUOTTI_STRUCTURE_KEY> 
106              <#assign quottiJA = relatedJA /> 
107            <#elseif relatedJA.getStructureId() == CATTOLICA_SHORTLINK_STRUCTURE_KEY> 
108              <#assign shortLinkJA = relatedJA /> 
109            <#elseif relatedJA.getStructureId() == CATTOLICA_VIDEO_MODAL_MODEL_KEY> 
110              <#assign videoJA = relatedJA /> 
111            <#elseif relatedJA.getStructureId() == CATTOLICA_AGENCYLOCATOR_STRUCTURE_KEY> 
112              <#assign agencyLocatorJA = relatedJA /> 
113            </#if> 
114          </#if> 
115        </#list> 
116      </#if> 
117    </#if> 
118  </#if> 
119   
120  <#-- Sorting related products by priority --> 
121  <#if productboxJATemp?has_content> 
122    <#list productboxJATemp?sort_by('priority')?reverse as tmpProd> 
123      <#assign productboxJA = productboxJA + [tmpProd.obj] /> 
124    </#list> 
125  </#if> 
126 
127  <#-- 
128  ## Sezioni mega-content 
129  --> 
130  <#assign weightsMap = {}> 
131  <#assign weightsFeaturesMap = {}> 
132  <#assign weightsBodytextMap = {}> 
133  <#assign weightsTabsMap = {}> 
134  <#assign weightsSpecialMap = {}> 
135  <#assign weightsDocumentationMap = {}> 
136  <#assign weightsAccordionMap = {}> 
137  <#assign weightsSpecMap = {}> 
138 
139  <#-- 
140  ## Sezione "Punti di forza" 
141  --> 
142  <#if features.getSiblings()?has_content> 
143    <#assign i = 0> 
144 
145    <#list features.getSiblings() as cur_features> 
146 
147      <#if cur_features.featuresWeight??> 
148        <#assign featuresWeight = cur_features.featuresWeight.getData()> 
149        <#assign i = i + 1> 
150 
151        <#if validator.isNotNull(featuresWeight)> 
152          <#assign weightKey = "featuresWeight${i}" > 
153          <#assign weightsFeaturesMap = weightsFeaturesMap + { weightKey : featuresWeight}> 
154        </#if> 
155      </#if> 
156    </#list> 
157  </#if> 
158 
159  <#if validator.isNotNull(weightsFeaturesMap)> 
160    <#assign weightsMap = weightsMap + weightsFeaturesMap > 
161  </#if> 
162 
163  <#-- 
164  ## Sezione "Testo libero" 
165  --> 
166  <#if bodytext.getSiblings()?has_content> 
167    <#assign i = 0> 
168 
169    <#list bodytext.getSiblings() as cur_bodytext> 
170 
171      <#if cur_bodytext.bodytextWeight??> 
172        <#assign bodytextWeight = cur_bodytext.bodytextWeight.getData()> 
173        <#assign i = i + 1> 
174 
175        <#if validator.isNotNull(bodytextWeight)> 
176          <#assign weightKey = "bodytextWeight${i}" > 
177          <#assign weightsBodytextMap = weightsBodytextMap + { weightKey : bodytextWeight}> 
178        </#if> 
179      </#if> 
180    </#list> 
181  </#if> 
182 
183  <#if validator.isNotNull(weightsBodytextMap)> 
184    <#assign weightsMap = weightsMap + weightsBodytextMap > 
185  </#if> 
186 
187  <#-- 
188  ## Sezione "Tabs" 
189  --> 
190  <#if tabs.getSiblings()?has_content> 
191    <#assign i = 0> 
192 
193    <#list tabs.getSiblings() as cur_tab> 
194      <#if cur_tab.tabsWeight??> 
195 
196        <#assign tabsWeight = cur_tab.tabsWeight.getData()> 
197        <#assign i = i + 1> 
198 
199        <#if validator.isNotNull(tabsWeight)> 
200          <#assign weightKey = "tabsWeight${i}" > 
201          <#assign weightsTabsMap = weightsTabsMap + { weightKey : tabsWeight}> 
202        </#if> 
203      </#if> 
204    </#list> 
205  </#if> 
206 
207  <#if validator.isNotNull(weightsTabsMap)> 
208    <#assign weightsMap = weightsMap + weightsTabsMap > 
209  </#if> 
210 
211  <#-- 
212  ## Sezione "Condizioni speciali" 
213  --> 
214  <#if special.getSiblings()?has_content> 
215    <#assign i = 0> 
216 
217    <#list special.getSiblings() as cur_special> 
218 
219      <#if cur_special.specialWeight??> 
220        <#assign specialWeight = cur_special.specialWeight.getData()> 
221        <#assign i = i + 1> 
222 
223        <#if validator.isNotNull(specialWeight)> 
224          <#assign weightKey = "specialWeight${i}" > 
225          <#assign weightsSpecialMap = weightsSpecialMap + { weightKey : specialWeight}> 
226        </#if> 
227      </#if> 
228    </#list> 
229  </#if> 
230 
231  <#if validator.isNotNull(weightsSpecialMap)> 
232    <#assign weightsMap = weightsMap + weightsSpecialMap > 
233  </#if> 
234 
235  <#-- 
236  ## Sezione "Documentazione" 
237  --> 
238  <#if documentation.getSiblings()?has_content> 
239    <#assign i = 0> 
240 
241    <#list documentation.getSiblings() as cur_documentation> 
242      <#if cur_documentation.documentationWeight??> 
243        <#assign documentationWeight = cur_documentation.documentationWeight.getData()> 
244        <#assign i = i + 1> 
245 
246        <#if validator.isNotNull(documentationWeight)> 
247          <#assign weightKey = "documentationWeight${i}" > 
248          <#assign weightsDocumentationMap = weightsDocumentationMap + { weightKey : documentationWeight}> 
249        </#if> 
250      </#if> 
251    </#list> 
252  </#if> 
253 
254  <#if validator.isNotNull(weightsDocumentationMap)> 
255    <#assign weightsMap = weightsMap + weightsDocumentationMap > 
256  </#if> 
257 
258  <#-- 
259  ## Sezione "Accordion" 
260  --> 
261  <#if accordion.getSiblings()?has_content> 
262    <#assign i = 0> 
263 
264    <#list accordion.getSiblings() as cur_accordion> 
265 
266      <#if cur_accordion.accordionWeight??> 
267        <#assign accordionWeight = cur_accordion.accordionWeight.getData()> 
268        <#assign i = i + 1> 
269 
270        <#if validator.isNotNull(accordionWeight)> 
271          <#assign weightKey = "accordionWeight${i}" > 
272          <#assign weightsAccordionMap = weightsAccordionMap + { weightKey : accordionWeight}> 
273        </#if> 
274      </#if> 
275    </#list> 
276  </#if> 
277 
278  <#if validator.isNotNull(weightsAccordionMap)> 
279    <#assign weightsMap = weightsMap + weightsAccordionMap > 
280  </#if> 
281 
282  <#-- 
283  ## Sezione "Caratteristica" 
284  --> 
285  <#if spec?? && spec.getSiblings()?has_content> 
286    <#assign i = 0> 
287 
288    <#list spec.getSiblings() as cur_spec> 
289 
290      <#if cur_spec.specWeight??> 
291        <#assign specWeight = cur_spec.specWeight.getData()> 
292        <#assign i = i + 1> 
293 
294        <#if validator.isNotNull(specWeight)> 
295          <#assign weightKey = "specWeight${i}" > 
296          <#assign weightsSpecMap = weightsSpecMap + { weightKey : specWeight}> 
297        </#if> 
298      </#if> 
299    </#list> 
300  </#if> 
301 
302  <#if validator.isNotNull(weightsSpecMap)> 
303    <#assign weightsMap = weightsMap + weightsSpecMap > 
304  </#if> 
305 
306  <#-- START RENDERING --> 
307  <#assign keys = weightsMap?keys> 
308  <#assign mapSize = keys?size> 
309  <#assign pagePosition = 0 > 
310 
311  <#-- 
312  ## Risorsa correlata: slider 
313  --> 
314  <#if validator.isNotNull(showcaseJA)> 
315    <@includeJournalArticle showcaseJA.getGroupId() showcaseJA.getUrlTitle() "" /> 
316  </#if> 
317 
318  <div class="vgg"> 
319    <div class="vgg__container vgg__container--wrapper"> 
320      <div class="tpl-sidebar"> 
321        <div class="col-container has-lateral-padding vgg--bg-light"> 
322          <#-- 
323          ## Taglib Breadcrumb 
324          --> 
325          <#if .vars['request']?has_content> 
326            <#assign curLayout = ""> 
327            <#assign currentUrl = request['attributes']['CURRENT_URL']/> 
328            <#assign curLayoutFriendlyUrl = "/" + currentUrl?split("/")?last /> 
329            <#assign currentGroupUrl = currentUrl?split(curLayoutFriendlyUrl)[0]/> 
330 
331            <#if currentGroupUrl?contains("/-")> 
332              <#assign currentGroupUrl = currentGroupUrl?split("/-")[0]/> 
333            </#if> 
334 
335            <#attempt> 
336              <#assign curLayout = layoutLocalService.getFriendlyURLLayout(groupId, false, curLayoutFriendlyUrl) /> 
337            <#recover> 
338              <#attempt> 
339                <#assign uuid = journalArticleProduct.getLayoutUuid() /> 
340                <#assign curLayout = layoutLocalService.getLayoutByUuidAndGroupId(uuid, groupId, false) /> 
341              <#recover> 
342                <#assign curLayout = ""> 
343              </#attempt> 
344            </#attempt> 
345 
346            <#if validator.isNotNull(curLayout)> 
347              <#assign ancestorList = curLayout.getAncestors() /> 
348              <#assign orderdAncestorList = []/> 
349 
350              <#if validator.isNotNull(ancestorList) && ancestorList?has_content> 
351                <div class="block-breadcrumb"> 
352                  <ul> 
353                    <#list 1..ancestorList?size as i> 
354                      <#assign size = (ancestorList?size - i)> 
355                      <#assign orderdAncestorList = orderdAncestorList + [ancestorList[size]]/> 
356                    </#list> 
357 
358                    <#list orderdAncestorList as parentLayout> 
359                      <#if (parentLayout.getPlid() > 0 ) > 
360                        <li> 
361                          <#-- la prima voce non è linkata (privati/business/proposte dedicate) --> 
362                          <#if parentLayout_index == 0 > 
363                            <span>${parentLayout.getName(locale)}</span> 
364                          <#else> 
365                            <a href="${currentGroupUrl}${parentLayout.getFriendlyURL()}"><span>${parentLayout.getName(locale)}</span></a> 
366                          </#if> 
367                        </li> 
368                      </#if> 
369                    </#list> 
370 
371                    <li><span>${.vars['reserved-article-title'].data}</span></li> 
372                  </ul> 
373                </div> 
374              </#if> 
375            </#if> 
376          </#if> 
377 
378          <div class="box-payoff"> 
379            <#-- 
380            ## Titolo prodotto 
381            --> 
382            <h1 class="box-payoff__title">${.vars['reserved-article-title'].data}</h1> 
383 
384            <#-- 
385            ## Claim prodotto 
386            --> 
387            <#if claim?? && validator.isNotNull(claim.getData())> 
388              <div class="box-payoff__abstract">${claim.getData()}</div> 
389            </#if> 
390 
391            <#-- 
392            ## Claim text 
393            --> 
394            <#if claimText?? && validator.isNotNull(claimText.getData())> 
395              <div class="content-editorial"> 
396                <div class="box-editorial"> 
397                  ${claimText.getData()} 
398                </div> 
399              </div> 
400            </#if> 
401 
402            <#-- 
403            ## Categorie Hashtag 
404            --> 
405            <#assign classPK = journalArticleProduct.getResourcePrimKey() /> 
406            <#assign jaAssetEntry = assetEntryLocalService.getEntry(JOURNAL_ARTICLE_CLASS_NAME, classPK) /> 
407            <#assign assetEntryCategories = assetCategoryLocalService.getEntryCategories(jaAssetEntry.getEntryId()) /> 
408            <#assign productCategories = [] /> 
409            <#assign productHashtags = [] /> 
410            <#assign parentCategory = ""/> 
411            <#assign childCategory = ""/> 
412            <#assign categoryUrlTitlePage = ""/> 
413 
414            <#if validator.isNotNull(assetEntryCategories) && (assetEntryCategories?size > 0)> 
415 
416              <#list assetEntryCategories as assetEntryCategory> 
417 
418                <#if (assetEntryCategory.getVocabularyId() == productsCategoriesVocabulary.getVocabularyId())> 
419                  <#assign productCategories = productCategories + [assetEntryCategory] /> 
420                <#elseif (assetEntryCategory.getVocabularyId() == productsHashtagsVocabulary.getVocabularyId())> 
421                  <#assign productHashtags = productHashtags + [assetEntryCategory] /> 
422                </#if> 
423              </#list> 
424            </#if> 
425 
426            <div class="box-payoff__util"> 
427              <#if validator.isNotNull(productHashtags) && (productHashtags?size > 0)> 
428                <div class="box-payoff__category"> 
429                  <ul> 
430                    <#list productHashtags as productsHashtag> 
431                      <#-- !!!!! TODO: soluzione senza friendlyUrl --> 
432                      <li> 
433                        <#assign keywordsLayout = layoutLocalService.getFriendlyURLLayout(groupId, false, "/keywords") /> 
434 
435                        <a href="${portalUtil.getLayoutActualURL(keywordsLayout)}&p_r_p_564233524_categoryId=${productsHashtag.getCategoryId()}" 
436                          title="${productsHashtag.getTitle(locale)}">${productsHashtag.getTitle(locale)}</a> 
437                      </li> 
438                    </#list> 
439                  </ul> 
440                </div> 
441              </#if> 
442 
443              <#-- 
444              ## Share 
445              --> 
446              <#if .vars['request']?has_content || !themeDisplay.getLayout()?? || !getterUtil.getBoolean(themeDisplay.getLayout().getExpandoBridge().getAttribute("cattolica-hide-social-buttons", false))> 
447                <div class="box-share open"> 
448                  <#assign currentCompleteURL = request['attributes']['CURRENT_COMPLETE_URL']/> 
449                  <#assign encodedCurURL = httpUtil.encodeURL(currentCompleteURL) /> 
450 
451                  <button class="btn-share-toggle btn-share ico-social-share" title="<@liferay.language key="cattolica-product-share" />"></button> 
452                  <a href="https://www.facebook.com/sharer/sharer.php?u=${encodedCurURL}" title ="<@liferay.language key="cattolica-product-share-fb" />" class="btn-share ico-share-fb"></a> 
453                  <a href="https://twitter.com/home?status=${encodedCurURL}" title ="<@liferay.language key="cattolica-product-share-twitter" />" class="btn-share ico-share-tw"></a> 
454                  <a href="https://www.linkedin.com/shareArticle?mini=true&url=${encodedCurURL}" title ="<@liferay.language key="cattolica-product-share-linkedin" />" class="btn-share ico-share-ln"></a> 
455                </div> 
456              </#if> 
457            </div> 
458          </div> 
459 
460          <#-- 
461          ## Descrizione prodotto 
462          --> 
463          <#if description?? && validator.isNotNull(description.getData())> 
464            <div class="content-editorial"> 
465              <div class="box-editorial"> 
466                ${description.getData()} 
467              </div> 
468            </div> 
469          </#if> 
470 
471          <#if pagePosition < mapSize > 
472            <#list 0..10 as page> 
473              <#-- 
474              ## Sezione "Punti di forza" 
475              --> 
476              <#if features.getSiblings()?has_content> 
477                <#assign featuresCount = 0> 
478 
479                <#list features.getSiblings() as cur_features> 
480                  <#-- campi struttura --> 
481                  <#assign featuresSection = cur_features.getData()> 
482                  <#assign feature = cur_features.feature> 
483 
484                  <#assign featuresCount = featuresCount + 1> 
485                  <#assign key = "featuresWeight${featuresCount}"> 
486                  <#assign value = weightsMap[key]> 
487 
488                  <#if value?number == (pagePosition + 1) > 
489                    <#if featuresSection?? && validator.isNotNull(featuresSection)> 
490                      <div class="box-dots u-height"> 
491                        <ul> 
492                          <#list feature.getSiblings() as cur_feature> 
493                            <#assign featureTitle = cur_feature.getData()> 
494                            <#if featureTitle?? && validator.isNotNull(featureTitle)> 
495                              <li> 
496                                <div class="u-height-children"> 
497                                  <span>${featureTitle}</span> 
498                                </div> 
499                              </li> 
500                            </#if> 
501                          </#list> 
502                        </ul> 
503                      </div> 
504                    </#if> 
505                  </#if> 
506                </#list> 
507              </#if> 
508 
509              <#-- 
510              ## Sezione "Caratteristiche" 
511              --> 
512              <#if spec?? && spec.getSiblings()?has_content> 
513                <#assign specCount = 0> 
514 
515                <#list spec.getSiblings() as cur_spec> 
516 
517                  <#assign specCount = specCount + 1> 
518                  <#assign key = "specWeight${specCount}"> 
519                  <#assign value = weightsMap[key]> 
520 
521                  <#if value?number == (pagePosition + 1) > 
522                    <#-- titolo --> 
523                    <#if cur_spec.specTitle?? && validator.isNotNull(cur_spec.specTitle.getData())> 
524                      <#assign specHasIcon = cur_spec.specIcon?? && validator.isNotNull(cur_spec.specIcon.getData()) /> 
525                      <#assign specHasIconClass = "" /> 
526 
527                      <#if specHasIcon> 
528                        <#assign specHasIconClass = " has-icon" /> 
529                      </#if> 
530 
531                      <div class="content-editorial"> 
532                        <div class="box-editorial"> 
533                          <h2 class="${specHasIconClass}"> 
534                            <#if specHasIcon> 
535                              <div class="product-spec-title-part product-spec-icon"> 
536                                <svg class="ard-icon"> 
537                                  <use xlink:href="${svgSpritePath}/icons.svg#${cur_spec.specIcon.getData()}"></use> 
538                                </svg> 
539                              </div> 
540                              <div class="product-spec-title-part product-spec-title"> 
541                            </#if> 
542                            ${cur_spec.specTitle.getData()} 
543                            <#if specHasIcon> 
544                              </div> 
545                              <div class="clearfix"></div> 
546                            </#if> 
547                          </h2> 
548                        </div> 
549                      </div> 
550                    </#if> 
551 
552                    <#-- testo --> 
553                    <#if cur_spec.specText?? && validator.isNotNull(cur_spec.specText.getData())> 
554                      <div class="content-editorial"> 
555                        <div class="box-editorial">${cur_spec.specText.getData()}</div> 
556                      </div> 
557                    </#if> 
558 
559                    <#-- accordion --> 
560                    <#if cur_spec.specAccordion??> 
561                      <#list cur_spec.specAccordion.getSiblings() as cur_specAccordion> 
562                        <#if validator.isNotNull(cur_specAccordion.getData())> 
563 
564                          <div class="box-accordion"> 
565                            <div class="box-accordion__toggle box-accordion__toggle--blu"> 
566                              <span class="ico-plus"></span> 
567                              <div class="box-accordion__intro no-ico"> 
568                                <h2 class="box-accordion__title">${cur_specAccordion.getData()}</h2> 
569                              </div> 
570                            </div> 
571                            <div class="box-accordion__content"> 
572                              <div class="box-accordion__wrapper"> 
573 
574                                <#if cur_specAccordion.specAccordionText?? && validator.isNotNull(cur_specAccordion.specAccordionText.getData())> 
575                                  <div class="box-accordion__editorial"> 
576                                    <div class="box-editorial">${cur_specAccordion.specAccordionText.getData()}</div> 
577                                  </div> 
578                                </#if> 
579 
580                                <#if cur_specAccordion.specAccordionAttachment??> 
581                                  <#assign firstDoc = true> 
582 
583                                  <#list cur_specAccordion.specAccordionAttachment.getSiblings() as cur_specAccordionAttachment> 
584                                    <#if validator.isNotNull(cur_specAccordionAttachment.getData())> 
585                                      <#assign docFile = cur_specAccordionAttachment.getData()> 
586                                      <#assign docPath = "${docFile}"?split("/") /> 
587                                      <#assign docUuidString = "${docPath?last}"?split("?") /> 
588                                      <#assign docUuid = docUuidString?first /> 
589                                      <#assign docDM = dLFileEntryLocalService.getFileEntryByUuidAndGroupId(docUuid, groupId) /> 
590 
591                                      <#if firstDoc> 
592                                        <div class="box-accordion__docs"> 
593                                          <ul> 
594 
595                                        <#assign firstDoc = false> 
596                                      </#if> 
597 
598                                      <li> 
599                                        <div class="box-file"> 
600                                          <a href="${docFile}" title="${docDM.getTitle()}" class="ico" target="_blank">${docDM.getTitle()}</a> 
601                                        </div> 
602                                      </li> 
603                                    </#if> 
604 
605                                    <#if !cur_specAccordionAttachment_has_next && !firstDoc > 
606                                        </ul> 
607                                      </div> 
608                                    </#if> 
609                                  </#list> 
610                                </#if> 
611                              </div> 
612                            </div> 
613                          </div> 
614                        </#if> 
615                      </#list> 
616                    </#if> 
617                  </#if> 
618                </#list> 
619              </#if> 
620 
621              <#-- 
622              ## Sezione "Testo libero" 
623              --> 
624              <#if bodytext.getSiblings()?has_content> 
625                <#assign bodytextCount = 0> 
626 
627                <#list bodytext.getSiblings() as cur_bodytext> 
628                  <#-- campi struttura --> 
629                  <#assign bodytextSection = cur_bodytext.getData()> 
630                  <#assign bodytextText = cur_bodytext.bodytextText.getData()> 
631 
632                  <#assign bodytextCount = bodytextCount + 1> 
633                  <#assign key = "bodytextWeight${bodytextCount}"> 
634                  <#assign value = weightsMap[key]> 
635 
636                  <#if value?number == (pagePosition + 1) > 
637                    <#if bodytextText?? && validator.isNotNull(bodytextText)> 
638                      <div class="content-editorial"> 
639                        <div class="box-editorial">${bodytextText}</div> 
640                      </div> 
641                    </#if> 
642                  </#if> 
643                </#list> 
644              </#if> 
645 
646              <#-- 
647              ## Sezione "Tabs" 
648              --> 
649              <#if tabs.getSiblings()?has_content> 
650                <#assign tabsCount = 0> 
651 
652                <#list tabs.getSiblings() as cur_tab> 
653                  <#-- campi struttura --> 
654                  <#assign tabSection = cur_tab.getData()> 
655                  <#assign tabsTitle = cur_tab.tabsTitle> 
656 
657                  <#assign tabsCount = tabsCount + 1> 
658                  <#assign key = "tabsWeight${tabsCount}"> 
659                  <#assign value = weightsMap[key]> 
660 
661                  <#if value?number == (pagePosition + 1) > 
662                    <#if tabSection?? && validator.isNotNull(tabSection)> 
663                      <div class="tab-product"> 
664                        <ul> 
665                          <#list tabsTitle.getSiblings() as cur_tabTitle> 
666                            <#assign tab = cur_tabTitle.getData()> 
667                            <#assign tabIcon = cur_tabTitle.tabIcon.getData()> 
668 
669                            <#if tab?? && validator.isNotNull(tab)> 
670 
671                              <#assign cur_tabClass = ""> 
672                              <#if cur_tabTitle_index == 0> 
673                                <#assign cur_tabClass = " current"> 
674                              </#if> 
675 
676                              <li class="tab-product-item${cur_tabClass}"> 
677                                <button class="button"> 
678                                  <#if tabIcon?? && validator.isNotNull(tabIcon)> 
679                                    <div class="ico-product"> 
680                                      <img src="${tabIcon}" alt="${tab}"/> 
681                                    </div> 
682                                  </#if> 
683                                  <div class="label-product">${tab}</div> 
684                                </button> 
685                                <div class="tab-product-item__panel"></div> 
686                              </li> 
687                            </#if> 
688                          </#list> 
689                        </ul> 
690 
691                        <div class="tab-product__content"> 
692                          <#list tabsTitle.getSiblings() as cur_tabTitle> 
693                            <#assign tabText = cur_tabTitle.tabText.getData()> 
694                            <#assign tabDoc = cur_tabTitle.tabDoc> 
695 
696                            <div class="tab-product__content-item"> 
697                              <#if tabText?? && validator.isNotNull(tabText)> 
698                                <div class="box-editorial">${tabText}</div> 
699                              </#if> 
700 
701                              <#assign firstDoc = true> 
702 
703                              <#list tabDoc.getSiblings() as cur_tabDoc> 
704                                <#assign tabDocFile = cur_tabDoc.getData()> 
705 
706                                <#if tabDocFile?? && validator.isNotNull(tabDocFile)> 
707                                  <#assign tabDocPath = "${tabDocFile}"?split("/") /> 
708                                  <#assign tabDocUuidString = "${tabDocPath?last}"?split("?") /> 
709                                  <#assign tabDocUuid = tabDocUuidString?first /> 
710                                  <#assign tabDocDM = dLFileEntryLocalService.getFileEntryByUuidAndGroupId(tabDocUuid, groupId) /> 
711                                  <#assign dimension = (tabDocDM.getSize())/1000000 /> 
712 
713                                  <#if firstDoc> 
714                                    <div class="tab-product__docs"> 
715                                      <ul> 
716 
717                                    <#assign firstDoc = false> 
718                                  </#if> 
719 
720                                  <li> 
721                                    <div class="box-file"> 
722                                      <a href="${tabDocFile}" title="${tabDocDM.getTitle()}" class="ico" target="_blank">${tabDocDM.getTitle()}</a> 
723                                    </div> 
724                                  </li> 
725                                </#if> 
726 
727                                <#if !cur_tabDoc_has_next && !firstDoc > 
728                                    </ul> 
729                                  </div> 
730                                </#if> 
731                              </#list> 
732                            </div> 
733                          </#list> 
734                        </div> 
735                      </div> 
736                    </#if> 
737                  </#if> 
738                </#list> 
739              </#if> 
740 
741              <#-- 
742              ## Sezione "Condizioni speciali" 
743              --> 
744              <#if special.getSiblings()?has_content> 
745                <#assign specialCount = 0> 
746 
747                <#list special.getSiblings() as cur_special> 
748                  <#-- campi struttura --> 
749                  <#assign specialSection = cur_special.getData()> 
750                  <#assign specialText = cur_special.specialText.getData()> 
751                  <#assign specialDoc = cur_special.specialDoc> 
752 
753                  <#assign specialCount = specialCount + 1> 
754                  <#assign key = "specialWeight${specialCount}"> 
755                  <#assign value = weightsMap[key]> 
756 
757                  <#if value?number == (pagePosition + 1) > 
758 
759                    <#if specialSection?? && validator.isNotNull(specialSection)> 
760                      <#-- todo --> 
761                      <div class="box-accordion"> 
762                        <div class="box-accordion__toggle box-accordion__toggle--blu ico-acc-star"> 
763                          <span class="ico-plus"></span> 
764                          <div class="box-accordion__intro"> 
765                            <h2 class="box-accordion__title">${specialSection}</h2> 
766                          </div> 
767                        </div> 
768 
769                        <#if specialSection?? && validator.isNotNull(specialSection)> 
770                          <div class="box-accordion__content"> 
771                            <div class="box-accordion__wrapper"> 
772                              <#if specialText?? && validator.isNotNull(specialText)> 
773                                <div class="box-accordion__editorial"> 
774                                  <div class="box-editorial">${specialText}</div> 
775                                </div> 
776                              </#if> 
777 
778                              <#assign firstDoc = true> 
779 
780                              <#list specialDoc.getSiblings() as cur_specialDoc> 
781                                <#assign specialDocFile = cur_specialDoc.getData()> 
782 
783                                <#if specialDocFile?? && validator.isNotNull(specialDocFile)> 
784                                  <#assign specialDocPath = "${specialDocFile}"?split("/") /> 
785                                  <#assign specialDocUuidString = "${specialDocPath?last}"?split("?") /> 
786                                  <#assign specialDocUuid = specialDocUuidString?first /> 
787                                  <#assign specialDocDM = dLFileEntryLocalService.getFileEntryByUuidAndGroupId(specialDocUuid, groupId) /> 
788                                  <#assign dimension = (specialDocDM.getSize())/1000000 /> 
789 
790                                  <#if firstDoc> 
791                                    <div class="box-accordion__docs"> 
792                                      <ul> 
793 
794                                    <#assign firstDoc = false> 
795                                  </#if> 
796 
797                                  <li> 
798                                    <div class="box-file"> 
799                                      <a href="${specialDocFile}" title="${specialDocDM.getTitle()}" class="ico" target="_blank">${specialDocDM.getTitle()}</a> 
800                                    </div> 
801                                  </li> 
802                                </#if> 
803 
804                                <#if !cur_specialDoc_has_next && !firstDoc > 
805                                    </ul> 
806                                  </div> 
807                                </#if> 
808                              </#list> 
809                            </div> 
810                          </div> 
811                        </#if> 
812                      </div> 
813                    </#if> 
814                  </#if> 
815                </#list> 
816              </#if> 
817 
818              <#-- 
819              ## Sezione "Documentazione" 
820              --> 
821              <#if documentation.getSiblings()?has_content> 
822                <#assign documentationCount = 0> 
823 
824                <#list documentation.getSiblings() as cur_documentation> 
825                  <#-- campi struttura --> 
826                  <#assign documentationSection = cur_documentation.getData()> 
827                  <#assign documentationText = cur_documentation.documentationText.getData()> 
828                  <#assign documentationDoc = cur_documentation.documentationDoc> 
829 
830                  <#assign documentationCount = documentationCount + 1> 
831                  <#assign key = "documentationWeight${documentationCount}"> 
832                  <#assign value = weightsMap[key]> 
833 
834                  <#if value?number == (pagePosition + 1) > 
835                    <#if documentationSection?? && validator.isNotNull(documentationSection)> 
836                      <div class="box-accordion"> 
837                        <div class="box-accordion__toggle box-accordion__toggle--gray ico-acc-folder"> 
838                          <span class="ico-plus"></span> 
839                          <div class="box-accordion__intro"> 
840                            <h2 class="box-accordion__title">${documentationSection}</h2> 
841                          </div> 
842                        </div> 
843                        <div class="box-accordion__content"> 
844                          <div class="box-accordion__wrapper"> 
845                            <#if documentationText?? && validator.isNotNull(documentationText)> 
846                              <div class="box-accordion__editorial">${documentationText}</div> 
847                            </#if> 
848 
849                            <#assign firstDoc = true> 
850 
851                            <#list documentationDoc.getSiblings() as cur_documentationDoc> 
852                              <#assign docFile = cur_documentationDoc.getData()> 
853 
854                              <#if docFile?? && validator.isNotNull(docFile)> 
855                                <#assign docPath = "${docFile}"?split("/") > 
856                                <#assign docUuidString = "${docPath?last}"?split("?") > 
857                                <#assign docUuid = docUuidString?first> 
858                                <#assign docDM = dLFileEntryLocalService.getFileEntryByUuidAndGroupId(docUuid, groupId) /> 
859                                <#assign dimension = (docDM.getSize())/1000000> 
860 
861                                <#if firstDoc> 
862                                  <div class="box-accordion__docs"> 
863                                    <ul> 
864                                  <#assign firstDoc = false> 
865                                </#if> 
866 
867                                <li> 
868                                  <div class="box-file"> 
869                                    <a href="${docFile}" title="${docDM.getTitle()}" class="ico" target="_blank">${docDM.getTitle()}</a> 
870                                  </div> 
871                                </li> 
872                              </#if> 
873 
874                              <#if !cur_documentationDoc_has_next && !firstDoc > 
875                                  </ul> 
876                                </div> 
877                              </#if> 
878                            </#list> 
879                          </div> 
880                        </div> 
881                      </div> 
882                    </#if> 
883                  </#if> 
884                </#list> 
885              </#if> 
886 
887              <#-- 
888              ## Sezione "Accordion" 
889              --> 
890              <#if accordion.getSiblings()?has_content> 
891                <#assign accordionCount = 0> 
892 
893                <#list accordion.getSiblings() as cur_accordion> 
894                  <#-- campi struttura --> 
895                  <#assign accordionSection = cur_accordion.getData()> 
896                  <#assign accordionText = cur_accordion.accordionText.getData()> 
897                  <#assign accordionDoc = cur_accordion.accordionDoc> 
898 
899                  <#assign accordionCount = accordionCount + 1> 
900                  <#assign key = "accordionWeight${accordionCount}"> 
901                  <#assign value = weightsMap[key]> 
902 
903                  <#if value?number == (pagePosition + 1) > 
904                    <#if accordionSection?? && validator.isNotNull(accordionSection)> 
905                      <div class="box-accordion"> 
906                        <div class="box-accordion__toggle box-accordion__toggle--gray ico-acc-question"> 
907                          <span class="ico-plus"></span> 
908                          <div class="box-accordion__intro"> 
909                            <h2 class="box-accordion__title">${accordionSection}</h2> 
910                          </div> 
911                        </div> 
912                        <div class="box-accordion__content"> 
913                          <div class="box-accordion__wrapper"> 
914                            <#if accordionText?? && validator.isNotNull(accordionText)> 
915                              <div class="box-accordion__editorial">${accordionText}</div> 
916                            </#if> 
917 
918                            <#assign firstDoc = true> 
919 
920                            <#list accordionDoc.getSiblings() as cur_accordionDoc> 
921                              <#assign docFile = cur_accordionDoc.getData()> 
922 
923                              <#if docFile?? && validator.isNotNull(docFile)> 
924                                <#assign accordionDocPath = "${docFile}"?split("/") > 
925                                <#assign accordionDocUuidString = "${accordionDocPath?last}"?split("?") > 
926                                <#assign accordionDocUuid = accordionDocUuidString?first> 
927                                <#assign accordionDocDM = dLFileEntryLocalService.getFileEntryByUuidAndGroupId(accordionDocUuid, groupId) /> 
928                                <#assign dimension = (accordionDocDM.getSize())/1000000> 
929 
930                                <#if firstDoc> 
931                                  <div class="box-accordion__docs"> 
932                                    <ul> 
933                                  <#assign firstDoc = false> 
934                                </#if> 
935 
936                                <li> 
937                                  <div class="box-file"> 
938                                    <a href="${docFile}" title="${accordionDocDM.getTitle()}" class="ico" target="_blank">${accordionDocDM.getTitle()}</a> 
939                                  </div> 
940                                </li> 
941                              </#if> 
942 
943                              <#if !cur_accordionDoc_has_next && !firstDoc > 
944                                  </ul> 
945                                </div> 
946                              </#if> 
947                            </#list> 
948                          </div> 
949                        </div> 
950                      </div> 
951                    </#if> 
952                  </#if> 
953                </#list> 
954              </#if> 
955 
956              <#assign pagePosition = pagePosition + 1> 
957            </#list> 
958          </#if> 
959 
960          <div class="msg-adv"> 
961            <#-- 
962            ## Messaggio pubblicitario 
963            --> 
964            <#if msgAdv?? && validator.isNotNull(msgAdv.getData())> 
965              ${msgAdv.getData()} 
966            <#else> 
967              <@liferay.language key="cattolica-product-advertisement" /> 
968            </#if> 
969          </div> 
970        </div> 
971 
972        <#-- 
973        ## Spalla destra 
974        --> 
975        <div class="col-sidebar has-lateral-padding"> 
976          <#list 0..9 as sidebar> 
977            <#assign position = sidebar_index +1 /> 
978             
979            <#-- 
980            ## Area Clienti 
981            --> 
982            <#if shortLinkJA?? && validator.isNotNull(shortLinkJA) && shortLinkWeight?? && validator.isNotNull(shortLinkWeight) && shortLinkWeight.getData()?number == position> 
983              <@includeJournalArticle shortLinkJA.getGroupId() shortLinkJA.getUrlTitle() "" /> 
984            </#if> 
985             
986            <#-- 
987            ## Quotti 
988            --> 
989            <#if quottiJA?? && validator.isNotNull(quottiJA) && quottiWeight?? && validator.isNotNull(quottiWeight) && quottiWeight.getData()?number == position> 
990              <@includeJournalArticle quottiJA.getGroupId() quottiJA.getUrlTitle() "" /> 
991            </#if> 
992 
993            <#-- 
994            ## Trova agenzia 
995            --> 
996            <#if agencyLocatorJA?? && validator.isNotNull(agencyLocatorJA) && validator.isNotNull(agencyLocatorWeight) && agencyLocatorWeight.getData()?number == position> 
997              <@includeJournalArticle agencyLocatorJA.getGroupId() agencyLocatorJA.getUrlTitle() "CATTOLICA-PORTAL-TPL-AGENCYLOCATOR-BOX" /> 
998            </#if> 
999 
1000            <#-- 
1001            ## Risorsa correlata: customer care 
1002            --> 
1003            <#if validator.isNotNull(customerCareWeight) && customerCareWeight.getData()?number == position> 
1004              <#if validator.isNotNull(customercareJA)> 
1005                <@includeJournalArticle customercareJA.getGroupId() customercareJA.getUrlTitle() "" /> 
1006              </#if> 
1007            </#if> 
1008 
1009            <#-- 
1010            ## Risorsa correlata: video 
1011            --> 
1012            <#if validator.isNotNull(videoWeight) && videoWeight.getData()?number == position> 
1013              <#if validator.isNotNull(videoJA)> 
1014                <div class="has-margin-bottom has-intro"> 
1015                  <@includeJournalArticle videoJA.getGroupId() videoJA.getUrlTitle() "CATTOLICA-PORTAL-TPL-VIDEOMODAL-BOX" /> 
1016                </div> 
1017              </#if> 
1018            </#if> 
1019 
1020            <#-- 
1021            ## Risorse correlate: altri prodotti 
1022            --> 
1023            <#if validator.isNotNull(sliderProductsWeight) && sliderProductsWeight.getData()?number == position> 
1024              <div class="slider-box has-margin-bottom has-intro"> 
1025                <div class="intro vgg--bg-light"> 
1026                  <div class="intro-ico ico-bg ico--bulb-blu"></div> 
1027                  <div class="intro-label label-blu-3"> 
1028                    <span><@liferay.language key="cattolica-product-related-products-title" /></span> 
1029                  </div> 
1030                </div> 
1031                <div class="slider-box__ratio"> 
1032                  <div class="slider-box__content"> 
1033                    <div class="slider-box__carousel"> 
1034                      <#if productboxJA?has_content && validator.isNotNull(productboxJA)> 
1035 
1036                        <#list productboxJA as cur_productboxJA> 
1037                          <@includeJournalArticle cur_productboxJA.getGroupId() cur_productboxJA.getUrlTitle() CATTOLICA_PRODUCTBOX_MODEL_KEY /> 
1038                        </#list> 
1039                      <#else> 
1040                        <#assign productST = ddmStructureLocalService.fetchStructure(groupId, portalUtil.getClassNameId("com.liferay.portlet.journal.model.JournalArticle"), "CATTOLICA-PORTAL-ST-PRODUCT", true) /> 
1041                        <#assign assetEntryQueryService = objectUtil('com.liferay.portlet.asset.service.AssetEntryLocalServiceUtil') /> 
1042                        <#assign assetEntryQuery = objectUtil('com.liferay.portlet.asset.service.persistence.AssetEntryQuery') /> 
1043                        <#assign void = assetEntryQuery.setAllCategoryIds(articleCatProductId) /> 
1044                        <#assign void = assetEntryQuery.setClassName("com.liferay.portlet.journal.model.JournalArticle") /> 
1045                        <#assign void = assetEntryQuery.setClassTypeIds([productST.getStructureId()]) /> 
1046                        <#assign void = assetEntryQuery.setOrderByCol1("priority") /> 
1047                        <#assign void = assetEntryQuery.setOrderByType1("ASC") /> 
1048                        <#assign prodotti = assetEntryQueryService.getEntries(assetEntryQuery) /> 
1049 
1050                        <#list prodotti as prodotto> 
1051                          <#assign latestProdotto = journalArticleLocalService.getLatestArticle(prodotto.getClassPK()) /> 
1052 
1053                          <#if latestProdotto.getArticleId() != journalArticleId > 
1054                            <#attempt> 
1055                              <#assign journalArticleToInclude = journalContentUtil.getContent(groupId, latestProdotto.getArticleId(), CATTOLICA_PRODUCTBOX_MODEL_KEY, "normal", locale?string, xmlRequest) /> 
1056                              ${journalArticleToInclude} 
1057                            <#recover> 
1058                              <!-- ${latestProdotto.getStructureId()} - ${latestProdotto.getArticleId()} - ${journalArticleId} --> 
1059                            </#attempt> 
1060                          </#if> 
1061                        </#list> 
1062                      </#if> 
1063                    </div> 
1064                  </div> 
1065                </div> 
1066              </div> 
1067            </#if> 
1068 
1069            <#-- 
1070            ## Risorsa correlata: banner 
1071            --> 
1072            <#if validator.isNotNull(bannerWeight) && bannerWeight.getData()?number == position> 
1073              <#if bannerJA?has_content && validator.isNotNull(bannerJA)> 
1074                <#list bannerJA as cur_bannerJA> 
1075                  <@includeJournalArticle cur_bannerJA.getGroupId() cur_bannerJA.getUrlTitle() "" /> 
1076                </#list> 
1077              </#if> 
1078            </#if> 
1079 
1080          </#list> 
1081        </div> 
1082      </div> 
1083    </div> 
1084  </div> 
1085</#if> 
1086 
1087<#-- Macro per risorse correlate --> 
1088<#macro includeJournalArticle groupId urlTitle tplId> 
1089  <#assign journalArticleLocalService = serviceLocator.findService("com.liferay.portlet.journal.service.JournalArticleLocalService") /> 
1090 
1091  <#attempt> 
1092    <#assign journalArticle = journalArticleLocalService.getLatestArticleByUrlTitle(groupId, urlTitle?string, 0) /> 
1093 
1094    <#if validator.isNotNull(tplId)> 
1095      <#assign journalArticleToInclude = journalContentUtil.getContent(groupId, journalArticle.getArticleId(), tplId, "normal", locale?string, xmlRequest) /> 
1096    <#else> 
1097      <#assign journalArticleToInclude = journalContentUtil.getContent(groupId, journalArticle.getArticleId(), "normal", locale?string, xmlRequest) /> 
1098    </#if> 
1099 
1100    ${journalArticleToInclude} 
1101    <#recover> 
1102  </#attempt> 
1103</#macro>