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() + "&quote=" + 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