Design and printing
Explore this selection of printers and design studios specialising in a wide range of materials and services, from information brochures and programmes to customised signage. Ensure a professional and polished image in every visual detail, strengthening your event's identity and enhancing the attendee experience with printed materials that combine creativity and functionality.
Back ASTURCOPIA
An error occurred while processing the template.
Java method "as.asac.template.tools.DLToolImpl.getThumbnailByJSON(String, String)" threw an exception when invoked on as.asac.template.tools.DLToolImpl object "as.asac.template.tools.DLToolImpl@4f12c5de"; see cause exception in the Java stack trace.
----
FTL stack trace ("~" means nesting-related):
- Failed at: #assign slideThumbnail1 = dlTool.getT... [in template "37703#37743#9000456" at line 61, column 73]
----
1<#-- Services -->
2<#assign assetEntryLocalServiceUtil = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")/>
3<#assign assetLinkLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService")/>
4<#assign journalArticleResourceServiceUtil = serviceLocator.findService("com.liferay.journal.service.JournalArticleResourceLocalService")/>
5<#assign assetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") />
6<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")>
7<#assign ddmStructureLocalService = serviceLocator.findService("com.liferay.dynamic.data.mapping.service.DDMStructureLocalService")/>
8
9<#-- Reserved vbles -->
10<#assign title = .vars['reserved-article-title'].data>
11<#assign articleId=.vars["reserved-article-id"].data />
12<#assign description=.vars["reserved-article-description"].data />
13<#assign smallImageUrl=.vars["reserved-article-small-image-url"].data />
14<#assign date=.vars["reserved-article-display-date"].data />
15<#assign request = .vars['request']>
16
17<#-- Init -->
18
19<#assign assetEntry = journalTool.getAssetEntryByArticleId(groupId, articleId)>
20<#assign journalArticle = journalTool.getJournalArticleByAssetEntry(assetEntry)>
21<#assign ddmStructureNameNormalize = "template-${friendlyURLNormalizerTool.normalize(journalArticle.getDDMStructure().getName(localeUtil.getDefault()))}" />
22<#assign articleURL = themeDisplay.getURLPortal()+themeDisplay.getURLCurrent()>
23<#assign articleMainImageThumbnail3 = dlTool.getThumbnail(smallImageUrl, "3", layoutSetBannerPath)! />
24<#assign articleMainImageThumbnail1 = dlTool.getThumbnail(smallImageUrl, "1")! />
25
26
27<#-- Categories -->
28<#assign concejo = journalTool.getCategories(groupId, articleId, ["MICE :: Concejo"])/>
29
30
31<article class="template template-mice template-${ddmStructureNameNormalize} template-mice-article" role="article" >
32
33 <div class="container">
34 <div class="row no-gutters">
35 <div class="col-12">
36
37 <h2 class="article-title" itemprop="name">${title}</h2>
38
39
40 <#if validator.isNotNull(Descripcion.getData())>
41 <div class="article-description mt-2 mb-4">
42 ${Descripcion.getData()}
43 </div>
44 </#if>
45
46 <#assign slideImagesCount = 0 />
47 <#assign slideImagesSize = Visualizador.Imagen.getSiblings()?size />
48 <#if Visualizador.Imagen.getSiblings()?has_content || validator.isNotNull(smallImageUrl)>
49 <div id="article-carousel" class="carousel slide carousel-fade carousel-article" data-ride="carousel" data-interval="5000">
50 <span aria-hidden="true" class="loading-animation loading-bg"></span>
51 <div class="carousel-inner">
52 <#if validator.isNotNull(smallImageUrl)>
53 <div class="carousel-item active aspect-ratio-bg-cover" style="background-image: url(${articleMainImageThumbnail3});">
54 <img class="hide" src="${articleMainImageThumbnail1}" alt="${title}" title="${title}"/>
55 </div>
56 <#assign slideImagesCount = slideImagesCount + 1 />
57 </#if>
58 <#list Visualizador.Imagen.getSiblings() as Slide>
59 <#if Slide?? && validator.isNotNull(Slide) && Slide.data?? && validator.isNotNull(Slide.data)>
60
61 <#assign slideThumbnail1 = dlTool.getThumbnailByJSON(Slide.data, "1")! />
62 <#assign slideThumbnail3 = dlTool.getThumbnailByJSON(Slide.data, "3")! />
63 <#assign slideTitle = "${languageUtil.get(request, 'image')} ${title}" />
64 <#assign slideAlt = slideTitle />
65 <#if Slide.TituloImagen?? && Slide.TituloImagen.data?has_content>
66 <#assign slideTitle = Slide.TituloImagen.data />
67 <#assign slideAlt = slideTitle />
68 </#if>
69 <#if Slide.AltImagen?? && validator.isNotNull(Slide.AltImagen.getData())>
70 <#assign slideAlt = Slide.AltImagen.getData() />
71 </#if>
72 <#else>
73 <#continue>
74 </#if>
75 <div class="carousel-item aspect-ratio-bg-cover" style="background-image: url(${slideThumbnail3});">
76 <img class="hide" src="${slideThumbnail1}" alt="${slideAlt}" title="${slideTitle}"/>
77 </div>
78 <#assign slideImagesCount = slideImagesCount + 1 />
79 </#list>
80 </div>
81 <#if Visualizador.Imagen.getSiblings()?size gt 1>
82 <a class="carousel-control-prev" href="#article-carousel" data-slide="prev">
83 <span class="carousel-control-prev-icon" aria-hidden="true"><!-- ${languageUtil.get(request, "previous")} --></span>
84 <span class="hide-accessible">${languageUtil.get(request, "previous")}</span>
85 </a>
86 <a class="carousel-control-next" href="#article-carousel" data-slide="next">
87 <span class="carousel-control-next-icon" aria-hidden="true"><!-- ${languageUtil.get(request, "next")}--></span>
88 <span class="hide-accessible">${languageUtil.get(request, "next")}</span>
89 </a>
90 <ol class="carousel-indicators ">
91 <#assign index = 0 />
92 <#list 1..slideImagesCount as item>
93 <li data-target="#article-carousel" data-slide-to="${index}" <#if index==0> class="active"</#if>></li>
94 <#assign index = index + 1 />
95 </#list>
96 </ol>
97 </#if>
98 </div>
99 </#if>
100 </div>
101 </div>
102 <#if validator.isNotNull(Geolocalizacion.Coordenadas.getData())>
103 <div class="article-map-switch mt-2 mb4">
104 <label class="toggle-switch">
105 <input class="toggle-switch-check mapShow" type="checkbox" onclick="showArticleMap(${articleId})"/>
106 <span aria-hidden="true" class="toggle-switch-bar">
107 <span class="toggle-switch-handle"></span>
108 </span>
109 </label>
110 <span class="label-map text-lowercase">${languageUtil.get(request, "infoasturias-mice-mostrar-ubicacion")}</span>
111 </div>
112 <#assign coordenadas=stringUtil.split(Geolocalizacion.Coordenadas.data) />
113 <div id="article-map-wrapper-${articleId}" class="article-section-map article-map-wrapper my-4 hide-visibility">
114 <div id="article-map-content-${articleId}" style="width: 100%; height: 388px; z-index:1"><!-- MAP --></div>
115 <div class="article-map-form">
116 <div class="name important">${title}</div>
117 <div class="gps"><span class="label">GPS:</span> <span class="value important" itemprop="geo">${Geolocalizacion.Coordenadas.data}</span></div>
118 <form action="https://maps.google.es/maps" method="get" target="_blank">
119 <input type="hidden" name="daddr" value="${coordenadas[0]},${coordenadas[1]}">
120 <label for="saddrText"><span class="label hide-accessible">${languageUtil.get(request,'infoasturias-insert-from')}: </span></label>
121 <label for="saddr"><span class="label">${languageUtil.get(request,'infoasturias-from')}: </span></label>
122 <input class="form-control" type="text" maxlength="40" name="saddrText" id="saddrText" value="" placeholder="${languageUtil.get(request,'infoasturias-insert-from')}">
123 <input class="form-control" type="hidden" name="saddr" id="saddr" value="" placeholder="${languageUtil.get(request,'infoasturias-insert-from')}">
124 <button class="btn btn-text" type="submit">${languageUtil.get(request,'infoasturias-como-llegar')} »</button>
125 </form>
126 </div>
127 <div class="article-section-scripts">
128 <script src="/o/turismo-asturias-theme/js/leaflet/leaflet.js"></script>
129 <script type="text/javascript">
130 AUI().ready('aui-base', function(A){
131 var lat = ${coordenadas[0]},
132 lng = ${coordenadas[1]},
133 zoom = 16;
134 mapContent = new L.map('article-map-content-${articleId}', {center: [lat, lng], zoom: 16});
135
136 //Marker
137 var defaultIconTheme = '/o/turismo-asturias-theme/css/images/icons/mark-box.png';
138 var defaultIcon = L.icon({
139 iconUrl: defaultIconTheme,
140 iconSize: [36, 53],
141 iconAnchor: [18, 53],
142 iconShadow: [0,0],
143 popupAnchor: [0, -30]
144 });
145 var marker = L.marker([lat, lng], {icon: defaultIcon}).addTo(mapContent);
146
147 //Contributor
148 L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
149 attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors.'
150 }).addTo(mapContent);
151
152 }); //AUI.ready
153
154 function showArticleMap(articleId){
155 if($("#article-map-wrapper-"+articleId).hasClass("hide-visibility")){
156 $(".toggle-switch-check").attr( 'checked', '' );
157 $(".label-map").text("${languageUtil.get(request, 'infoasturias-mice-ocultar-ubicacion')}");
158 $("#article-map-wrapper-"+articleId).removeClass("hide-visibility");
159 }else{
160 $(".toggle-switch-check").removeAttr( 'checked');
161 $(".label-map").text("${languageUtil.get(request, 'infoasturias-mice-mostrar-ubicacion')}");
162 $("#article-map-wrapper-"+articleId).addClass("hide-visibility");
163 }
164 }
165 </script>
166 </div>
167 </div>
168 </#if>
169 <#if concejo?size gt 0 || validator.isNotNull(Direccion.getData()) || validator.isNotNull(CP.getData()) || validator.isNotNull(Poblacion.getData()) || validator.isNotNull(Telefono.getData()) || validator.isNotNull(Email.getData()) || validator.isNotNull(Web.getData()) || validator.isNotNull(PersonaDeContacto.getData()) || validator.isNotNull(Cargo.getData()) || validator.isNotNull(RedesSociales.Facebook.getData()) || validator.isNotNull(RedesSociales.Twitter.getData()) || validator.isNotNull(RedesSociales.Instagram.getData()) || validator.isNotNull(RedesSociales.Linkedin.getData()) || validator.isNotNull(RedesSociales.TikTok.getData()) || validator.isNotNull(RedesSociales.Youtube.getData()) || validator.isNotNull(RedesSociales.Pinterest.getData())>
170 <div class="article-info-table mb-4">
171 <div class="article-info-table-row">
172 <#if validator.isNotNull(Direccion.getData()) || validator.isNotNull(CP.getData()) || validator.isNotNull(Poblacion.getData()) || validator.isNotNull(Telefono.getData()) || validator.isNotNull(Email.getData()) || validator.isNotNull(Web.getData()) || validator.isNotNull(PersonaDeContacto.getData()) || validator.isNotNull(Cargo.getData())>
173 <div class="article-info-table-cell col-lg-7 col-12">
174 <ul class="article-list list-unstyled article-list-info">
175 <#if validator.isNotNull(Direccion.getData())>
176 <li class="article-list-item">
177 <span class="far fa-address-card">
178 <span class="hide-accessible">${languageUtil.get(request,"address")}</span>
179 </span>
180 <span class="field-wrapper">
181 <span class="field">${languageUtil.get(request, "address")}:</span>
182 <span class="text">${Direccion.getData()}</span>
183 <#if validator.isNotNull(CP.getData()) && validator.isNotNull(Poblacion.getData())>
184 <span class="text"> ■ ${CP.getData()} - ${Poblacion.getData()}</span>
185 </#if>
186 </span>
187 </li>
188 </#if>
189 <#if Telefono.getSiblings()?has_content>
190 <li class="article-list-item">
191 <span class="fas fa-phone-alt">
192 <span class="hide-accessible">${languageUtil.get(request,"phone")}</span>
193 </span>
194 <span class="field-wrapper">
195 <span class="field">${languageUtil.get(request, "phone")}:</span>
196 <#list Telefono.getSiblings() as telephone>
197 <#assign numberTelefono = telephone.data?replace(" ", "")/>
198 <#assign numberLength = numberTelefono?length/>
199 <#if numberLength == 9>
200 <#assign number = "+34${numberTelefono}"/>
201 <#else>
202 <#assign number = numberTelefono/>
203 </#if>
204 <span class="text">
205 <a href="tel:${number}" itemprop="telephone">${telephone.data}</a>
206 <#if !telephone?is_last>|</#if>
207 </span>
208 </#list>
209 </span>
210 </li>
211 </#if>
212 <#if validator.isNotNull(Email.getData())>
213 <li class="article-list-item">
214 <span class="far fa-envelope">
215 <span class="hide-accessible">${languageUtil.get(request,"email")}</span>
216 </span>
217 <span class="field-wrapper">
218 <span class="field">${languageUtil.get(request, "email")}:</span>
219
220 <span class="text">
221 <a class="" href="mailto:${Email.getData()}" title="${languageUtil.format(request,'send-email-to-x', 'Email.getData()')}" itemprop="email">${Email.getData()}</a>
222 </span>
223
224 </span>
225 </li>
226 </#if>
227 <#if validator.isNotNull(Web.getData())>
228 <li class="article-list-item web">
229 <span class="fas fa-link">
230 <span class="hide-accessible">${languageUtil.get(request,"site")}</span>
231 </span>
232 <span class="field-wrapper">
233 <span class="field">${languageUtil.get(request, "site")}:</span>
234 <span class="text">
235 <#assign linkURL = Web.getData()/>
236 <#if !stringUtil.startsWith(linkURL, "http")>
237 <#assign linkURL = "https://${Web.getData()}"/>
238 </#if>
239 <a href="${linkURL}" title="${languageUtil.format(request,'go-to-x', 'site')}" itemprop="url">${Web.getData()}</a>
240 </span>
241 </span>
242 </li>
243 </#if>
244 </ul>
245 </div>
246 </#if>
247
248 <#if validator.isNotNull(Servicios.getData()) || validator.isNotNull(RedesSociales.Facebook.getData()) || validator.isNotNull(RedesSociales.Twitter.getData()) || validator.isNotNull(RedesSociales.Instagram.getData()) || validator.isNotNull(RedesSociales.Linkedin.getData()) || validator.isNotNull(RedesSociales.TikTok.getData()) || validator.isNotNull(RedesSociales.Youtube.getData()) || validator.isNotNull(RedesSociales.Pinterest.getData())>
249 <div class="article-info-table-cell col-lg-5 col-12">
250 <#if validator.isNotNull(Servicios.getData()) || validator.isNotNull(RedesSociales.Facebook.getData()) || validator.isNotNull(RedesSociales.Twitter.getData()) || validator.isNotNull(RedesSociales.Instagram.getData()) || validator.isNotNull(RedesSociales.Linkedin.getData()) || validator.isNotNull(RedesSociales.TikTok.getData()) || validator.isNotNull(RedesSociales.Youtube.getData()) || validator.isNotNull(RedesSociales.Pinterest.getData())>
251 <#if validator.isNotNull(Servicios.getData())>
252 <div class="article-description mt-2 mb-4">
253 ${Servicios.getData()}
254 </div>
255 </#if>
256 <div class="socials-wrapper">
257 <div class="socials">
258 <ul class="list-inline items socials">
259 <#if validator.isNotNull(RedesSociales.Facebook.getData())>
260 <#assign linkURL = RedesSociales.Facebook.data/>
261
262 <#if !stringUtil.startsWith(linkURL, "http")>
263 <#assign linkURL = "https://${RedesSociales.Facebook.data}"/>
264 </#if>
265 <li class="list-inline-item item facebook">
266 <a href="${linkURL}" title="${languageUtil.format(request,'go-to-x','Facebook')}" onclick="this.target='_blank'">
267 <span class="fab fa-facebook-f">
268 <span class="hide-accessible">${languageUtil.format(request,'go-to-x','Facebook')}</span>
269 </span>
270 </a>
271 </li>
272 </#if>
273 <#if validator.isNotNull(RedesSociales.Twitter.getData())>
274 <#assign linkURL = RedesSociales.Twitter.data/>
275
276 <#if !stringUtil.startsWith(linkURL, "http")>
277 <#assign linkURL = "https://${RedesSociales.Twitter.data}"/>
278 </#if>
279 <li class="list-inline-item item twitter">
280 <a href="${linkURL}" title="${languageUtil.format(request,'go-to-x','Twitter')}" onclick="this.target='_blank'">
281 <span class="fab fa-twitter">
282 <span class="hide-accessible">${languageUtil.format(request,'go-to-x','Twitter')}</span>
283 </span>
284 </a>
285 </li>
286 </#if>
287 <#if validator.isNotNull(RedesSociales.Instagram.getData())>
288
289 <#if RedesSociales.Instagram.data?has_content>
290 <#assign linkURL = RedesSociales.Instagram.data/>
291
292 <#if !stringUtil.startsWith(linkURL, "http")>
293 <#assign linkURL = "https://${RedesSociales.Instagram.data}"/>
294 </#if>
295 <li class="list-inline-item item instagram">
296 <a href="${linkURL}" title="${languageUtil.format(request,'go-to-x','Instagram')}" onclick="this.target='_blank'">
297 <span class="fab fa-instagram">
298 <span class="hide-accessible">${languageUtil.format(request,'go-to-x','Instagram')}</span>
299 </span>
300 </a>
301 </li>
302 </#if>
303 </#if>
304 <#if validator.isNotNull(RedesSociales.Youtube.getData())>
305 <#assign linkURL = RedesSociales.Youtube.data/>
306
307 <#if !stringUtil.startsWith(linkURL, "http")>
308 <#assign linkURL = "https://${RedesSociales.Youtube.data}"/>
309 </#if>
310 <li class="list-inline-item item youtube">
311 <a href="${linkURL}" title="${languageUtil.format(request,'go-to-x','Youtube')}" onclick="this.target='_blank'">
312 <span class="fab fa-youtube">
313 <span class="hide-accessible">${languageUtil.format(request,'go-to-x','Youtube')}</span>
314 </span>
315 </a>
316 </li>
317 </#if>
318 <#if validator.isNotNull(RedesSociales.Linkedin.getData())>
319 <#if RedesSociales.Linkedin.data?has_content>
320 <#assign linkURL = RedesSociales.Linkedin.data/>
321
322 <#if !stringUtil.startsWith(linkURL, "http")>
323 <#assign linkURL = "https://${RedesSociales.Linkedin.data}"/>
324 </#if>
325 <li class="list-inline-item item linkedin">
326 <a href="${linkURL}" title="${languageUtil.format(request,'go-to-x','Linkedin')}" onclick="this.target='_blank'">
327 <span class="fab fa-linkedin">
328 <span class="hide-accessible">${languageUtil.format(request,'go-to-x','Linkedin')}</span>
329 </span>
330 </a>
331 </li>
332 </#if>
333 </#if>
334 <#if validator.isNotNull(RedesSociales.TikTok.getData())>
335 <#if RedesSociales.TikTok.data?has_content>
336 <#assign linkURL = RedesSociales.TikTok.data/>
337
338 <#if !stringUtil.startsWith(linkURL, "http")>
339 <#assign linkURL = "https://${RedesSociales.TikTok.data}"/>
340 </#if>
341 <li class="list-inline-item item tiktok">
342 <a href="${linkURL}" title="${languageUtil.format(request,'go-to-x','Tiktok')}" onclick="this.target='_blank'">
343 <span class="fab fa-tiktok">
344 <span class="hide-accessible">${languageUtil.format(request,'go-to-x','Tiktok')}</span>
345 </span>
346 </a>
347 </li>
348 </#if>
349 </#if>
350 <#if validator.isNotNull(RedesSociales.Pinterest.getData())>
351 <#assign linkURL = RedesSociales.Pinterest.data/>
352
353 <#if !stringUtil.startsWith(linkURL, "http")>
354 <#assign linkURL = "https://${RedesSociales.Pinterest.data}"/>
355 </#if>
356 <li class="list-inline-item item pinterest">
357 <a href="${linkURL}" title="${languageUtil.format(request,'go-to-x','Pinterest')}" onclick="this.target='_blank'">
358 <span class="fab fa-pinterest-p">
359 <span class="hide-accessible">${languageUtil.format(request,'go-to-x','Pinterest')}</span>
360 </span>
361 </a>
362 </li>
363 </#if>
364 </ul>
365 </div>
366 </div>
367 </#if>
368 </div>
369 </#if>
370 </div>
371 </div>
372 </#if>
373 </div>
374</article>