The following has evaluated to null or missing:
==> categoryResponse[0] [in template "62757443695457#32456#108258" at line 10, column 27]
----
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: #assign categoryId = categoryResponse... [in template "62757443695457#32456#108258" at line 10, column 5]
----
1<#assign contents = []>
2<#assign categoryName = "">
3<#assign peti = "/headless-delivery/v1.0/sites/" + groupId + "/content-structures?filter=name eq 'Hotel Card'"/>
4<#assign structures = restClient.get("/headless-delivery/v1.0/sites/" + groupId + "/content-structures?filter=name eq 'Hotel Card'").items/>
5<#if (structures?size > 0)>
6 <#assign categoryName = (shortName.getData()!"")>
7 <#assign vocabularyResponse = restClient.get("/headless-admin-taxonomy/v1.0/sites/" + groupId + "/taxonomy-vocabularies?filter=name eq 'Destinations'").items>
8 <#assign vocabularyId = vocabularyResponse[0].id>
9 <#assign categoryResponse = restClient.get("/headless-admin-taxonomy/v1.0/taxonomy-vocabularies/" + vocabularyId + "/taxonomy-categories?filter=name eq '" + categoryName + "'").items>
10 <#assign categoryId = categoryResponse[0].id>
11
12 <#assign response = restClient.get("/headless-delivery/v1.0/content-structures/" + structures[0].id + "/structured-contents?filter=taxonomyCategoryIds/any(t:t eq " + categoryId + ")&pageSize=100")>
13 <#assign contents = response.items>
14</#if>
15<#if (contents?size >0)>
16 <section class="mp-max-width-section">
17 <div class="our-accomodations__wrapper">
18 <h2 class="mp-title-section mp-text-center">
19 <#if containsCircuits?? && getterUtil.getBoolean(containsCircuits.getData())>
20 Información adicional y alojamientos en ${categoryName?lower_case?cap_first}
21 <#else>
22 Nuestros alojamientos en ${categoryName?lower_case?cap_first}
23 </#if>
24
25 </h2>
26 <div class="swiper">
27 <ul class="cards-list__wrapper swiper-wrapper" aria-label="Carousel">
28 <#list contents as content>
29
30 <li class="swiper-slide">
31 <a href="/viajes/${content.friendlyUrlPath}">
32 <div class="card-2__wrapper card-2__wrapper--resume">
33 <div class="image-container">
34 <#assign imageField = getFieldByName(content.contentFields, "images")>
35 <#if imageField?has_content && imageField.contentFieldValue.image?has_content>
36 <img src="${imageField.contentFieldValue.image.contentUrl}"
37 alt="${imageField.contentFieldValue.image.description}"
38 loading="lazy">
39 </#if>
40 </div>
41 <div class="data__wrapper">
42 <#assign nameField = getFieldByName(content.contentFields, "name")>
43 <#if nameField?has_content>
44 <h3>${nameField.contentFieldValue.data}</h3>
45 </#if>
46 <#assign categoryField = getFieldByName(content.contentFields, "category")>
47 <#if categoryField?has_content>
48 <#assign category = categoryField.contentFieldValue.data>
49 <#attempt>
50 <#assign stars = category?split("*")[0]?number>
51 <#recover>
52 <#assign stars = 0>
53 </#recover>
54 <#if (stars > 0)>
55 <ul class="stars__wrapper" role="img" aria-label="Rating: ${stars} de 5 estrellas">
56 <#list 1..stars as i>
57 <li aria-hidden="true">
58 <svg width="16" height="16" viewBox="0 0 16 16" data-icon="star">
59 <symbol id="ai:local:star">
60 <path fill="currentColor" d="m8 12.689-3.89 2.346a.72.72 0 0 1-.436.107.79.79 0 0 1-.396-.147.84.84 0 0 1-.273-.332.648.648 0 0 1-.03-.453l1.032-4.417L.573 6.82a.737.737 0 0 1-.245-.388.702.702 0 0 1 .027-.428.845.845 0 0 1 .233-.34.807.807 0 0 1 .416-.171l4.532-.396L7.296.925a.68.68 0 0 1 .291-.344.819.819 0 0 1 .825 0 .68.68 0 0 1 .291.344l1.76 4.172 4.533.396a.807.807 0 0 1 .415.172.846.846 0 0 1 .233.34.703.703 0 0 1 .028.427.737.737 0 0 1-.245.388l-3.435 2.973 1.033 4.417a.648.648 0 0 1-.031.453.839.839 0 0 1-.273.332.79.79 0 0 1-.396.147.72.72 0 0 1-.435-.107L8 12.689Z"></path>
61 </symbol>
62 <use xlink:href="#ai:local:star"></use>
63 </svg>
64 </li>
65 </#list>
66 </ul>
67 </#if>
68 </#if>
69 <div class="info__description">
70 <svg width="24" height="24" viewBox="0 0 12 20" data-icon="distance">
71 <symbol id="ai:local:distance">
72 <path fill="currentColor"
73 d="M6.441 19.5c-1.612 0-2.932-.231-3.96-.693C1.456 18.345.942 17.742.942 17c0-.391.168-.749.504-1.073.336-.324.8-.605 1.394-.842l.287.957c-.347.148-.619.303-.813.467-.195.163-.315.327-.36.491.114.446.598.808 1.452 1.085.854.276 1.866.415 3.036.415 1.158 0 2.168-.139 3.03-.415.862-.277 1.35-.639 1.465-1.085-.045-.164-.165-.325-.36-.482a3.956 3.956 0 0 0-.813-.476l.305-.957c.594.237 1.055.518 1.382.842.328.324.491.682.491 1.073 0 .742-.513 1.345-1.54 1.807-1.027.462-2.347.693-3.96.693Zm0-5.137c.3-.588.656-1.188 1.066-1.8.41-.613.831-1.198 1.263-1.755.643-.839 1.157-1.601 1.543-2.288.385-.686.578-1.543.578-2.57 0-1.228-.434-2.277-1.303-3.146C8.718 1.934 7.67 1.5 6.44 1.5c-1.228 0-2.277.435-3.146 1.304-.869.87-1.304 1.918-1.304 3.146 0 1.027.197 1.884.589 2.57a22.38 22.38 0 0 0 1.533 2.288c.432.557.853 1.142 1.263 1.755.41.612.765 1.212 1.065 1.8Zm0 1.522a.603.603 0 0 1-.403-.163 1.077 1.077 0 0 1-.287-.399c-.435-1.055-.924-1.94-1.47-2.658l-1.565-2.06a12.42 12.42 0 0 1-1.224-2.043c-.334-.707-.5-1.577-.5-2.612 0-1.526.526-2.815 1.58-3.87C3.626 1.028 4.916.5 6.442.5c1.525 0 2.815.527 3.869 1.58 1.053 1.055 1.58 2.344 1.58 3.87 0 1.035-.162 1.905-.488 2.612a10.973 10.973 0 0 1-1.237 2.044c-.482.656-1 1.343-1.552 2.06-.554.716-1.048 1.602-1.482 2.657a1.09 1.09 0 0 1-.287.4.603.603 0 0 1-.404.162Zm0-8.406c.43 0 .792-.148 1.087-.442.295-.295.442-.658.442-1.087 0-.43-.147-.792-.442-1.087a1.477 1.477 0 0 0-1.087-.442c-.43 0-.791.148-1.086.442a1.477 1.477 0 0 0-.442 1.087c0 .43.147.792.442 1.087a1.48 1.48 0 0 0 1.086.442Z"></path>
74 </symbol>
75 <use xlink:href="#ai:local:distance"></use>
76 </svg>
77 <#assign streetField = getFieldByName(content.contentFields, "street")>
78 <#if streetField?has_content>
79 <p>${streetField.contentFieldValue.data}</p>
80 </#if>
81 </div>
82 <#assign codeField = getFieldByName(content.contentFields, "code")>
83 <#assign dataHotel = "">
84 <#if codeField?has_content>
85 <#assign dataHotel = "data-hotel='" + codeField.contentFieldValue.data + "'">
86 <div class="data__wrapper__footer d-none">
87 <p class="data__wrapper__footer__price">
88 <span class="price-line">
89 Desde
90 <span ${dataHotel} class="price"></span>
91 </span>
92 <span class="extra-fees">por persona</span>
93 </p>
94 </div>
95 </#if>
96 </div>
97 </div>
98 </a>
99 <li>
100 </#list>
101 </ul>
102 </div>
103 </div>
104 </section>
105</#if>
106
107<#function getFieldByName contentFields, name>
108 <#list contentFields as field>
109 <#if field.name == name>
110 <#return field>
111 </#if>
112 </#list>
113 <#return "">
114</#function>
115
116<script>
117 new Swiper(".our-accomodations__wrapper .swiper", {
118 direction: 'horizontal',
119 spaceBetween: 0,
120 slidesPerView: 'auto',
121 centeredSlides: true,
122 breakpoints: {
123 768: {
124 allowTouchMove: false,
125 }
126 },
127 navigation: {
128 nextEl: '.swiper-button-next',
129 prevEl: '.swiper-button-prev',
130 },
131 pagination: {
132 el: '.swiper-pagination',
133 },
134 keyboard: {
135 enabled: true,
136 onlyInViewport: true,
137 },
138 });
139
140 async function fetchLiferayDocument(url) {
141 return fetchLiferayApi("documents/d/guest/" + url);
142 }
143
144 function numberWithCommas (x){
145
146 return x.toFixed(Number.isInteger(x) ? 0 : 2).toString().replace(".", ",").replace(/\B(?=(\d{3})+(?!\d))/g, ".");
147 }
148
149 async function loadHotelsPrice() {
150 const hotelsResult = await fetchLiferayDocument("hotels");
151 const hotelsJson = await hotelsResult.json();
152
153 const hotelElements = document.querySelectorAll("span[data-hotel]");
154 hotelElements.forEach(hotelElement => {
155 const hotelCode = hotelElement.dataset.hotel;
156 const hotel = hotelsJson.find(hotel => hotel.code === +hotelCode);
157 if (!!hotel && !!hotel.bestPrice) {
158 hotelElement.innerText = numberWithCommas(hotel.bestPrice) + "€";
159
160 const parent = hotelElement.closest(".data__wrapper__footer");
161 parent.classList.remove("d-none");
162 }
163 })
164 }
165
166 loadHotelsPrice();
167</script>
Conoce Mercadillos Navideños En Croacia Y Eslovenia
Croacia ha reconstruido su infraestructura, revitalizando su imagen de país Mediterráneo con aguas cristalinas, ciudades medievales que mezclan la arquitectura occidental y oriental, el respeto por el medio ambiente y las tradiciones. La naturaleza es otro de los atractivos de Croacia, sus Parques Naturales con su variada fauna y flora muestran todo su esplendor, con su litoral dejando bellas calas, playas, y acantilados.
A orillas del mar Adriático, entre Italia y Croacia, se encuentra Eslovenia, un destino con una belleza sorprendente. Sus enormes montañas de cima nevada, curiosas cuevas, frondosos bosques, el color turquesa de sus ríos, convierten Eslovenia en una auténtica maravilla, un país que enamora y seduce con gran facilidad.
INFORMACIÓN DE INTERÉS

DOCUMENTACIÓN
Los ciudadanos españoles precisan llevar el documento de identidad válido o pasaporte en vigor, con validez mínima de 6 meses.
CAMBIO
La moneda oficial es el Euro.
VESTUARIO
Calzados cómodos y ropa ligera, adecuada a la estación en la que viajemos.
ELECTRICIDAD
El voltaje del suministro eléctrico normalizado es de 230 voltios.
REFERENCIA HORARIA
La hora local es la misma que en España.
TELÉFONO
Código de acceso desde España: Croacia: +385 y a Eslovenia: +386
Código de acceso desde Croacia y Eslovenia: +34