Se ha producido un error al procesar la plantilla.
Java method "com.sun.proxy.$Proxy656.getArticle(long, String)" threw an exception when invoked on com.sun.proxy.$Proxy656 object "com.liferay.journal.service.impl.JournalArticleLocalServiceImpl@48a0dc7d"; see cause exception in the Java stack trace. ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign article = journalarticleLocal... [in template "20099#20135#268811" at line 12, column 5] ----
1<#if recetarelacionada.getData()?? && recetarelacionada.getData()!= "">
2
3 <#assign
4 serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext()
5 themeDisplay = serviceContext.getThemeDisplay()
6 url_facebook = "https://www.facebook.com/sharer/sharer.php?u="
7 url_twitter = "https://twitter.com/intent/tweet?text="
8 url_whatsapp = "whatsapp://send?text="
9 current_url = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()
10 />
11 <#assign journalarticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")/>
12 <#assign article = journalarticleLocalService.getArticle(themeDisplay.getScopeGroupId() , recetarelacionada.getData())/>
13 <#assign id = article.id?number?long >
14
15 <#assign artic =journalarticleLocalService.getJournalArticle(id)/>
16
17 <#assign document = saxReaderUtil.read(article.getContent())>
18 <#assign tituloReceta = document.selectSingleNode("/root/dynamic-element[@name='titulo']/dynamic-content") >
19 <#assign fotoReceta = document.selectSingleNode("/root/dynamic-element[@name='fotodeportada']/dynamic-content") >
20 <#assign descripcionReceta = document.selectSingleNode("/root/dynamic-element[@name='introduccion']/dynamic-content") >
21
22 <#assign locale = themeDisplay.getLocale().getLanguage()>
23 <#if locale == 'ca'>
24 <#assign locale = 'va'>
25 </#if>
26 <#assign articFolder = artic.getFolder().getExpandoBridge().getAttributes() >
27 <#assign slugArtic = "slug_" + locale>
28 <#assign pathReceta = articFolder[slugArtic] + artic.getUrlTitle() >
29
30</#if>
31
32<style>
33
34 #visor-vinos .glyphicon {
35 color: black;
36 margin-right: 1rem;
37 font-size: 1.4rem;
38 }
39
40 #visor-vinos .wine-intro {
41 color: black;
42 font-size: 1.6rem;
43 font-weight: 700;
44 }
45
46 #visor-vinos .wine-cellar-name {
47 color: #0078BF;
48 transform: scaleX(0.9);
49 font-size: 1.6rem;
50 font-weight: 700;
51 transform-origin: left;
52 }
53
54 #visor-vinos h2 {
55 transform-origin: center !important;
56 }
57
58 #visor-vinos .recomended-recipe {
59 display: flex;
60 margin: 0 auto;
61 }
62
63 #visor-vinos .recomended-recipe img {
64 max-width: 20rem;
65 }
66
67 #visor-vinos .bg-blue {
68 background-color: #0078BF;
69 }
70
71 #visor-vinos .bg-red {
72 background-color: #CB4F40;
73 }
74
75 #visor-vinos .bg-gray {
76 background-color: #f0f0f0;
77 }
78
79 #visor-vinos .opaque-white {
80 color: rgba(255, 255, 255);
81 }
82
83 #visor-vinos .text-white {
84 color: #fff;
85 }
86
87 #visor-vinos .bodega {
88 display: flex;
89 flex-flow: row nowrap;
90 align-items: center;
91 justify-content: space-around;
92 }
93
94 #visor-vinos ul {
95 list-style-type: none;
96 margin: 0;
97 padding: 0;
98
99 }
100
101 #visor-vinos .data {
102 display: flex;
103 align-items: baseline;
104 justify-content: space-around;
105 }
106
107 #visor-vinos #organoleptic-form ul > li {
108 margin-bottom: 0.75rem
109 }
110
111 #visor-vinos #data-sheet ul > li {
112 margin-bottom: 0.75rem
113 }
114
115 #visor-vinos .bodega > ul > li {
116 font-size: 1.5rem;
117 padding: 0.75rem 2rem;
118 }
119
120 #visor-vinos .bodega > ul > li > a{
121 color: #000;
122 }
123
124 #visor-vinos .ensign {
125 display: flex;
126 justify-content: space-around;
127 margin: 1rem;
128 }
129
130 #visor-vinos .title-medium {
131 letter-spacing: 0.1rem;
132 margin-bottom: 0.5rem;
133 font-family: inherit;
134 }
135
136 @media (min-width: 600px) {
137 #visor-vinos .ensign {
138 display: flex;
139 justify-content: space-around;
140 margin: 5rem 30rem;
141 }
142 }
143
144 .wine-intro{
145 margin-bottom: 1rem;
146 }
147
148</style>
149
150<div id="visor-vinos">
151 <div class="static-header">
152 <div class="wrapped-content">
153 <div class="header-title">
154 <h1 class="f-anton title-h1">${titulo.getData()}</h1>
155 </div>
156
157 <div data-html2canvas-ignore class="social-section">
158 <div class="fb-like" data-href="https://www.facebook.com/comunitatvalenciana" data-width="100" data-layout="button" data-action="like" data-size="large" data-share="false"></div>
159 <div id="btn-share" class="btn share-space position-relative" href="#" role="button" tabindex="0">
160 <i class="cv-share-logo icon-sm-2x" aria-hidden="true"></i>
161 <span class="f-source-sans-pro text-uppercase bg-main text-gray button-text font-weight-bold"><@liferay.language key="portal.share.text" /></span>
162
163 <div id="panel-red-social" class="d-none mt-2 pt-2 pb-2 pl-5 pr-5 position-absolute bg-white" style="z-index: 1;top:100%;">
164 <a aria-label="link" class="btn btn-link" href="${url_facebook}${current_url}" role="button">
165 <i class="cv-facebook icon-sm-2x" aria-hidden="true"></i>
166 <span class="visually-hidden"><@liferay.language key="share.facebook.icon" /></span>
167 </a>
168 <a aria-label="link" class="btn btn-link" href="${url_twitter}${current_url}" role="button">
169 <i class="cv-twitter-logo icon-sm-2x" aria-hidden="true"></i>
170 <span class="visually-hidden"><@liferay.language key="share.twitter.icon" /></span>
171 </a>
172 <a aria-label="link" class="btn btn-link d-block d-lg-none" href="${url_whatsapp}${current_url}" role="button">
173 <i class="cv-whatsapp icon-sm-2x" aria-hidden="true"></i>
174 <span class="visually-hidden"><@liferay.language key="share.whatsapp.icon" /></span>
175 </a>
176 <a aria-label="link" class="btn btn-link d-none cv-email-icon" href="#" role="button">
177 <i class="cv-email-logo icon-sm-2x" aria-hidden="true"></i>
178 <span class="visually-hidden"><@liferay.language key="share.email.icon" /></span>
179 </a>
180 <a aria-label="link" class="btn cv-email-icon" href="mailto:name@email.com?subject=Comunitat Valenciana&body=${current_url}" role="button">
181 <i class="cv-email-logo icon-sm-2x" aria-hidden="true"></i>
182 <span class="visually-hidden"><@liferay.language key="share.email.icon" /></span>
183 </a>
184 </div>
185 </div>
186
187 <a class="btn" href="javascript:printCanvasPdf();" role="button" aria-label=link" >
188 <i class="cv-pdf-logo icon-sm-2x" aria-hidden="true"></i>
189 <span class="visually-hidden"><@liferay.language key="pdf.icon" /></span>
190 </a>
191 <a class="btn" href="javascript:printPage();" role="button" aria-label=link" >
192 <i class="cv-printer-logo icon-sm-2x" aria-hidden="true"></i>
193 <span class="visually-hidden"><@liferay.language key="printer.icon" /></span>
194 </a>
195 </div>
196 </div>
197 <#assign has_bg_image = fotodeportada.getData()?? && fotodeportada.getData() != "">
198 <div class='header-banner ${has_bg_image?then("has-bg", "")}' style = "background-image: url('${fotodeportada.getData()}')"></div>
199 </div>
200
201 <div class="wrapped-content">
202 <#if introduccion.getData()?? && introduccion.getData() != "">
203 <div class="wine-intro">
204 ${introduccion.getData()}
205 </div>
206 </#if>
207 <#if descripcion.getData()?? && descripcion.getData() != "">
208 <div id="wine-description" class="read-less">
209 ${descripcion.getData()}
210 </div>
211 </#if>
212
213 <!-- read more btn -->
214 <button onclick="readMore()" id="readMoreBtn"><@liferay.language key="read-more" /></button>
215
216 <div class = "ensign">
217 <#if imagen.getData()?? >
218 <img loading="lazy" src="${imagen.getData()}" alt="Unity"/>
219 </#if>
220 <#if Imagen80kg.getData()?? && Imagen80kg.getData() != "">
221 <img loading="lazy" src="${Imagen80kg.getData()}" alt="label"/>
222 </#if>
223 </div>
224 </div>
225 <div class="bg-gray pt-5 pb-5 container-fluid">
226 <div>
227 <h2 class="title-big"><@liferay.language key="portal.template.vino.theWinery" /></h2>
228 <div class="row justify-content-center">
229 <div class="col-12 col-md-6 col-lg-3">
230 <ul>
231 <#if NombreDeLaBodega.getData()?? && NombreDeLaBodega.getData() != "">
232 <li class="wine-cellar-name pb-3">${NombreDeLaBodega.getData()}</li>
233 </#if>
234 <#if direccionbodega.getData()?? && direccionbodega.getData() != "">
235 <li class="pb-2"><i class="glyphicon glyphicon-map-marker"></i>${direccionbodega.getData()}</li>
236 </#if>
237 <#if municipio.getSiblings()?has_content>
238 <#list municipio.getSiblings() as cur_municipio>
239 <li class="pb-2"><i class="glyphicon glyphicon-map-marker"></i>${cur_municipio.getData()}</li>
240 </#list>
241 </#if>
242 <#if telefono.getData()?? && telefono.getData() != "">
243 <li class="pb-2"><i class="glyphicon glyphicon-earphone"></i>${telefono.getData()}</li>
244 </#if>
245 <#if email.getData()?? && email.getData() != "">
246 <li class="pb-2"><i class="glyphicon cv-email-logo"></i><a href="${email.getData()}">${email.getData()}</a></li>
247 </#if>
248 <#if web.getData()?? && web.getData() != "">
249 <li><i class="glyphicon cv-web"></i><a href= "${web.getData()}">${web.tituloweb.getData()}</a></li>
250 </#if>
251 </ul>
252 </div>
253 <div class="col-12 col-md-3 col-lg-3">
254 <#if Imagengaou.getData()?? && Imagengaou.getData() != "">
255 <img loading="lazy" class="justify-content-center" src = "${Imagengaou.getData()}" alt="logo"/>
256 </#if>
257 </div>
258 </div>
259 </div>
260 </div>
261
262 <div class="wrapped-content">
263 <div class="data row mt-5">
264 <div id="data-sheet" class="col-12 col-md-4 bg-blue text-white p-5">
265 <h2 class="title-big opaque-white"><@liferay.language key="portal.template.vino.dataSheet" /></h2>
266 <#if denominacionorigen.getData()?? && denominacionorigen.getData() != "">
267 <ul>
268 <li><b><@liferay.language key="portal.template.vino.appellationOfOrigin" />:</b> ${denominacionorigen.getData()}</li>
269 </#if>
270 <#if tipovino.getData()?? && tipovino.getData() != "">
271 <li><b><@liferay.language key="portal.template.vino.typeOfWine" />:</b> ${tipovino.getData()}</li>
272 </#if>
273 <#if variedad.getData()?? && variedad.getData() != "">
274 <li><b><@liferay.language key="portal.template.vino.Variety" />:</b> ${variedad.getData()}</li>
275 </#if>
276 <#if graduacion.getData()?? && graduacion.getData() != "">
277 <li><b><@liferay.language key="portal.template.vino.graduation" />:</b> ${graduacion.getData()}</li>
278 </ul>
279 </#if>
280 </div>
281 <div id="organoleptic-form" class ="col-12 col-md-7 bg-red text-white p-5">
282 <h2 class = "title-big opaque-white"><@liferay.language key="portal.template.vino.organolepticForm" /></h2>
283 <#if aspecto.getData()?? && aspecto.getData() != "">
284 <ul>
285 <li><b><@liferay.language key="portal.template.vino.appearance" />:</b> ${aspecto.getData()}</li>
286 </#if>
287 <#if Color.getData()?? && Color.getData() != "">
288 <li><b><@liferay.language key="portal.template.vino.color" />:</b> ${Color.getData()}</li>
289 </#if>
290 <#if nariz.getData()?? && nariz.getData() != "">
291 <li><b><@liferay.language key="portal.template.nose" />:</b> ${nariz.getData()}</li>
292 </#if>
293 <#if boca.getData()?? && boca.getData() != "">
294 <li><b><@liferay.language key="portal.template.vino.mouth" />:</b> ${boca.getData()}</li>
295 </#if>
296 <#if postgusto.getData()?? && postgusto.getData() != "">
297 <li><b><@liferay.language key="portal.template.vino.aftertaste" />:</b> ${postgusto.getData()}</li>
298 </#if>
299 <#if temperatura.getData()?? && temperatura.getData() != "">
300 <li><b><@liferay.language key="portal.template.vino.temperature" />:</b> ${temperatura.getData()}</li>
301 </#if>
302 <#if maridaje.getData()?? && maridaje.getData() != "">
303 <li><b><@liferay.language key="portal.template.vino.pairing" />:</b> ${maridaje.getData()}</li>
304 <ul>
305 </#if>
306 </div>
307 </div>
308 <div class="pt-5 pb-5">
309 <#if document??>
310 <h2 class = "title-big"><@liferay.language key="portal.template.vino.recommendedRecipes" /></h2>
311 <span class="d-none">.</span>
312 <div class="recomended-recipe row justify-content-center">
313 <div class="col col-lg-3">
314 <img loading="lazy" class="image-result" src="${fotoReceta.getText()}" alt="<@liferay.language key="portal.template.vino.recommendedRecipes" />"/>
315 </div>
316 <div class="col col-lg-3">
317 <div class="title-medium"><a href="${pathReceta}">${tituloReceta.getText()}</a></div>
318 <p class="subtitle-result">${descripcionReceta.getText()}</p>
319 </div>
320 </div>
321 <#else>
322 <h2 class="recomendada"><@liferay.language key="portal.template.vino.thereAreNoRecommendedRecipes" /></h2>
323 </#if>
324 </div>
325 </div>
326</div>
327<script type="text/javascript">
328 (function(window) {
329 "use strict";
330 $("#visor-vinos #btn-share").click(
331 function(){
332 let panelRedSocial=$("#visor-vinos #panel-red-social");
333 if(panelRedSocial.hasClass("d-none")){
334 panelRedSocial.removeClass("d-none");
335 }else{
336 panelRedSocial.addClass("d-none");
337 }
338 });
339 $("#btn-share").on("focus", function(){
340 $("#panel-red-social").removeClass("d-none");
341 });
342
343 $(".cv-email-icon").on("focusout", function(){
344 $("#panel-red-social").addClass("d-none");
345 });
346 })(window);
347
348 /* read more btn */
349
350 function readMore() {
351 var moreText = document.getElementById("wine-description");
352 var btnText = document.getElementById("readMoreBtn");
353
354 if (moreText.classList.contains('read-less')) {
355 btnText.innerHTML = '<@liferay.language key="read-less" />';
356 moreText.classList.remove("read-less");
357 } else {
358 btnText.innerHTML = '<@liferay.language key="read-more" />';
359 moreText.classList.add("read-less");
360 }
361 }
362</script>