1.
.
Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing:
==> cur_contenido.textoContenido.getData()?matches("(?i)Recuadro\\s\\d+(\\.\\d+)?")[0] [in template "33501#33537#8342711" at line 18, column 65]
----
Tip: It's the final [] step 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: ${cur_contenido.textoContenido.getDat... [in template "33501#33537#8342711" at line 18, column 63]
----
1<#assign tituloContenido = .vars["reserved-article-title"].data>
2<#assign idTitulo = friendlyURL?keep_after_last("/")?lower_case>
3
4<#if contenido.getSiblings()?has_content>
5 <article class="bc-vdcn-c-article col-12 col-md border-md px-0">
6 <h3 class="bc-vdcn-o-article-titulo" id="${idTitulo}">
7 ${tituloContenido}
8 </h3>
9 <br>
10
11 <!-- LOOP CONTENIDO -->
12 <#list contenido.getSiblings() as cur_contenido>
13 <#if !getterUtil.getBoolean(cur_contenido.ocultarContenido.getData())>
14 <#assign divDescargable = getterUtil.getBoolean(cur_contenido.contenidoDescargable.getData())?then('div-descargable', '')>
15
16 <!-- ELEMENTOS SI ES DESCARGABLE -->
17 <#if getterUtil.getBoolean(cur_contenido.contenidoDescargable.getData())>
18 <div class="div-descargable bg-light p-5" id="${cur_contenido.textoContenido.getData()?matches("(?i)Recuadro\\s\\d+(\\.\\d+)?")[0]?replace(" ", "-")}">
19 </#if>
20 <!-- FIN ELEMENTOS SI ES DESCARGABLE -->
21
22 <!-- IMAGEN -->
23 <#assign mostrarModal = false>
24 <#if (cur_contenido.grupoImagenContenido.descripcionImagen.getData())?? && cur_contenido.grupoImagenContenido.descripcionImagen.getData() != "">
25 <#assign mostrarModal = true>
26 </#if>
27
28 <#if (cur_contenido.grupoImagenContenido.ImagenContenido.getData())?? && cur_contenido.grupoImagenContenido.ImagenContenido.getData() != "">
29 <#if mostrarModal>
30 <#assign descripcionImagenPersonalizada = cur_contenido.grupoImagenContenido.descripcionImagen.getData()/>
31 <#assign descripcionData = 'data-descripcion-imagen="' + descripcionImagenPersonalizada + '"'/>
32 </#if>
33 <div class="bc-vdcn-o-contenido-imagen">
34 <#if mostrarModal>
35 <#assign idImagen = cur_contenido.grupoImagenContenido.ImagenContenido.getAttribute("fileEntryId")>
36 <#assign idTarget = idImagen + "-modal">
37 </#if>
38 <img alt="${cur_contenido.grupoImagenContenido.ImagenContenido.getAttribute("alt")}"
39 class="img-fluid w-100"
40 <#if mostrarModal>
41 data-toggle="modal"
42 data-imgtarget="#${cur_contenido.grupoImagenContenido.ImagenContenido.getAttribute("fileEntryId")}"
43 </#if>
44 data-fileentryid="${cur_contenido.grupoImagenContenido.ImagenContenido.getAttribute("fileEntryId")}"
45 src="${cur_contenido.grupoImagenContenido.ImagenContenido.getData()}" />
46 </div>
47 <#if mostrarModal>
48 <div class="custom-modal hiden" id="${idTarget}">
49 <div class="modal-dialog modal-dialog-centered">
50 <div class="modal-content">
51 <div class="modal-header d-flex justify-content-end">
52 <button type="button" class="close" data-dismiss="modal" aria-label="Close">
53 <span aria-hidden="true">×</span>
54 </button>
55 </div>
56 <div class="modal-body">
57 <p>
58 ${descripcionImagenPersonalizada}
59 </p>
60 </div>
61 <div class="modal-footer d-flex justify-content-end">
62 <button type="button" class="btn btn-info" data-dismiss="modal">Cerrar</button>
63 </div>
64 </div>
65 </div>
66 </div>
67 </#if>
68 </#if>
69
70 <!-- FIN IMAGEN -->
71
72 <!-- TEXTO ENRIQUECIDO -->
73 <#if (cur_contenido.textoContenido.getData())??>
74 <div class="bc-vdcn-c-article-contenido">
75 ${cur_contenido.textoContenido.getData()}
76 </div>
77 </#if>
78 <!-- FIN TEXTO ENRIQUECIDO -->
79
80 <!-- GRÁFICOS -->
81 <#if (cur_contenido.graficos.tituloDelGrafico.getData())??>
82 <div class="bc-vdcn-c-article-contenido bc-vdcn-c-article-contenido__iframe-titulo">
83 <h5>
84 ${cur_contenido.graficos.tituloDelGrafico.getData()}
85 </h5>
86 <#if (cur_contenido.graficos.enlaceGrafico.getData())??>
87 <div class="bc-vdcn-c-article-contenido bc-vdcn-c-article-contenido__iframe">
88 ${cur_contenido.graficos.enlaceGrafico.getData()}
89 </div>
90 </#if>
91 </div>
92 </#if>
93 <!-- FIN GRÁFICOS -->
94
95 <!-- SUBINDICES -->
96 <#assign webContentData = jsonFactoryUtil.createJSONObject(cur_contenido.subIndices.getData())/>
97 <#if webContentData?? && webContentData.title??>
98 <#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")>
99 <#assign journalEmbed = JournalArticleLocalService.getLatestArticle(webContentData.classPK?number) />
100 <div class="bc-vdcn-c-article-contenido bc-vdcn-c-article-contenido__embed">
101 <@liferay_journal["journal-article"] articleId=journalEmbed.getArticleId() groupId=journalEmbed.getGroupId()/>
102 </div>
103 </#if>
104 <!-- FIN SUBINDICES -->
105
106 <!-- ELEMENTOS SI ES DESCARGABLE -->
107 <#if getterUtil.getBoolean(cur_contenido.contenidoDescargable.getData())>
108 <#if cur_contenido.archivosDescargables.getSiblings()?has_content>
109 </div>
110 <div class="d-flex bg-light p-5 pt-0">
111
112
113<#list cur_contenido.archivosDescargables.getSiblings() as cur_archivosDescargables>
114 <#if cur_archivosDescargables.archivoDescargable?has_content>
115 <#list cur_archivosDescargables.archivoDescargable.getSiblings() as cur_archivoDescargable>
116 <#if (cur_archivoDescargable.getData())?? && cur_archivoDescargable.getData() != "">
117 <#assign archivoUrl = cur_archivoDescargable.getData()>
118 <#assign archivoNombreConQuery = archivoUrl?substring(archivoUrl?last_index_of("/") + 1)>
119 <a class="btn btn-info ml-auto mr-0" href="${archivoUrl}" download="${cur_contenido.archivosDescargables.tituloArchivo.getData()}">
120 <i class="la la-download"></i> <span class="extension-archivo">PDF</span>
121 </a>
122 </#if>
123 </#list>
124 </#if>
125 </#list>
126
127 </div>
128
129
130
131
132
133
134 <#else>
135 <div class="bc-vdcn-c-contenido-btn-descargar d-flex bg-light p-5 pt-0">
136 <div class="descargar-seccion btn btn-info ml-auto mr-0">
137 <i class="la la-download"></i> <span class="extension-archivo">PDF</span>
138 </div>
139
140 </#if>
141 </#if>
142 <!-- FIN ELEMENTOS SI ES DESCARGABLE -->
143
144 <!-- ARCHIVOS DESCARGABLES -->
145
146
147
148
149
150 <#if cur_contenido.archivosDescargables.getSiblings()?has_content>
151 <div class="bc-vdcn-c-descargables d-flex flex-wrap align-items-center">
152 <#if (cur_contenido.archivosDescargables.tituloArchivo.getData())??>
153 <h6 class="titulo-descargable col m-0 p-0">
154 ${cur_contenido.archivosDescargables.tituloArchivo.getData()}
155 </h6>
156 </#if>
157
158
159
160
161 <#if getterUtil.getBoolean(cur_contenido.contenidoDescargable.getData())>
162
163 <#else>
164 <div class="botones-descargar col col-md-6 d-flex flex-wrap justify-content-end">
165 <#list cur_contenido.archivosDescargables.getSiblings() as cur_archivosDescargables>
166 <#if cur_archivosDescargables.archivoDescargable?has_content>
167 <#list cur_archivosDescargables.archivoDescargable.getSiblings() as cur_archivoDescargable>
168 <#if (cur_archivoDescargable.getData())?? && cur_archivoDescargable.getData() != "">
169 <#assign archivoUrl = cur_archivoDescargable.getData()>
170 <#assign archivoNombreConQuery = archivoUrl?substring(archivoUrl?last_index_of("/") + 1)>
171 <a class="link-archivo-descargable btn btn-info" href="${archivoUrl}" download="${cur_contenido.archivosDescargables.tituloArchivo.getData()}">
172 <i class="la la-download"></i> <span class="extension-archivo">Cargando...</span>
173 </a>
174 </#if>
175 </#list>
176 </#if>
177 </#list>
178 </div>
179 </#if>
180
181
182
183 </div>
184 </#if>
185 <!-- FIN ARCHIVOS DESCARGABLES -->
186 </#if>
187 </#list>
188 <!-- FIN LOOP CONTENIDO -->
189
190 <!-- NOTAS AL PIE -->
191 <#if getterUtil.getBoolean(notasAlPie.mostrarNotasAlPie.getData())>
192 <#if (notasAlPie.contenidoNotasAlPie.getData())??>
193
194 <div class="bc-vdcn-c-notas-al-pie d-flex flex-column bg-gray border-0">
195 <div class="p-2">
196 <button class="btn bc-o-boton-toggler w-100 bc-c-notas-al-pie-titulo d-flex flex-row justify-content-between align-items-center bc-j-btn-toggle p-2"
197 data-toggler="notas-al-pie">
198 <p class="m-0">Notas al pie</p>
199 <i class="la la-angle-down"></i>
200 </button>
201 <div class="bc-vdcn-c-notas-al-pie-contenido pt-2 pb-4 px-4"
202 data-toggle="notas-al-pie"
203 style="display: none;">
204 <div class="d-flex flex-column">
205 ${notasAlPie.contenidoNotasAlPie.getData()}
206 </div>
207 </div>
208 </div>
209 </div>
210 <!-- FIND NOTAS AL PIE -->
211
212 </#if>
213 </#if>
214 </article>
215</#if>
216
217<style>
218.bc-vdcn-c-descargables{
219 background: none !important;
220}
221
222.bc-vdcn-c-article-contenido ul,
223.bc-vdcn-c-article-contenido ol,
224.bc-vdcn-c-article-contenido li,
225.bc-vdcn-c-article-contenido li p,
226.bc-vdcn-c-article-contenido li strong,
227.bc-vdcn-c-article-contenido li b {
228 color: #51545d;
229}
230
231/* Textos Justificados*/
232.bc-vdcn-c-article-contenido p,
233.bc-vdcn-c-article-contenido li {
234 text-align: justify;
235}
236
237/* Lista específica con guiones */
238.lista-guiones,
239.lista-guiones ul {
240 list-style-type: none !important;
241}
242
243.lista-guiones li {
244 position: relative;
245}
246
247.lista-guiones li::before {
248 content: "-";
249 position: absolute;
250 left: -1em;
251 color: #51545d;
252}
253
254/* Sangria a contenidos */
255.bc-vdcn-c-article-contenido .contenido-nivel-2 {
256 margin-left: 1rem;
257}
258
259.bc-vdcn-c-article-contenido .contenido-nivel-3 {
260 margin-left: 1rem;
261}
262
263/* ol personalizado (i) */
264.lista-romana-parentesis {
265 list-style: none !important;
266 counter-reset: romano;
267 padding-left: 1.5rem;
268}
269
270.lista-romana-parentesis > li {
271 counter-increment: romano;
272 position: relative;
273 padding-left: 2rem;
274}
275
276.lista-romana-parentesis > li::before {
277 content: "(" counter(romano, lower-roman) ")";
278 position: absolute;
279 left: 0;
280 width: 1.5rem;
281 text-align: left;
282 color: #51545d;
283}
284
285.lista-letras-parentesis {
286 list-style: none !important;
287 counter-reset: letra;
288 padding-left: 1.5rem;
289}
290
291.lista-letras-parentesis > li {
292 counter-increment: letra;
293 position: relative;
294 padding-left: 2rem;
295}
296
297.lista-letras-parentesis > li::before {
298 content: counter(letra, lower-alpha) ")";
299 position: absolute;
300 left: 0;
301 width: 1.5rem;
302 text-align: left;
303 color: #51545d;
304}
305
306.notas-referencias {
307 font-size: 0.8rem;
308 line-height: 1.35;
309}
310
311.bc-vdcn-c-article-contenido .notas-referencias p {
312 font-size: inherit;
313 line-height: inherit;
314 margin: 0 !important;
315 padding: 0 !important;
316 text-align: left !important;
317}
318
319.notas-referencias sup {
320 font-size: 0.75em;
321 vertical-align: baseline;
322 position: relative;
323 top: -0.35em;
324 margin-right: 0.25rem;
325}
326
327.imagen-ancho-contenido {
328 display: block;
329 width: 100% !important;
330 max-width: 100% !important;
331 height: auto !important;
332}
333</style>