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 Tesoros De Egipto Y Faraones
Descubre los grandes tesoros de Egipto en un viaje fascinante que combina historia, cultura y algunos de los monumentos más impresionantes del mundo.
Desde las legendarias Pirámides de Guiza y la enigmática Esfinge hasta los majestuosos Templos de Abu Simbel, este recorrido le permitirá adentrarse en el legado de los faraones y conocer una de las civilizaciones más extraordinarias de la historia. Egipto es un destino lleno de contrastes, donde la grandeza de sus monumentos milenarios convive con tradiciones ancestrales, ciudades vibrantes y paisajes únicos.
Desde el bullicio histórico de El Cairo hasta el encanto arqueológico de Asuán y Luxor, pasando por templos excavados en la roca, mercados llenos de vida y monumentos declarados Patrimonio de la Humanidad, cada etapa del viaje ofrece experiencias inolvidables.
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 TESOROS DE EGIPTO Y FARAONES

ASWAN
Es uno de los destinos más encantadores del sur de Egipto, famoso por sus paisajes nubios, su ambiente relajado y su riqueza histórica. Desde aquí se accede a los impresionantes Templos de Abu Simbel, una de las mayores joyas arqueológicas del país, construidos por Ramsés II en honor a sí mismo y a la reina Nefertari. Situada a orillas del río Nilo, Asuán ofrece una experiencia más tranquila y auténtica que otras ciudades egipcias, convirtiéndose en una parada imprescindible durante cualquier viaje a Egipto.
ABU SIMBEL
En la histórica región de Nubia, al sur de Egipto, se alzan los majestuosos Templos de Abu Simbel, considerados una de las obras maestras de la arquitectura faraónica. Excavados directamente en la roca por orden de Ramsés II, estos monumentos fueron dedicados al faraón y a su esposa Nefertari. Sus colosales estatuas, su extraordinaria historia y su espectacular ubicación convierten a Abu Simbel en una de las visitas más impresionantes de Egipto y en un símbolo del legado de los faraones.
GRAN MUSEO EGIPCIO (GEM)
El Gran Museo Egipcio (GEM), situado junto a las Pirámides de Guiza, es el museo arqueológico más grande del mundo dedicado a una sola civilización. Sus modernas instalaciones albergan miles de piezas del antiguo Egipto, incluyendo el tesoro completo de Tutankamón, estatuas monumentales, sarcófagos y valiosos objetos faraónicos. Una visita imprescindible para comprender la grandeza y el legado de una de las civilizaciones más fascinantes de la historia.
KOM OMBO
Es una de las ciudades más destacadas a orillas del río Nilo gracias a su espectacular templo doble, único en Egipto. Construido hace más de 2.000 años, este santuario está dedicado a Sobek, el dios cocodrilo, y a Haroeris, el dios halcón. Su privilegiada ubicación junto al río y sus impresionantes relieves convierten a Kom Ombo en una de las paradas más atractivas durante un crucero por el Nilo.

EDFU
Situada en la ribera occidental del Nilo, Edfu fue un importante centro religioso y comercial durante el antiguo Egipto. Su principal atractivo es el magnífico Templo de Horus, considerado uno de los templos mejor conservados y más bellos del país. Gracias a su excelente estado de conservación, permite admirar con detalle la arquitectura y los relieves de la época faraónica, siendo una visita imprescindible en cualquier crucero por el Nilo.
LUXOR
Es el corazón arqueológico de Egipto y uno de los destinos más fascinantes del mundo. Conocida como el mayor museo al aire libre del planeta, concentra algunos de los monumentos más importantes de la civilización faraónica, como el Templo de Luxor, el Templo de Karnak, el Valle de los Reyes y la Necrópolis de Tebas, donde se descubrió la tumba de Tutankamón. También destacan el Templo de Hatshepsut, Deir el-Bahari y los imponentes Colosos de Memnón.
PIRAMIDES DE GUIZA
Son el icono más reconocido de Egipto y una de las Siete Maravillas del Mundo Antiguo que aún permanecen en pie. Construidas hace más de 4.500 años durante el Reino Antiguo, las pirámides de Keops, Kefrén y Micerinos continúan asombrando por su monumentalidad y perfección arquitectónica. Junto a ellas se encuentra la legendaria Gran Esfinge, uno de los monumentos más enigmáticos y fotografiados del mundo.
EL CAIRO
Capital de Egipto y una de las ciudades más fascinantes de Oriente Medio, combina historia, cultura y tradición en cada rincón. Entre sus principales atractivos destacan la Ciudadela de Saladino, la Mezquita de Alabastro, el histórico barrio copto y sus animados mercados tradicionales. Esta vibrante metrópolis es la puerta de entrada perfecta para descubrir los grandes tesoros del antiguo Egipto y la vida cotidiana del país actual.