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" id="hotelesDestino">
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 Memorias De Egipto
Egipto es el país que une África con Oriente Medio y es el hogar de una de las civilizaciones más antiguas de la Tierra. Sumérgete en sus más de 5000 años de historia que a lo largo de los siglos ha cautivado a viajeros del todo el mundo. Tierra de contrastes compuesta por hermosos paisajes desérticos dotados del esplendor que les otorga el inagotable río Nilo, Egipto atrae millones de visitantes ofreciéndoles un viaje al pasado gracias a sus majestuosos templos y maravillas de la antigüedad conservadas a la perfección.
INFORMACIÓN DE INTERÉS

DOCUMENTACIÓN
Los ciudadanos españoles precisan llevar el pasaporte válido durante 6 meses tras la fecha de entrada en el país. El visado es obligatorio y se consigue allí mismo, en el aeropuerto o en los puestos fronterizos terrestres.
CAMBIO
La moneda oficial es la libra egipcia.
VESTUARIO
Calzados cómodos y ropa ligera, adecuada a la estación en la que viajemos. Egipto es un país musulmán, cubre hombros y rodillas al visitar espacios religiosos. Las mujeres, es conveniente que lleven un pañuelo para cubrirse la cabeza al entrar en mezquitas y templos sagrados.
ELECTRICIDAD
El voltaje del suministro eléctrico normalizado es de 220 voltios.
REFERENCIA HORARIA
La hora local es +1 hora de la hora Central de Europa (CET)
TELÉFONO
Código de acceso desde España: (+20)
Código de acceso desde Egipto: (+34)
LOS "IMPRESCINDIBLES" DE MEMORIAS DE EGIPTO

LUXOR
Un lugar en el que se concentra el mayor número de monumentos de Egipto. Entre los más destacados se encuentran el Templo de Lúxor, el Templo de Karnak, el Valle de los Reyes y la Necrópolis de Tebas, donde se halla la tumba de Tutankamón. También el Templo de Hatshepsut, Deir El Bahari y los Colosos de Memnón.
ESNA
Una pequeña ciudad del Alto Egipto conocida por varios motivos. Uno de ellos, por ser el punto de partida de muchos cruceros por el Nilo, pues aquí se encuentra la esclusa de Esna, que hace posible la travesía hasta Aswan. Y el otro motivo es sin dudas, su templo, que conserva algunos elementos de gran belleza.
EDFU
Situada en la ribera occidental del río Nilo. Funcionó como centro comercial y religioso y con una gran producción azúcar y cerámica. El templo de Edfu es, para muchos, uno de los más bellos de todo Egipto. Por ello, está más que justificado hacer una excursión a él o una parada durante un crucero por el Nilo.

KOM OMBO
Es una de las ciudades que más destacan a orillas del Nilo. Junto al cauce del río de Egipto encontrará un fastuoso templo que se yergue orgulloso con más de 2.000 años de historia en sus piedras, dedicado a Sobek, dios con cabeza de cocodrilo y cuerpo humano.
ASWAN
Con un encanto especial y diferente al resto del país, allí se encuentran los majestuosos Templos de Abu Simbel, El complejo incluye dos templos dedicados a Ramsés II y Nefertari. Además, su ritmo es más tranquilo que el de otras ciudades egipcias, sobre todo las más densamente pobladas y situadas en el Delta del Nilo.
TEMPLO DE PHILAE
Uno de los santuarios más bellos de Egipto dedicado a la diosa Isis. Está ubicado en una pequeña isla a la que solo se puede acceder en barco, algo que le aporta aún mayor encanto si es posible.

ABU SIMBEL
En la lejana región de Nubia, al sur de Egipto, Ramsés II alzó dos magníficos templos excavados en la montaña, dedicados a sí mismo y a su esposa Nefertari, que despertaron la admiración de quienes los contemplaron.
PIRÁMIDES DE GUIZA
La construcción de las pirámides de Guiza ha logrado su objetivo: perdurar una eternidad. Las monumentales tumbas son reliquias de la época del Reino Antiguo de Egipto y se construyeron hace unos 4500 años. Keops, Kefrén, Micerinos y la Esfinge.
EL CAIRO
No solo es la capital de Egipto, sino también su ciudad más poblada, el motor de su economía y la verdadera alma del país. Y, además, un destino turístico muy interesante: con su Ciudadela de Saladino, la Mezquita de Alabastro y el barrio copto, sin olvidar su centro histórico o el famoso mercado de El Jan El -Jalili.