Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing:
==> experto.imagenExperto.linkedinExperto [in template "20098#20124#11625301" at line 80, column 119]
----
Tip: It's the step after the last dot that caused this error, not those before it.
----
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: ${experto.imagenExperto.linkedinExper... [in template "20098#20124#11625301" at line 80, column 117]
----
1<#setting url_escaping_charset='utf-8'>
2 <#assign
3 JournalArticleLocalService=serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")
4 WorkflowConstants=staticUtil["com.liferay.portal.kernel.workflow.WorkflowConstants"]
5 DLURLHelper=serviceLocator.findService("com.liferay.document.library.util.DLURLHelper")
6 DLAppService=serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppLocalService")
7 AssetEntryLocalService=serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")
8 AssetCategoryServiceUtil=serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")>
9 <#assign assetCategoryLocalService=serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") />
10 <#assign
11 articleId=.vars['reserved-article-id'].data
12 article=JournalArticleLocalService.getLatestArticle(groupId, articleId, WorkflowConstants.STATUS_APPROVED)
13 articleContent=article.getContentByLocale(locale)
14 docXml=saxReaderUtil.read(article.getContentByLocale(locale))
15 stringPattern="dd '" + languageUtil.get(locale, "of" ) + "' MMMM yyyy"
16 fechaModificacion=dateUtil.getDate(article.getDisplayDate(), stringPattern, locale)
17 categories=AssetCategoryServiceUtil.getCategories(article.getModelClassName(), article.getResourcePrimKey())
18 urlFacebook="https://www.facebook.com/sharer.php?u=" + facebookURL.getData() + ""e=" + facebookText.getData()?url
19 urlTwitter="http://twitter.com/intent/tweet?text=" + twitterText.getData()?url + "&url=" + twitterURL.getData()
20 urlWhatsapp="https://api.whatsapp.com/send/?text=" + whatsappText.getData() + " " + whatsappURL.getData()
21 categoriasADT=assetCategoryLocalService.getVocabularyCategories(14955352, -1, -1, null)>
22 <div class="ibd-blog-detail">
23 <div class="ibd-blog-detail__head" style="background-image: linear-gradient(90deg, #ffffff 0.74%, rgba(255, 255, 255, 0.1) 99.81%), url(${imgHead.getData()});">
24 <#-- <figure class="ibd-blog-detail__head-img-box">
25 <img class="ibd-blog-detail__head-img" src="${imgHead.getData()}">
26 </figure> -->
27 <div class="ibd-blog-detail__heading">
28 <#if categories?has_content>
29 <ul class="ibd-blog-detail__cat">
30 <#list categories as category>
31 <li class="ibd-blog-detail__cat-item">
32 ${category.getName()}
33 </li>
34 </#list>
35 </ul>
36 </#if>
37 <h1 class="ibd-blog-detail__title">
38 ${title.getData()}
39 </h1>
40 <div class="ibd-blog-detail__info">
41 <p class="ibd-blog-detail__date">
42 ${fechaModificacion}
43 </p>
44 <p class="ibd-blog-detail__time-read">
45 ${timeReading.getData()} min de lectura</p>
46 </div>
47 </div>
48 </div>
49 <#-- Experto -->
50 <#-- Verificar si existe el separador de experto -->
51 <#if separadorExperto?? && separadorExperto.getSiblings()?has_content>
52 <#-- Iterar sobre los elementos del separador -->
53 <#list separadorExperto.getSiblings() as experto>
54 <#if experto.paginaExperto?? && experto.paginaExperto.getData()?has_content>
55 <#if experto.imagenExperto.getData()?has_content>
56 <div class="autor-container">
57 <h2 class="autor-titulo">Autor</h2>
58 <#assign paginaExperto=experto.paginaExperto.getData() />
59 <div class="autor-card">
60 <div class="autor-header">
61 <#-- Imagen del experto -->
62 <#if experto.imagenExperto?? && experto.imagenExperto.getData()?has_content>
63 <div onclick="window.location.href='${paginaExperto}'" style="z-index: 50;" class="autor-imagen">
64 <img src="${experto.imagenExperto.getData()}"
65 class="imagen-circular" />
66 <#-- Nombre del experto -->
67 <div class="autor-datos">
68 <#if experto.imagenExperto.nombreExperto?? && experto.imagenExperto.nombreExperto.getData()?has_content>
69 <h3 class="autor-nombre">
70 ${experto.imagenExperto.nombreExperto.getData()}
71 </h3>
72 </#if>
73 <#-- Departamento -->
74 <#if experto.imagenExperto.departamentoExperto?? && experto.imagenExperto.departamentoExperto.getData()?has_content>
75 <p class="autor-departamento">
76 ${experto.imagenExperto.departamentoExperto.getData()}
77 </p>
78 </#if>
79 <#-- Linkedin -->
80 <a class="autor-linkedin" href="${experto.imagenExperto.linkedinExperto.getData()}">
81 <img src="/documents/20122/20838808/Linkedin.svg" alt="Perfil de LinkedIn" />
82 </a>
83 </div>
84 </div>
85 </#if>
86 <div class="autor-info">
87 <#-- Descripcion -->
88 <#if experto.descripcionExperto?? && experto.descripcionExperto.getData()?has_content>
89 <p class="autor-descripcion">
90 ${experto.descripcionExperto.getData()}
91 </p>
92 </#if>
93 </div>
94 </div>
95 <#-- Descripción del experto (si existe en tu estructura) -->
96 <#if experto.descripcion?? && experto.descripcion.getData()?has_content>
97 <div class="autor-descripcion">
98 <p>
99 ${experto.descripcion.getData()}
100 </p>
101 </div>
102 </#if>
103 <#-- Botón "Ver más" (si existe en tu estructura) -->
104 <#if experto.urlPerfil?? && experto.urlPerfil.getData()?has_content>
105 <div class="autor-acciones">
106 <a href="${experto.urlPerfil.getData()}" class="btn-ver-mas">
107 Ver más <i class="fas fa-chevron-down"></i>
108 </a>
109 </div>
110 </#if>
111 </div>
112 <div id="rrss-desktop" class="ibd-blog-detail__social-networks">
113 <h3>Comparte</h3>
114 <div class="ibd-blog-detail__social-networks-icons">
115 <a id="ibd-blog-detail__social-networks-facebook" href="${urlFacebook}" class="aImgFacebook">
116 <img class="imgRrss" src="/o/iberdrola-es-theme/images/blog/blog-facebook.svg" alt="">
117 </a>
118 <a id="ibd-blog-detail__social-networks-twitter" href="${urlTwitter}" class="aImgTwitter">
119 <img class="imgRrss" src="/o/iberdrola-es-theme/images/blog/blog-twitter.svg" alt="">
120 </a>
121 <a id="ibd-blog-detail__social-networks-whatsapp" href="${urlWhatsapp}" class="aImgWhatsapp">
122 <img class="imgRrss" src="/o/iberdrola-es-theme/images/blog/blog-whatsapp.svg" alt="">
123 </a>
124 <a id="ibd-blog-detail__social-networks-blog" href="#" onclick="copyToClipboard()" class="aImgTwitter" onfocusout="hideMessage()">
125 <img class="imgRrss" src="/o/iberdrola-es-theme/images/blog/blog-link.svg" alt="">
126 </a>
127 </div>
128 <span style="display:none" id="copyLink">¡Enlace copiado!</span>
129 </div>
130 </div>
131 <#else>
132 <#-- RRSS -->
133 <div class="ibd-blog-detail__social-networks" style="position: absolute; top: calc(480px + 32px); left: calc(100% + 22px);">
134 <h3>Comparte</h3>
135 <div class="ibd-blog-detail__social-networks-icons">
136 <a id="ibd-blog-detail__social-networks-facebook" href="${urlFacebook}" class="aImgFacebook">
137 <img class="imgRrss" src="/o/iberdrola-es-theme/images/blog/blog-facebook.svg" alt="">
138 </a>
139 <a id="ibd-blog-detail__social-networks-twitter" href="${urlTwitter}" class="aImgTwitter">
140 <img class="imgRrss" src="/o/iberdrola-es-theme/images/blog/blog-twitter.svg" alt="">
141 </a>
142 <a id="ibd-blog-detail__social-networks-whatsapp" href="${urlWhatsapp}" class="aImgWhatsapp">
143 <img class="imgRrss" src="/o/iberdrola-es-theme/images/blog/blog-whatsapp.svg" alt="">
144 </a>
145 <a id="ibd-blog-detail__social-networks-blog" href="#" onclick="copyToClipboard()" class="aImgTwitter" onfocusout="hideMessage()">
146 <img class="imgRrss" src="/o/iberdrola-es-theme/images/blog/blog-link.svg" alt="">
147 </a>
148 </div>
149 <span style="display:none" id="copyLink">¡Enlace copiado!</span>
150 </div>
151 <#-- FIN RRSS -->
152 </#if>
153 </#if>
154 </#list>
155 </#if>
156 </div>
157 <div class="ibd-blog-detail__body">
158 <div class="ibd-blog-detail__description">
159 ${description.getData()}
160 </div>
161 <div class="ibd-blog-detail__text">
162 ${contentBlog.getData()}
163 </div>
164 </div>
165 <div id="rrss-mobile" style="display:none" class="ibd-blog-detail__social-networks">
166 <h3>Comparte</h3>
167 <div class="ibd-blog-detail__social-networks-icons">
168 <a id="ibd-blog-detail__social-networks-facebook" href="${urlFacebook}" class="aImgFacebook">
169 <img class="imgRrss" src="/o/iberdrola-es-theme/images/blog/blog-facebook.svg" alt="">
170 </a>
171 <a id="ibd-blog-detail__social-networks-twitter" href="${urlTwitter}" class="aImgTwitter">
172 <img class="imgRrss" src="/o/iberdrola-es-theme/images/blog/blog-twitter.svg" alt="">
173 </a>
174 <a id="ibd-blog-detail__social-networks-whatsapp" href="${urlWhatsapp}" class="aImgWhatsapp">
175 <img class="imgRrss" src="/o/iberdrola-es-theme/images/blog/blog-whatsapp.svg" alt="">
176 </a>
177 <a id="ibd-blog-detail__social-networks-blog" href="#" onclick="copyToClipboard()" class="aImgTwitter" onfocusout="hideMessage()">
178 <img class="imgRrss" src="/o/iberdrola-es-theme/images/blog/blog-link.svg" alt="">
179 </a>
180 </div>
181 <span style="display:none" id="copyLink">¡Enlace copiado!</span>
182 <#-- TEMAS RELACIONADOS -->
183 </div>
184 <script>
185 function copyToClipboard() {
186 navigator.clipboard.writeText(window.location.href);
187 document.getElementById("copyLink").style.display = '';
188 }
189
190 function hideMessage() {
191 document.getElementById("copyLink").style.display = 'none';
192 } <
193 #if facebookURL.getData() ?? && facebookURL.getData() == "" >
194 $('#ibd-blog-detail__social-networks-facebook').attr('href', 'https://www.facebook.com/sharer.php?u=' + window.location.href); <
195 /#if> <
196 #if twitterURL.getData() ?? && twitterURL.getData() == "" >
197 $('#ibd-blog-detail__social-networks-twitter').attr('href', 'http://twitter.com/intent/tweet?url=' + window.location.href); <
198 /#if> <
199 #if whatsappURL.getData() ?? && whatsappURL.getData() == "" >
200 $('#ibd-blog-detail__social-networks-whatsapp').attr('href', 'https://api.whatsapp.com/send/?text=' + window.location.href); <
201 /#if>
202 </script>
203 <#-- <script type="text/javascript">
204 //$('.ibd-blog-detail__head').appendTo('.ibd-menu-mac');
205 $(".portlet-breadcrumb").before($('.ibd-blog-detail__head'));
206 $( document ).ready(function() {
207 window.scrollTo(0, 0);
208 });
209 </script> -->
210 <script>
211 function copyToClipboard() {
212 navigator.clipboard.writeText(window.location.href);
213 document.getElementById("copyLink").style.display = '';
214 }
215
216 function hideMessage() {
217 document.getElementById("copyLink").style.display = 'none';
218 }
219 // Ajustar margen cuando el DOM esté listo
220 document.addEventListener('DOMContentLoaded', function() {
221 // Verificar si existe el contenedor de expertos
222 if (document.querySelector('.autor-container') &&
223 document.querySelectorAll('.autor-card').length > 0) {
224 const relatedSection = document.getElementById('column-2');
225 if (window.innerWidth > 768) {
226 if (relatedSection) {
227 relatedSection.style.marginTop = '250px';
228 }
229 }
230 }
231 });
232 </script>
233 <#-- MOSTAR REDES SOCIALES DEBAJO DEL TEXTO -->
234 <script>
235 function copyToClipboard() {
236 navigator.clipboard.writeText(window.location.href);
237 document.getElementById("copyLink").style.display = '';
238 }
239
240 function hideMessage() {
241 document.getElementById("copyLink").style.display = 'none';
242 }
243 // Función para gestionar la visibilidad de RRSS según resolución
244 function gestionarRRSS() {
245 const rrssMobile = document.getElementById('rrss-mobile');
246 const rrssDesktop = document.getElementById('rrss-desktop');
247 if (window.innerWidth <= 1199) {
248 // Mostrar versión móvil
249 if (rrssMobile) {
250 rrssMobile.style.display = 'block';
251 }
252 // Ocultar versión desktop
253 if (rrssDesktop) {
254 rrssDesktop.style.display = 'none';
255 }
256 } else {
257 // Ocultar versión móvil
258 if (rrssMobile) {
259 rrssMobile.style.display = 'none';
260 }
261 // Mostrar versión desktop
262 if (rrssDesktop) {
263 rrssDesktop.style.display = 'block';
264 }
265 }
266 }
267 // Función para ajustar padding del body en móviles pequeños
268 function ajustarPaddingBody() {
269 const tieneExpertos = document.querySelector('.autor-container') &&
270 document.querySelectorAll('.autor-card').length > 0;
271 const blogDetailBody = document.querySelector('.ibd-blog-detail__body');
272 if (tieneExpertos && blogDetailBody) {
273 if (window.innerWidth < 768) {
274 blogDetailBody.style.paddingTop = '2.625rem';
275 } else {
276 blogDetailBody.style.paddingTop = '';
277 }
278 }
279 }
280 // Ajustar margen cuando el DOM esté listo
281 document.addEventListener('DOMContentLoaded', function() {
282 // Verificar si existe el contenedor de expertos
283 if (document.querySelector('.autor-container') &&
284 document.querySelectorAll('.autor-card').length > 0) {
285 const relatedSection = document.getElementById('column-2');
286 if (window.innerWidth > 768) {
287 if (relatedSection) {
288 relatedSection.style.marginTop = '250px';
289 }
290 }
291 }
292 // Ejecutar gestión de RRSS al cargar la página
293 gestionarRRSS();
294 // Ejecutar ajuste de padding del body
295 ajustarPaddingBody();
296 });
297 // Ejecutar también al redimensionar la ventana
298 window.addEventListener('resize', function() {
299 gestionarRRSS();
300 ajustarPaddingBody();
301 });
302 </script>
Temas relacionados
Otros artículos que te pueden interesar
-
2035, el año en que no se venderán más coches de combustión
Una treintena de países y seis fabricantes de automóviles se han comprometido a producir y vender solo automóviles eléctricos a partir de ese año.
Leer más05 de mayo 2026
3 min de lectura
-
-
¿Cómo serán las baterías de los próximos coches eléctricos?
Todos los fabricantes del mundo trabajan en diferentes vías para desarrollar la batería perfecta que sea ligera, eficiente, duradera y permita autonomías por encima de los 1.000 kilómetros.
Leer más05 de junio 2024
3 min de lectura