Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing:
==> null [in template "8191648#8191687#438724" at line 21, column 25]
----
Tip: If the failing expression is known to 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 Vocabulary = null [in template "8191648#8191687#438724" at line 21, column 3]
----
1<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
2<#assign AssetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") />
3<#assign AssetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") />
4<#assign DLFileEntryLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService") />
5
6
7<#assign JournalArticle = JournalArticleLocalService.getArticle(themeDisplay.getScopeGroupId(), .vars['reserved-article-id'].data) />
8<#assign classPK = JournalArticle.getResourcePrimKey() />
9
10<#assign AssetEntry = AssetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", classPK) />
11
12<#attempt>
13 <#assign urlRedirect = request.getParameter("redirect") />
14<#recover>
15 <#assign urlRedirect = "/blog-turismo-navarra" />
16</#attempt>
17
18<#attempt>
19 <#assign Vocabulary = AssetVocabularyLocalService.searchVocabularies(themeDisplay.getCompanyId(), themeDisplay.getScopeGroupId(), "Etiquetas del blog", -1, -1).getBaseModels()[0] />
20<#recover>
21 <#assign Vocabulary = null />
22</#attempt>
23
24<#assign title = .vars['reserved-article-title'].data + " | Visit Navarra" />
25
26
27${themeDisplay.getLayout().setTitle(title)}
28${themeDisplay.getLayout().setDescription(.vars['reserved-article-description'].data)}
29${themeDisplay.getLayout().setKeywords(CamposSEO.getData(), themeDisplay.getLocale(), themeDisplay.getSiteDefaultLocale())}
30<@liferay_util["html-top"]>
31 <meta property="og:title" content="${title}" />
32 <meta property="og:description" content="${.vars['reserved-article-description'].data} " />
33 <meta property="og:updated_time" content="${.now?string("yyyy-MM-dd'T'HH:mm:ssZZZ")}" />
34 <meta property="og:type" content="website" />
35 <meta property="og:url" content="${themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()}" />
36</@>
37<#if FotoCabecera.getData()?has_content>
38 <@liferay_util["html-top"]>
39 <meta property="og:image" content="${themeDisplay.getPortalURL() + FotoCabecera.getData()}" />
40 </@>
41</#if>
42
43<script>
44 document.addEventListener('lazybeforeunveil', function(e) {
45 var bg = e.target.getAttribute('data-bg');
46 if (bg) {
47 // Reemplazar paréntesis antes de codificar la URL
48 bg = bg.replace(/\(/g, '%28').replace(/\)/g, '%29');
49 var encodedBg = encodeURI(bg);
50 e.target.style.backgroundImage = 'url(' + encodedBg + ')';
51 }
52 });
53
54</script>
55
56<script src="https://cdnjs.cloudflare.com/ajax/libs/lazysizes/5.3.2/lazysizes.min.js" async=""></script>
57
58<section class="detail_blog">
59
60 <#if FotoCabecera.getData()?has_content>
61 <#assign imageUrl = "/o/adaptive-media/image/" + FotoCabecera.getAttribute("fileEntryId") + "/turismo-navarra-2600xauto/" + FotoCabecera.getAttribute("name") />
62 <div class="image_background lazyload" data-bg="${imageUrl}" style="background:url('${imageUrl}');"></div>
63 </#if>
64
65 <div class="content_blog container">
66 <p class="fecha">
67 <#assign fecha = .vars['reserved-article-display-date'].data?date("EEE',' dd MMM yyyy HH:mm:ss Z") />
68 <#if themeDisplay.getLanguageId() == "eu_ES">
69 ${fecha?string("yyyy.MM.dd")}
70 <#else>
71 ${fecha?string("dd MMM',' yyyy")?lower_case}
72 </#if>
73 </p>
74 <h1 class="title_blog">${.vars['reserved-article-title'].data}</h1>
75 <p style="margin: 1em 2em 0; font-weight: bold; font-size: 18px;">${Entradilla.getData()}</p>
76 <div class="line_gray"></div>
77 <div class="categorys_and_rrss">
78
79 <ul class="list_categorys">
80 <#list AssetEntry.getCategories() as Category>
81 <#if Vocabulary?? && Vocabulary.getVocabularyId() != Category.getVocabularyId()>
82 <li><a href="${urlRedirect}/-/categories/${Category.getCategoryId()}?p_r_p_resetCur=true&p_r_p_categoryId=${Category.getCategoryId()}" target="_blank">${Category.getTitle(locale)}</a></li>
83 </#if>
84 </#list>
85 </ul>
86
87 <#assign currentUrl = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent() />
88 <ul class="rrss">
89 <li><a href="https://www.facebook.com/sharer/sharer.php?p[title]=${.vars['reserved-article-title'].data}&u=${currentUrl}" target="_blank"><i class="fab fa-facebook"></i><span class="sr-only">Facebook</span></a></li>
90 <li><a href="http://twitter.com/share?text=${.vars['reserved-article-title'].data}&url=${currentUrl}" target="_blank"><svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 512 512"><!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><style>svg{fill:#000000}</style><path d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z"/></svg><span class="sr-only">Twitter</span></a></li>
91 <li><a href="mailto:?subject=${.vars['reserved-article-title'].data}&body=${currentUrl}" target="_blank"><i class="fas fa-envelope"></i><span class="sr-only">Correo electrónico</span></a></li>
92 <li><a href="whatsapp://send?text=${currentUrl}" target="_blank"><i class="fab fa-whatsapp"></i><span class="sr-only">WhatsApp</span></a></li>
93 </ul>
94 </div>
95
96 <a class="button_blog_home" href="/blog-turismo-navarra">
97 <i class="fas fa-home"></i>
98 <span>Blog</span>
99 </a>
100
101 <div class="content_text">
102 <#if Articulo.Bloque.getSiblings()?has_content>
103 <#list Articulo.Bloque.getSiblings() as Bloque>
104 <#if Bloque.Titulo.getData()?has_content>
105 <h2>${Bloque.Titulo.getData()}</h2>
106 </#if>
107 <#if Bloque.Contenido?? && Bloque.Contenido.getSiblings()?has_content>
108 <#list Bloque.Contenido.getSiblings() as Contenido>
109 <#if Contenido.Texto.getData()?has_content>
110 ${Contenido.Texto.getData()}
111 </#if>
112
113 <#if Contenido.Multimedia.getSiblings()?size lte 2>
114 <#list Contenido.Multimedia.getSiblings() as Multimedia>
115 <#if Multimedia.Imagen.getData()?has_content>
116
117 <#if Multimedia?is_first>
118 <div class="row">
119 </#if>
120 <div class="col-12 <#if Contenido.Multimedia.getSiblings()?size == 1>col-md-12<#else>col-md-6</#if>">
121 <#if Multimedia.UrlVideo.getData()?has_content>
122 <a class="video_blog" href="${Multimedia.UrlVideo.getData()}" target="_blank">
123 <i class="far fa-play-circle video"></i>
124 </a>
125 </#if>
126
127 <#attempt>
128 <#assign imageData = Multimedia.Imagen.getData()?split("/") />
129 <#assign image = DLFileEntryLocalService.fetchFileEntryByFileName(imageData[2]?number, imageData[3]?number, imageData[4]?replace("+", " ")) />
130 <#assign imageUrl = "/o/adaptive-media/image/" + image.getFileEntryId() + "/turismo-navarra-1000xauto/" + image.getTitle() />
131 <img src="${imageUrl}" alt="${Multimedia.Accesibilidad.getData()}" loading="lazy">
132 <#recover>
133 <img src="${Multimedia.Imagen.getData()}" alt="${Multimedia.Accesibilidad.getData()}" loading="lazy">
134 </#attempt>
135 </div>
136 <#if Multimedia?is_last>
137 </div>
138 </#if>
139 </#if>
140 </#list>
141 </#if>
142 </#list>
143 </#if>
144 </#list>
145 </#if>
146 </div>
147
148 <#if CTA.UrlCTA.getData()?has_content && CTA.TextoCTA.getData()?has_content>
149 <div class="link_global">
150 <a href="${CTA.UrlCTA.getData()}" <#if CTA.TargetCTA.getData()?has_content>target="${CTA.TargetCTA.getData()}"</#if> class="btn button-base red">${CTA.TextoCTA.getData()}</a>
151 </div>
152 </#if>
153 </div>
154</section>
155
156<#if Vocabulary??>
157 <#assign tagColors = ["blue", "yellow", "green"] />
158 <#assign tagColorIndex = 0 />
159
160 <section class="nube_tags_blog container">
161 <div class="line_gray"></div>
162 <h2 class="title">${Vocabulary.getDescription(locale)}</h2>
163 <ul class="list_tags_blog">
164 <#list Vocabulary.getCategories() as Category>
165 <li>
166 <a class="type_tag ${tagColors[tagColorIndex]}"
167 href="${urlRedirect}/-/categories/${Category.getCategoryId()}?p_r_p_resetCur=true&p_r_p_categoryId=${Category.getCategoryId()}">
168 ${Category.getTitle(locale)}
169 </a>
170 </li>
171
172 <#assign tagColorIndex += 1 />
173 <#if tagColorIndex == 3>
174 <#assign tagColorIndex = 0 />
175 </#if>
176 </#list>
177 </ul>
178 </section>
179</#if>
180
181<#if checkLogos?exists>
182 <#if getterUtil.getBoolean(checkLogos.getData())>
183 <#if checkLogos.logo.getSiblings()?has_content>
184 <ul class="list_logos_blog">
185 <#list checkLogos.logo.getSiblings() as curLogo>
186 <#if (curLogo.getData())?? && curLogo.getData() != "">
187 <li class="item_logo">
188 <img class="logo" alt="${curLogo.getAttribute("alt")}" data-fileentryid="${curLogo.getAttribute("fileEntryId")}" src="${curLogo.getData()}" />
189 </li>
190 </#if>
191 </#list>
192 </ul>
193 </#if>
194 </#if>
195</#if>