Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing: ==> Podcasts [in template "38913#38948#3413239" at line 111, column 34] ---- 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: #if validator.isNotNull(Podcasts.Podc... [in template "38913#38948#3413239" at line 111, column 9] ----
1<#assign layoutTool = utilLocator.findUtil("lportal-ce-hook", "as.asac.template.tools.LayoutTool") />
2<#assign journalTool = utilLocator.findUtil("lportal-ce-hook", "as.asac.template.tools.JournalTool") />
3<#assign dlTool = utilLocator.findUtil("lportal-ce-hook", "as.asac.template.tools.DLTool") />
4<#assign portletTool = utilLocator.findUtil("lportal-ce-hook", "as.asac.template.tools.PortletTool") />
5<#assign urlDecoderTool = utilLocator.findUtil('lportal-ce-hook', 'as.asac.template.tools.URLDecoder')/>
6<#assign httpTool = utilLocator.findUtil('lportal-ce-hook', 'as.asac.template.tools.HttpTool') />
7
8<#assign articleId = .vars['reserved-article-id'].data>
9<#assign title = .vars['reserved-article-title'].data>
10<#assign description=.vars["reserved-article-description"].data />
11<#assign smallImageUrl=.vars["reserved-article-small-image-url"].data />
12<#assign date=.vars["reserved-article-display-date"].data />
13<#assign request = .vars['request']>
14<#assign portletNamespace = request['portlet-namespace']!>
15<#assign themeDisplayStr = request['theme-display']!>
16
17
18<#assign smallImageFullUrl = "${themeDisplayStr['portal-url']!}${smallImageUrl}" />
19<#assign dateFormatted = journalTool.getDateFormat(date, "dd MMMM yyyy", locale, timezone)>
20
21
22<#assign display_date = .vars["reserved-article-display-date"].data />
23<#assign inputFormat = "EEE, dd MMM yyyy HH:mm:ss Z">
24<#assign parsedDate = display_date?datetime(inputFormat)>
25<#assign outputFormat = "dd-MM-yyyy">
26<#assign formattedDate = parsedDate?string(outputFormat)>
27
28
29<#assign currentURL = htmlUtil.escape(themeDisplay.getURLCurrent())/>
30
31
32
33
34<article class="template template-news-detail">
35
36 <#assign showJournalTitle = getterUtil.getBoolean(portletTool.getPreference(request, "showAssetTitle"), false) />
37 <#if showAssetTitle?has_content && showAssetTitle>
38 <div class="portlet-title-wrapper">
39 <div class="portlet-title h3">${title}</div>
40 </div>
41 <#else>
42 <div class="portlet-title-wrapper">
43 <div class="portlet-title h3">${title}</div>
44 </div>
45 </#if>
46
47 <section class="row flex-row-reverse mt-4">
48 <#if validator.isNotNull(smallImageUrl)>
49 <div class="col-sm-3 col-12">
50 <a href="${smallImageUrl}" title="Imagen ${title}" class="image-wrapper image-wrapper-cover image-wrapper-style lightbox" style="background-image: url('${dlTool.getThumbnail(smallImageUrl, 3)}');">
51 <img src="${dlTool.getThumbnail(smallImageUrl, 3)}" alt="Imagen ${title}" />
52 </a>
53 </div>
54 </#if>
55 <div class="<#if validator.isNotNull(smallImageUrl)> col-sm-9 </#if> col-12">
56 <div class="text-metadata mt-4 mt-sm-0">
57 <span id="share-${articleId}" class="need-share-button-default need-share-button"
58 data-share-icon-style="box"
59 data-share-networks="Mailto,Twitter,Whatsapp,Telegram,Facebook"
60 data-share-url="${urlDecoderTool.decodeURL(htmlUtil.escape(httpTool.toUnicode(themeDisplay.getPortalURL())))}${urlDecoderTool.decodeURL(htmlUtil.escape(httpTool.toUnicode(themeDisplay.getURLCurrent())))}"
61 data-share-title="${htmlUtil.escape(title)}"><!--share--></span>
62 <span><a href="https://api.whatsapp.com/send?text=${title} - ${urlDecoderTool.decodeURL(htmlUtil.escape(httpTool.toUnicode(themeDisplay.getPortalURL())))}${urlDecoderTool.decodeURL(htmlUtil.escape(httpTool.toUnicode(themeDisplay.getURLCurrent())))}" target="_blank"><i class="fab fa-whatsapp"></i><span class="hide-accessible">Whatsapp: ${title}</span></a></span>
63
64
65 <script src="${themeDisplay.getPathThemeRoot()}/js/needsharebutton/needsharebutton.min.js"></script>
66 <script src="${themeDisplay.getPathThemeRoot()}/js/needsharebutton/needsharebutton.js"></script>
67 <script type="text/javascript">
68 new needShareDropdown(document.getElementById('share-${articleId}'));
69 </script>
70
71
72
73
74 <div class="date-wrapper text-metadata mb-3">
75 <span class="icon-calendar"><span class="hide-accessible"><@liferay.language key="date" /></span> </span><span class="date">${dateFormatted}</span>
76 </div>
77 <#if validator.isNotNull(description)>
78 <p class="text-abstract">${description}</p>
79 </#if>
80 <#if validator.isNotNull(Descripcion.data)>
81 <p class="text-abstract">${Descripcion.data}</p>
82 </#if>
83 </div>
84 </section>
85
86 <#assign htmlDocuments = journalTool.getHTMLDocuments(Documentos.Documento.getSiblings()) />
87 <#if validator.isNotNull(htmlDocuments)>
88 <section class="documents">
89 <div class="h5">${languageUtil.get(locale, "documents")}</div>
90 ${htmlDocuments}
91 </section>
92 </#if>
93
94
95 <#assign htmlGallery = journalTool.getHTMLGallery(Galeria.Imagen.getSiblings(), 3, "gallery-thumbs") />
96 <#if validator.isNotNull(htmlGallery)>
97 <section class="image-gallery">
98 <div class="h5">${languageUtil.get(locale, "image-gallery")}</div>
99 ${htmlGallery}
100 </section>
101 </#if>
102
103
104 <#assign htmlLinks = journalTool.getHTMLLinks(getterUtil.getLong(groupId), locale, Enlaces.Enlace.getSiblings(), Enlaces.EnlaceInterno.getSiblings()) />
105 <#if validator.isNotNull(htmlLinks)>
106 <section class="links">
107 <div class="h5">${languageUtil.get(locale, "links")}</div>
108 ${htmlLinks}
109 </section>
110 </#if>
111 <#if validator.isNotNull(Podcasts.Podcast.getData()) && validator.isNotNull(Podcasts.Podcast.getSiblings()) && Podcasts.Podcast.getSiblings()?size gt 0>
112 <section class="audios mt-4">
113 <div class="h5">Audios</div>
114 <#list Podcasts.Podcast.getSiblings() as podcast>
115 <#if validator.isNotNull(podcast.getData())>
116 <#assign dlFileEntry = dlTool.getDLFileEntryByPath(podcast.getData()?string)/>
117 <#assign ext = dlFileEntry.extension/>
118
119 <#if validator.isNotNull(podcast.PodcastNombre.getData())>
120 <#assign title = podcast.PodcastNombre.getData()/>
121 <#else>
122 <#assign title = dlFileEntry.getTitle()/>
123 </#if>
124
125 <div class="audio-wrapper">
126 <div class="audio mb-4">
127 <div class="important mb-2">${title}</div>
128 <audio controls>
129 <source src="${podcast.getData()}" title="${title}" type="audio/mpeg">
130 Tu navegador no soporta el elemento de audio.
131 </audio>
132 </div>
133 </div>
134 </#if>
135 </#list>
136 </section>
137 </#if>
138</article>
139
140<div class="hide">
141 <#assign cats = journalTool.getCategories(getterUtil.getLong(groupId),articleId) />
142 <#list cats as cat>
143 <p>cat: ${cat.getName()}, vaobulcary: ${cat.getVocabularyId()}</p>
144 </#list>
145</div>
146
147<style>
148 .template-news-detail .audio{
149 background: #fafafa;
150 padding: 5px 10px;
151 }
152</style>