Agenda
Teatro: 'Documento de identidad'
25/06/2026
Danza: 'LABO GO60. Topaketak 2026 ? ?'
25/06/2026
Otras agendas
Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing:
==> catRest.parentTaxonomyVocabulary [in template "32250#32291#176027" at line 123, column 56]
----
Tip: It's the step after the last dot 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: #if catRest?? && (catRest.parentTaxon... [in template "32250#32291#176027" at line 123, column 37]
----
1<div class="d-flex d-print-none lfr-layout-structure-item-info-clip lfr-layout-structure-item-2e1e7d08-08b5-5a13-58bc-79427b103af5 align-items-baseline" style="gap: 8px;">
2 <p>
3 ${languageUtil.get(locale, "results-found")} <strong>${searchContainer.getTotal()} ${languageUtil.get(locale, "coincidences")}</strong> ${languageUtil.get(locale, "finding")}:
4 </p>
5 <div id="filtrosAplicados" class="d-flex" style="gap: 8px;"></div>
6</div>
7
8<#-- CONFIGURACIÓN DE FECHAS E IDIOMA -->
9<#if locale == "eu_ES">
10 <#setting date_format = "yyyy/MM/dd"/>
11 <#assign msgPasado = "Egindako jarduera">
12<#else>
13 <#setting date_format="dd/MM/yyyy">
14 <#assign msgPasado = "Actividad realizada">
15</#if>
16
17<#-- OBTENEMOS EL NÚMERO DE HOY PARA COMPARAR -->
18<#assign todayNum = .now?string("yyyyMMdd")?number />
19
20<div class="row flex-lg-row flex-sm-row flex-row flex-md-row">
21 <#list entries as entry>
22 <#assign classpk = entry.getClassPK() />
23 <#assign event = restClient.get("/headless-delivery/v1.0/structured-contents/${classpk}") />
24
25 <#if event?? && event.contentFields??>
26 <#assign image = ""/>
27 <#assign alt = ""/>
28 <#assign startDate = ""/>
29 <#assign endDate = ""/>
30 <#assign sDateRaw = ""/>
31 <#assign eDateRaw = ""/>
32 <#assign place = ""/>
33 <#assign startHour = ""/>
34 <#assign endHour = ""/>
35 <#assign priceValue = ""/>
36 <#assign isEuskera = ""/>
37 <#assign estadoPrecioRaw = ""/>
38
39 <#list event.contentFields as field>
40 <#if field.name == "image" && field.contentFieldValue?has_content>
41 <#assign image = (field.contentFieldValue.image.contentUrl)!"" />
42 <#assign alt = (field.contentFieldValue.image.description)!"" />
43 <#elseif field.name == "startDate" && field.contentFieldValue?has_content && field.contentFieldValue.data?has_content>
44 <#assign sDateRaw = field.contentFieldValue.data />
45 <#assign startDate = sDateRaw?datetime("yyyy-MM-dd'T'HH:mm:ss'Z'")?date />
46 <#elseif field.name == "endDate" && field.contentFieldValue?has_content && field.contentFieldValue.data?has_content>
47 <#assign eDateRaw = field.contentFieldValue.data />
48 <#assign endDate = eDateRaw?datetime("yyyy-MM-dd'T'HH:mm:ss'Z'")?date />
49 <#elseif field.name == "place" && field.contentFieldValue?has_content>
50 <#assign place = field.contentFieldValue.data />
51 <#elseif field.name == "startHour" && field.contentFieldValue?has_content>
52 <#assign startHour = field.contentFieldValue.data />
53 <#elseif field.name == "endHour" && field.contentFieldValue?has_content>
54 <#assign endHour = field.contentFieldValue.data />
55 <#elseif field.name == "price" && field.contentFieldValue?has_content>
56 <#assign priceValue = field.contentFieldValue.data />
57 <#elseif field.name == "isEuskera" && field.contentFieldValue?has_content>
58 <#assign isEuskera = field.contentFieldValue.data />
59 <#elseif field.name == "estadoPrecio" && field.contentFieldValue?has_content>
60 <#assign estadoPrecioRaw = (field.contentFieldValue.data?string?lower_case)!"" />
61 </#if>
62 </#list>
63
64 <#-- 2. LÓGICA DE PRECIO / ESTADO -->
65 <#assign precioAMostrar = priceValue />
66 <#if estadoPrecioRaw?contains("agotado") || estadoPrecioRaw?contains("agortua")>
67 <#assign precioAMostrar = (locale == "eu_ES")?then("Agortua", "Agotado") />
68 <#elseif estadoPrecioRaw?contains("gratuito") || estadoPrecioRaw?contains("doan")>
69 <#assign precioAMostrar = (locale == "eu_ES")?then("Doan", "Gratuito") />
70 <#elseif estadoPrecioRaw?contains("inscrip") || estadoPrecioRaw?contains("izen-ematea")>
71 <#assign precioAMostrar = (locale == "eu_ES")?then("Izen-ematea", "Inscripción") />
72 </#if>
73
74 <#-- LÓGICA DE EVENTO PASADO -->
75 <#assign isPast = false />
76 <#assign dateToCompareStr = "" />
77
78 <#if eDateRaw?has_content>
79 <#assign dateToCompareStr = eDateRaw />
80 <#elseif sDateRaw?has_content>
81 <#assign dateToCompareStr = sDateRaw />
82 </#if>
83
84 <#if dateToCompareStr?has_content && dateToCompareStr?length gte 10>
85 <#assign dateNum = dateToCompareStr?substring(0, 10)?replace("-", "")?number />
86 <#if dateNum lt todayNum>
87 <#assign isPast = true />
88 </#if>
89 </#if>
90
91 <div class="col col-lg-4 col-sm-12 col-12 col-md-4 mb-4">
92 <div class="dtik-event-card h-100">
93 <div class="dtik-event-card__image">
94 <img src="${image}" alt="${alt}" />
95 </div>
96 <div class="dtik-event-card__content">
97 <div class="dtik-event-card__extras">
98 <#-- ETIQUETA DE EVENTO PASADO -->
99 <#if isPast>
100 <div class="dtik-event_past-badge">
101 <svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
102 <path d="M4.42052 17.9167C3.99955 17.9167 3.64323 17.7708 3.35156 17.4792C3.0599 17.1875 2.91406 16.8312 2.91406 16.4102V5.25647C2.91406 4.8355 3.0599 4.47918 3.35156 4.18751C3.64323 3.89585 3.99955 3.75001 4.42052 3.75001H5.57427V1.9873H6.85635V3.75001H13.1705V1.9873H14.4205V3.75001H15.5743C15.9952 3.75001 16.3516 3.89585 16.6432 4.18751C16.9349 4.47918 17.0807 4.8355 17.0807 5.25647V16.4102C17.0807 16.8312 16.9349 17.1875 16.6432 17.4792C16.3516 17.7708 15.9952 17.9167 15.5743 17.9167H4.42052ZM4.42052 16.6667H15.5743C15.6384 16.6667 15.6972 16.6399 15.7505 16.5865C15.804 16.5331 15.8307 16.4744 15.8307 16.4102V8.5898H4.16406V16.4102C4.16406 16.4744 4.1908 16.5331 4.24427 16.5865C4.2976 16.6399 4.35635 16.6667 4.42052 16.6667ZM4.16406 7.3398H15.8307V5.25647C15.8307 5.1923 15.804 5.13355 15.7505 5.08022C15.6972 5.02675 15.6384 5.00001 15.5743 5.00001H4.42052C4.35635 5.00001 4.2976 5.02675 4.24427 5.08022C4.1908 5.13355 4.16406 5.1923 4.16406 5.25647V7.3398Z" fill="#0A23D0"/>
103 <path d="M8 12.5L9.5 14L13 10.5" stroke="#0A23D0" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
104 </svg>
105 <span class="dtik-event_past-badge_text">${msgPasado}</span>
106 </div>
107 </#if>
108
109 <#-- ETIQUETA SUPERIOR EUSKARAZ -->
110 <#if isEuskera?has_content && isEuskera == "true">
111 <div class="dtik-event_euskaraz-badge">
112 <img src="/documents/d/guest/icon-euskaraz?imagePreview=1" alt="${languageUtil.get(locale, "Euskaraz")}"/>
113 </div>
114 </#if>
115 </div>
116
117
118 <div class="dtik-event-card__content__category">
119 <#if event.taxonomyCategoryBriefs?has_content>
120 <#assign firstMatchedCategory = true />
121 <#list event.taxonomyCategoryBriefs as category>
122 <#assign catRest = restClient.get("/headless-admin-taxonomy/v1.0/taxonomy-categories/" + category.taxonomyCategoryId) />
123 <#if catRest?? && (catRest.parentTaxonomyVocabulary.name == "Ekitaldi-mota" || catRest.parentTaxonomyVocabulary.name == "Tipo de evento" || catRest.parentTaxonomyVocabulary.name == "Type d'événement" || catRest.parentTaxonomyVocabulary.name == "Event type")>
124 <#if !firstMatchedCategory>, </#if>${category.taxonomyCategoryName}
125 <#assign firstMatchedCategory = false />
126 </#if>
127 </#list>
128 </#if>
129 </div>
130 <div class="dtik-event-card__content__title">
131 ${event.title}
132 </div>
133 <div class="dtik-event-card__info">
134 <#if startDate?has_content>
135 <div class="dtik-event-card__content__item">
136 <img class="dtik-event-card__content__item__icon" src="/documents/d/guest/icon-calendar?imagePreview=1" alt="calendar"/>
137 <span class="dtik-event-card__content__item__text m-bold">${startDate} <#if endDate?has_content>- ${endDate}</#if></span>
138 </div>
139 </#if>
140 <#if place?has_content>
141 <div class="dtik-event-card__content__item">
142 <img class="dtik-event-card__content__item__icon" src="/documents/d/guest/icon-location?imagePreview=1" alt="location"/>
143 <span class="dtik-event-card__content__item__text m-bold">${place}</span>
144 </div>
145 </#if>
146 <#if startHour?has_content>
147 <div class="dtik-event-card__content__item">
148 <img class="dtik-event-card__content__item__icon" src="/documents/d/guest/icon-clock?imagePreview=1" alt="clock"/>
149 <span class="dtik-event-card__content__item__text m-bold">${startHour} <#if endHour?has_content>- ${endHour}</#if></span>
150 </div>
151 </#if>
152 <#if precioAMostrar?has_content>
153 <div class="dtik-event-card__content__item">
154 <img class="dtik-event-card__content__item__icon" src="/documents/d/guest/icon-money?imagePreview=1" alt="money"/>
155 <span class="dtik-event-card__content__item__text m-bold">${precioAMostrar}</span>
156 </div>
157 </#if>
158 <#if isEuskera?has_content && isEuskera == "true">
159 <div class="dtik-event-card__content__item">
160 <img class="dtik-event-card__content__item__icon" src="/documents/d/guest/icon-euskaraz?imagePreview=1" alt="${languageUtil.get(locale, "Euskaraz")}"/>
161 <span class="dtik-event-card__content__item__text m-bold">${languageUtil.get(locale, "Euskaraz")}</span>
162 </div>
163 </#if>
164 <div class="pt-3 mt-3 mt-md-auto d-print-none">
165 <div class="dtik-link">
166 <a class="dtik-link__text m-primario m-title--link" href="${entry.viewURL?split('?')[0]?replace('/w/', '/agenda/')}" >${languageUtil.get(locale, "read-more")}</a>
167 <span class="dtik-link__icon">
168 <img class="dtik-link__icon--arrow" src="/documents/d/guest/arrow-right" />
169 </span>
170 </div>
171 </div>
172 </div>
173 </div>
174 </div>
175 </div>
176 </#if>
177 </#list>
178</div>
179
180<script>
181 var filtrosAplicados = document.getElementById("filtrosAplicados");
182 filtrosAplicados.innerHTML = "";
183 var filtrosSelect = document.querySelectorAll("select.dtik-input-group__select.custom-select");
184 var countFilter = 0;
185 for(var i = 0; i < filtrosSelect.length; i++) {
186 var text = filtrosSelect[i].options[filtrosSelect[i].selectedIndex].textContent;
187
188 if(filtrosSelect[i].selectedIndex > 0) {
189 var spanClip = document.createElement("span");
190 spanClip.classList.add("dtik-info-clip");
191
192 var spanClipText = document.createElement("span");
193 spanClipText.classList.add("dtik-info-clip__text");
194 spanClipText.style.lineHeight = "0";
195 spanClipText.innerText = text;
196
197 spanClip.append(spanClipText);
198
199 if(filtrosSelect[i].selectedIndex > 0)
200 spanClip.innerHTML += '<svg onclick="deleteFilter(' + i + ')" class="dtik-info-clip__icon" width="13" height="13" viewBox="0 0 10 11" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1 10.5L0 9.5L4 5.5L0 1.5L1 0.5L5 4.5L9 0.5L10 1.5L6 5.5L10 9.5L9 10.5L5 6.5L1 10.5Z" fill="#12243A"></path></svg>';
201
202 filtrosAplicados.append(spanClip);
203 countFilter++;
204 }
205 }
206
207 if(countFilter == 0) {
208 var spanClip = document.createElement("span");
209 spanClip.classList.add("dtik-info-clip");
210
211 var spanClipText = document.createElement("span");
212 spanClipText.classList.add("dtik-info-clip__text");
213 spanClipText.innerText = '${languageUtil.get(locale, "all")}';
214
215 spanClip.append(spanClipText);
216
217 filtrosAplicados.append(spanClip);
218 }
219
220 function deleteFilter(i) {
221 var filtros = document.querySelectorAll("select.dtik-input-group__select.custom-select");
222 filtros[i].value = filtros[i].options[0].value;
223 var event = new Event('change');
224 filtros[i].dispatchEvent(event);
225 document.querySelector(".searchEvents").click();
226 }
227</script>