cultural tourism
The cities of the Costa Blanca reflect the passage of ancient civilisations, such as the Iberian Roman city of Lucentum in Alicante or the Illeta dels Banyets in El Campello. Not to mention the Route of the Castles by the Vinalopó region or the European routes of modernist architecture in Alcoy or Novelda.
The province of Valencia offers a rich cultural program too with visits to the Castle of Cullera, the Ducal Palace of Gandia, the Roman ruins of Sagunto or the Borgia Territory in the historic centre of Xàtiva, among others.
Moreover, the province of Castellón offers rock art and avant-garde in a small radius of kilometres highlighting the cultural wealth of tourist towns such as Benicàssim, Oropesa del Mar or Peñíscola.
Be inspired




Trip ideas
The following has evaluated to null or missing: ==> fotodeportada [in template "20099#20135#413073" at line 343, column 128] ---- Tip: If the failing expression is known to be 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: #if fotodeportada?length gt 0 [in template "20099#20135#413073" at line 343, column 123] ----
1<#if selectionStyle == "dynamic" >
2<#assign aeq = objectUtil("com.liferay.asset.kernel.service.persistence.AssetEntryQuery")/>
3<#assign pathKey = serviceLocator.findService("es.cv.urlfilter.service.PathKeyLocalService")>
4<#assign pathValue = serviceLocator.findService("es.cv.urlfilter.service.PathValueLocalService")>
5<#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")>
6<#assign AssetTagLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetTagLocalService")>
7<#assign pfu = serviceLocator.findService("com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil")>
8<#assign AssetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")>
9
10
11<#assign language = locale.getLanguage()!"es" />
12 <#assign custom_language = "Es"
13 language_url = "/"+language>
14
15 <#if language == "es">
16 <#assign custom_language = "Es">
17 <#elseif language == "en">
18 <#assign custom_language = "En">
19 <#elseif language == "fr">
20 <#assign custom_language = "Fr">
21 <#elseif language == "de">
22 <#assign custom_language = "De">
23 <#elseif language == "ca">
24 <#assign custom_language = "Va"
25 language_url="/va" >
26 </#if>
27
28
29
30<#assign slugs = {
31 "province": (avtContext.provinceSlug)!'',
32 "township": (avtContext.townshipSlug)!'',
33 "type": (avtContext.typeSlug)!'',
34 "subtype": (avtContext.subtypeSlug)!'',
35 "segment": (avtContext.segmentSlug)!'',
36 "subsegment": (avtContext.subsegmentSlug)!'',
37 "resource": (avtContext.resourceSlug)!''
38 } />
39
40<#assign dinamicPage = "false">
41<#assign typePathKey = "">
42<#assign idPathKey = 0>
43<#assign slug = "">
44
45<#assign queryValues0 = [] >
46<#if portletPreferences["queryValues0"]??>
47 <#assign queryValues0 = portletPreferences["queryValues0"] >
48</#if>
49
50
51<#if portletPreferences["orderByColumn1"]??>
52 <#assign orders1 = portletPreferences["orderByColumn1"] >
53</#if>
54
55<#if portletPreferences["orderByColumn2"]??>
56 <#assign orders2 = portletPreferences["orderByColumn2"] >
57</#if>
58
59<#assign queryValues1 = [] >
60<#if portletPreferences["queryValues1"]??>
61 <#assign queryValues1 = portletPreferences["queryValues1"] >
62</#if>
63
64<#assign deltas = [] >
65<#if portletPreferences["delta"]??>
66 <#assign deltas = portletPreferences["delta"] >
67</#if>
68
69<#assign queryAndOperator0 = [] >
70<#if portletPreferences["queryAndOperator0"]??>
71 <#assign queryAndOperator0 = portletPreferences["queryAndOperator0"] >
72</#if>
73
74<#assign queryAndOperator1 = [] >
75<#if portletPreferences["queryAndOperator1"]??>
76 <#assign queryAndOperator1 = portletPreferences["queryAndOperator1"] >
77</#if>
78
79<#assign queryNames0 = [] >
80<#if portletPreferences["queryName0"]??>
81 <#assign queryNames0 = portletPreferences["queryName0"] >
82</#if>
83
84<#assign queryNames1 = [] >
85<#if portletPreferences["queryName1"]??>
86 <#assign queryNames1 = portletPreferences["queryName1"] >
87</#if>
88
89
90<#assign categoriesArrayAND = [] />
91<#assign categoriesArrayOR = [] />
92
93<#assign tagsArrayAND = [] />
94<#assign tagsArrayOR = [] />
95
96
97<#--Numero de elementos a mostrar-->
98<#assign size = 20?number >
99<#list deltas as delta>
100 <#assign size = delta?number >
101</#list>
102
103<#--Nombre de la primera query-->
104<#list queryNames0 as queryName0>
105 <#assign firstQuery = queryName0 >
106</#list>
107<#--Nombre de la segunda query-->
108<#list queryNames1 as queryName1>
109 <#assign secondQuery = queryName1 >
110</#list>
111
112<#--Operador de la primera query-->
113<#list queryAndOperator0 as order0Aux>
114 <#assign orderAnd0 = order0Aux >
115</#list>
116
117<#--Operador de la primera query-->
118<#list queryAndOperator1 as order1Aux>
119 <#assign orderAnd1 = order1Aux >
120</#list>
121
122
123<#if firstQuery??>
124 <#if firstQuery == "assetCategories">
125 <#list queryValues0 as queryValue0>
126 <#assign num = queryValue0?number>
127 <#if orderAnd0 == "true">
128 <#assign categoriesArrayAND = categoriesArrayAND + [ num ] />
129 </#if>
130 <#if orderAnd0 == "false">
131 <#assign categoriesArrayOR = categoriesArrayOR + [ num ] />
132 </#if>
133 </#list>
134 <#elseif firstQuery == "assetTags">
135 <#list queryValues0 as queryValue0>
136 <#assign dynamicQuery = AssetTagLocalService.dynamicQuery().add(pfu.forName("name").like("%" + queryValue0 + "%"))>
137 <#assign tags = AssetTagLocalService.dynamicQuery(dynamicQuery, 0, 1) >
138 <#list tags as tag>
139 <#if orderAnd0 == "true">
140 <#assign tagsArrayAND = tagsArrayAND + [ tag.getTagId() ] />
141 </#if>
142 <#if orderAnd0 == "false">
143 <#assign tagsArrayOR = tagsArrayOR + [ tag.getTagId() ] />
144 </#if>
145 </#list>
146 </#list>
147 </#if>
148</#if>
149
150
151<#if secondQuery??>
152 <#if secondQuery == "assetCategories">
153 <#list queryValues1 as queryValue1>
154 <#assign num = queryValue1?number>
155 <#if orderAnd1 == "true">
156 <#assign categoriesArrayAND = categoriesArrayAND + [ num ] />
157 </#if>
158 <#if orderAnd1 == "false">
159 <#assign categoriesArrayOR = categoriesArrayOR + [ num ] />
160 </#if>
161 </#list>
162 <#elseif secondQuery == "assetTags">
163 <#list queryValues1 as queryValue1>
164 <#assign dynamicQuery = AssetTagLocalService.dynamicQuery().add(pfu.forName("name").like("%" + queryValue1 + "%"))>
165 <#assign tags = AssetTagLocalService.dynamicQuery(dynamicQuery, 0, 1) >
166 <#list tags as tag>
167 <#if orderAnd1 == "true">
168 <#assign tagsArrayAND = tagsArrayAND + [ tag.getTagId() ] />
169 </#if>
170 <#if orderAnd1 == "false">
171 <#assign tagsArrayOR = tagsArrayOR + [ tag.getTagId() ] />
172 </#if>
173 </#list>
174 </#list>
175 </#if>
176</#if>
177
178
179
180
181<#if slugs["township"]?has_content && slugs["province"]?has_content>
182 <#assign typePathKey = pathKey.findByType("township")>
183 <#assign slug = slugs["township"]>
184 <#assign idPathKey = typePathKey.getKeyId()>
185 <#assign nameCategory = pathValue.getBySlugName(idPathKey, slug, custom_language)>
186
187
188 <#assign dynamicQuery = AssetCategoryLocalService.dynamicQuery().add(pfu.forName("name").like("%" + nameCategory + "%"))>
189 <#assign categories = AssetCategoryLocalService.dynamicQuery(dynamicQuery, 0, 1) >
190 <#list categories as category>
191 <#assign categoriesArrayAND = categoriesArrayAND + [ category.getCategoryId() ] />
192 </#list>
193<#elseif slugs["province"]?has_content>
194 <#assign typePathKey = pathKey.findByType("province")>
195 <#assign slug = slugs["province"]>
196
197 <#assign idPathKey = typePathKey.getKeyId()>
198 <#assign nameCategory = pathValue.getBySlugName(idPathKey, slug, custom_language)>
199 <#assign nameCategory = nameCategory + " (Provincia)">
200
201 <#assign dynamicQuery = AssetCategoryLocalService.dynamicQuery().add(pfu.forName("name").like("%" + nameCategory + "%"))>
202 <#assign categories = AssetCategoryLocalService.dynamicQuery(dynamicQuery, 0, 1) >
203 <#list categories as category>
204 <#assign categoriesArrayAND = categoriesArrayAND + [ category.getCategoryId() ] />
205 </#list>
206
207</#if>
208
209
210<#if slugs["type"]?has_content>
211 <#assign typePathKey = pathKey.findByType("type")>
212 <#assign slug = slugs["type"]>
213
214 <#assign idPathKey = typePathKey.getKeyId()>
215 <#assign nameCategory = pathValue.getBySlugName(idPathKey, slug, custom_language)>
216
217
218 <#assign dynamicQuery = AssetCategoryLocalService.dynamicQuery().add(pfu.forName("name").like("%" + nameCategory + "%"))>
219 <#assign categories = AssetCategoryLocalService.dynamicQuery(dynamicQuery, 0, 1) >
220 <#list categories as category>
221 <#assign categoriesArrayAND = categoriesArrayAND + [ category.getCategoryId() ] />
222 </#list>
223
224</#if>
225
226<#if slugs["subtype"]?has_content>
227 <#assign typePathKey = pathKey.findByType("subtype")>
228 <#assign slug = slugs["subtype"]>
229
230 <#assign idPathKey = typePathKey.getKeyId()>
231 <#assign nameCategory = pathValue.getBySlugName(idPathKey, slug, custom_language)>
232
233
234 <#assign dynamicQuery = AssetCategoryLocalService.dynamicQuery().add(pfu.forName("name").like("%" + nameCategory + "%"))>
235 <#assign categories = AssetCategoryLocalService.dynamicQuery(dynamicQuery, 0, 1) >
236 <#list categories as category>
237 <#assign categoriesArrayAND = categoriesArrayAND + [ category.getCategoryId() ] />
238 </#list>
239
240</#if>
241
242<#if slugs["segment"]?has_content>
243 <#assign typePathKey = pathKey.findByType("segment")>
244 <#assign slug = slugs["segment"]>
245
246 <#assign idPathKey = typePathKey.getKeyId()>
247 <#assign nameCategory = pathValue.getBySlugName(idPathKey, slug, custom_language)>
248
249
250 <#assign dynamicQuery = AssetCategoryLocalService.dynamicQuery().add(pfu.forName("name").like("%" + nameCategory + "%"))>
251 <#assign categories = AssetCategoryLocalService.dynamicQuery(dynamicQuery, 0, 1) >
252 <#list categories as category>
253 <#assign categoriesArrayAND = categoriesArrayAND + [ category.getCategoryId() ] />
254 </#list>
255
256</#if>
257
258
259<#if slugs["subsegment"]?has_content>
260 <#assign typePathKey = pathKey.findByType("subsegment")>
261 <#assign slug = slugs["subsegment"]>
262
263 <#assign idPathKey = typePathKey.getKeyId()>
264 <#assign nameCategory = pathValue.getBySlugName(idPathKey, slug, custom_language)>
265
266
267 <#assign dynamicQuery = AssetCategoryLocalService.dynamicQuery().add(pfu.forName("name").like("%" + nameCategory + "%"))>
268 <#assign categories = AssetCategoryLocalService.dynamicQuery(dynamicQuery, 0, 1) >
269 <#list categories as category>
270 <#assign categoriesArrayAND = categoriesArrayAND + [ category.getCategoryId() ] />
271 </#list>
272
273</#if>
274
275
276<#assign prueba = aeq.setAllCategoryIds(categoriesArrayAND) >
277<#assign prueba = aeq.setAnyCategoryIds(categoriesArrayOR) >
278
279<#assign prueba = aeq.setAllTagIds(tagsArrayAND) >
280<#assign prueba = aeq.setAnyTagIds(tagsArrayOR) >
281
282<#assign prueba = aeq.setStart(0) >
283<#assign prueba = aeq.setEnd(size) >
284
285<#if orders1??>
286 <#assign prueba = aeq.setOrderByCol1(orders1[0]) >
287</#if>
288
289<#if orders2??>
290 <#assign prueba = aeq.setOrderByCol2(orders2[0]) >
291</#if>
292
293
294<#assign assetEntryList = AssetEntryLocalService.getEntries(aeq)>
295<#else>
296 <#assign assetEntryList = entries>
297</#if>
298
299
300
301<#assign pdfCarrusel = "pdf-carrusel-" + randomNamespace>
302<#if assetEntryList?has_content>
303 <#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")>
304 <section id="${pdfCarrusel}" class="pt-5 pb-5">
305 <h2 class="text-center title-big"> <@liferay.language key="published.last-publication"/> </h2>
306 <div class="pdf-carrusel carousel slick-carousel wrapped-content">
307 <#list assetEntryList as entry>
308 <#assign renderer = entry.getAssetRenderer()>
309 <#assign className = renderer.getClassName() >
310 <#if className == "com.liferay.journal.model.JournalArticle" >
311 <#assign journalArticle = renderer.getArticle() >
312 <#assign document = saxReaderUtil.read(journalArticle.getContent()) >
313 <#assign rootElement = document.getRootElement() >
314 <#assign urlFriendly = "/"+locale.getLanguage()+"/publicaciones" >
315 <#assign urlFriendly = urlFriendly+"/"+journalArticle.getUrlTitle() >
316
317 <#assign publicacionPDF =[]
318 publicacionText=[] >
319
320 <#list rootElement.elements() as dynamicElement >
321 <#if "fotodeportada" == dynamicElement.attributeValue("name") >
322 <#assign fotodeportada = dynamicElement.element("dynamic-content").getText() >
323 </#if>
324 <#if "publicacion" == dynamicElement.attributeValue("name") >
325 <#assign publicacion = dynamicElement.element("dynamic-content").getText() >
326 <#assign publicacionElements = dynamicElement.element("dynamic-content").elements() >
327 <#list dynamicElement.element("dynamic-element").elements() as dpubli >
328 <#if dpubli.getText()?trim?length gt 0 >
329 <#assign publicacionText = publicacionText + [dpubli.getText()] >
330 </#if>
331 </#list>
332 <#list dynamicElement.elements() as algo >
333 <#if algo.getText()?trim?length gt 0 >
334 <#assign publicacionPDF = publicacionPDF + [algo.getText()] >
335 </#if>
336 </#list>
337 </#if>
338 </#list>
339
340 <div class="slick-item h-100">
341 <div class="row">
342 <div class="col-4 mt-0 mb-auto">
343 <img class="image-pdf w-100 image-result" <#if fotodeportada?length gt 0 > src="${fotodeportada}" <#else> src="/o/main-theme/images/publicaciones.svg" </#if> alt="Image"/>
344 </div>
345 <div class="col-8">
346 <p class="tag-title">
347 <a href="${urlFriendly}">${journalArticle.getTitle()}</a>
348 </p>
349 <div class="tag-download">
350 <@liferay.language key="download" />:
351 </div>
352 <#assign textpubli = "" >
353 <#list publicacionPDF as pdf >
354 <#if pdf?index lt publicacionText?size >
355 <#if pdf?length gt 0 >
356 <#if textpubli?contains(publicacionText[pdf?index]) == false >
357 <#assign textpubli = textpubli +" "+publicacionText[pdf?index] >
358 <a class="link-pdf text-uppercase" href="${pdf}" target="_blank" download="${journalArticle.getTitle()}">${publicacionText[pdf?index]}</a>
359 </#if>
360 </#if>
361 </#if>
362 </#list>
363 </div>
364 </div>
365 </div>
366 </#if>
367
368 </#list>
369 </div>
370 </section>
371
372
373 <style>
374 #${pdfCarrusel} { padding: 5rem 0; }
375 #${pdfCarrusel} .image-pdf { min-height: 5rem; height: auto; max-height: 10rem; object-fit: cover; margin: 0 auto; }
376 #${pdfCarrusel} .slick-item { padding: 1rem; }
377 #${pdfCarrusel} .slick-item[aria-hidden=true] { visibility: hidden; height: 0; }
378 #${pdfCarrusel} .tag-title a{ font-size: 1.4rem; text-transform: uppercase; transform: scaleX(0.9); transform-origin: left; color:#CB4F40; }
379 #${pdfCarrusel} .tag-download{ font-size: 1rem; }
380 #${pdfCarrusel} .link-pdf { font-size: 1rem; color: #0078BF; }
381 </style>
382
383
384
385 <link rel="stylesheet" type="text/css" href="slick/slick.css"/>
386 <link rel="stylesheet" type="text/css" href="slick/slick-theme.css"/>
387 <script>
388 $(window).ready(function() {
389 if(typeof $.fn.slick === 'function'){
390 var total = "${assetEntryList?size}";
391 $("#${pdfCarrusel} .pdf-carrusel:not(.slick-initialized)").slick({
392 dots: total>4,
393 arrows: false,
394 infinite: true,
395 slidesToShow: 4,
396 slidesToScroll: 4,
397 responsive: [
398 {
399 breakpoint: 1024,
400 settings: {
401 slidesToShow: 3,
402 slidesToScroll: 3,
403 infinite: true,
404 dots: true
405 }
406 },
407 {
408 breakpoint: 600,
409 settings: {
410 slidesToShow: 2,
411 slidesToScroll: 2
412 }
413 },
414 {
415 breakpoint: 480,
416 settings: {
417 slidesToShow: 1,
418 slidesToScroll: 1
419 }
420 }
421 // You can unslick at a given breakpoint now by adding:
422 // settings: "unslick"
423 // instead of a settings object
424 ]
425 });
426 }
427 });
428 </script>
429
430 <#else>
431<#assign usrRoles = user.getRoles()>
432<#list usrRoles as usrRole>
433 <#if usrRole.getName() == "Administrator">
434 <section class="pt-5 pb-5">
435 <h5 class="text-uppercase text-center empty-message f-source-sans-pro">
436 <@liferay.language key="highlighted.search.results.empty"/>
437 </h5>
438 </section>
439 </#if>
440</#list>
441</#if>