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>