Bus de Cadiz à
90384, au meilleur prix
Horaires et arrêts de bus
Comment se fait le trajet de ##origin## à ##destination## ?
Les bus de ##origin## à ##destination## ont une fréquence de ##times## services quotidiens et la durée du voyage est de ##durationMin##. Vous pouvez réserver vos billets pour ##destination## à partir de seulement ##Precio##€
Les bus de ##origin## à ##destination## ont une fréquence de ##times## services quotidiens et la durée du voyage est comprise entre ##durationMin## pour le service le plus direct et ##durationMax## heures pour celui avec le plus d’arrêts. Vous pouvez réserver vos billets pour ##destination## à partir de seulement ##Precio##€
|
##Duracion## |
|
|
##firstBus## |
|
|
##lastBus## |
|
##Distancia##Km |
|
##times## bus par jour |
788
90384
Meilleurs prix et jours pour voyager de ##origin## à ##destination##
Dans cette section, vous pourrez consulter les meilleurs prix et jours pour voyager de ##origin## à ##destination##. Trouvez facilement l'option la plus économique selon le jour de la semaine.
Dans les prochains mois
Gares
##origin##
##destination##
Questions fréquentes
The following has evaluated to null or missing:
==> busInformation.destination [in template "10157#10197#77738740" at line 103, column 79]
----
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: #assign titulo = titulo?replace("[des... [in template "10157#10197#77738740" at line 103, column 33]
----
1<#assign originId = Origen.route_id_origin.getData() />
2<#assign destinationId = Destino.route_id_destination.getData() />
3<#assign price = route_minimum_price.getData() />
4<#assign distance = route_distance.getData() />
5
6
7<#assign errorService = false>
8<#attempt>
9 <#assign busInformation = (restClient.get("/Alsa-SEO-rest/v1.0/bus-information?languageId=${themeDisplay.getLanguageId()}&originId=${originId}&destinationId=${destinationId}") )>
10<#recover>
11 <#assign errorService = true>
12</#attempt>
13<#if busInformation.status?? && busInformation.status =="INTERNAL_SERVER_ERROR" && busInformation?size < 3 >
14 <#assign errorService = true>
15
16</#if>
17
18 <#assign journalArticleId = .vars['reserved-article-id'].data>
19 <#assign journalArticleResourceLocalServiceUtil = serviceLocator.findService("com.liferay.journal.service.JournalArticleResourceLocalService")>
20 <#assign assetCategoryLocalServiceUtil = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")>
21 <#assign articleResourcePK = journalArticleResourceLocalServiceUtil.getArticleResourcePrimKey(groupId, journalArticleId)/>
22 <#assign categoryList=assetCategoryLocalServiceUtil.getCategories("com.liferay.journal.model.JournalArticle",articleResourcePK) >
23 <#assign journalArticle = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")>
24 <#assign encontrado = false>
25 <#assign articles = [] >
26 <#list categoryList as category>
27 <#if !encontrado>
28 <#assign urlTitle = "seo_faqs_" + category.getName()?lower_case>
29 <#attempt>
30 <#assign article = journalArticle.getArticleByUrlTitle(groupId, urlTitle)!>
31 <#if article??>
32 <#assign articles += [article]>
33 </#if>
34 <#recover>
35 </#attempt>
36
37 </#if>
38 </#list>
39
40 <#attempt>
41<#assign articleGenerico = journalArticle.getArticleByUrlTitle(groupId, "seo_faqs_genericas")!>
42 <#if articleGenerico??>
43 <#assign articles += [articleGenerico]>
44 </#if>
45 <#recover>
46 </#attempt>
47
48 <#assign faqs = []>
49 <#list articles as article>
50 <#assign document = saxReaderUtil.read(article.getContentByLocale(localeUtil.toLanguageId(themeDisplay.locale)))>
51 <#assign rootElement = document.getRootElement() />
52
53
54
55<#list rootElement.elements() as dinamicElement>
56
57 <#-- Inicializamos variables vacías para cada FAQ -->
58 <#assign titulo = "">
59 <#assign valorEvaluar = "">
60 <#assign respuesta = "">
61 <#assign respuestaGenerica = "">
62 <#assign respuestaSupra = "">
63 <#assign respuestaComfort = "">
64 <#assign respuestaSi = "">
65 <#assign respuestaNo = "">
66
67 <#foreach dinamicElementFill in dinamicElement.elements()>
68 <#assign fieldRef = dinamicElementFill.attributeValue("field-reference")>
69 <#if fieldRef == "tituloFaq">
70 <#assign titulo = dinamicElementFill.element("dynamic-content").getText()>
71 </#if>
72 <#if fieldRef == "valorEvaluar">
73 <#assign valorEvaluar = dinamicElementFill.element("dynamic-content").getText()>
74 </#if>
75 <#if fieldRef == "respuestaGenerica">
76 <#assign respuestaGenerica = dinamicElementFill.element("dynamic-content").getText()>
77 </#if>
78 <#if valorEvaluar == "tipoServcio" || valorEvaluar == "tipoServicioUltimo">
79 <#if fieldRef == "respuestaConfort">
80 <#assign respuestaComfort = dinamicElementFill.element("dynamic-content").getText()>
81 </#if>
82 <#if fieldRef == "respuestaSupra">
83 <#assign respuestaSupra = dinamicElementFill.element("dynamic-content").getText()>
84 </#if>
85 </#if>
86 <#if valorEvaluar == "Opción45855620" || valorEvaluar == "nocturno">
87
88 <#if fieldRef == "respuestaSi">
89 <#assign respuestaSi = dinamicElementFill.element("dynamic-content").getText()>
90
91 </#if>
92 <#if fieldRef == "respuestaNo">
93 <#assign respuestaNo = dinamicElementFill.element("dynamic-content").getText()>
94
95 </#if>
96 </#if>
97 </#foreach>
98
99 <#if !errorService>
100 <#if titulo?has_content || valorEvaluar?has_content || respuestaGenerica?has_content>
101 <#-- reemplazamos las variables en titulo -->
102 <#assign titulo = titulo?replace("[destino]", busInformation.destination)?replace("[origen]", busInformation.origin) />
103
104 <#-- reemplazamos las variables en respuestaGenericas -->
105 <#assign estacionesDesFormateadas = "">
106 <#assign estacionesOriFormateadas = "">
107 <#if busInformation.lastStopsOnItinerary??>
108 <#list busInformation.lastStopsOnItinerary as estacion>
109 <#assign estacionesDesFormateadas += "- ${estacion} <br>">
110 </#list>
111 <#list busInformation.firstStopsOnItinerary as estacion>
112 <#assign estacionesOriFormateadas += "- ${estacion} <br>">
113 </#list>
114 <#assign respuestaGenerica = respuestaGenerica?replace("[destino]", busInformation.destination)?replace("[origen]",
115 busInformation.origin)?replace("[numeroServicios]", busInformation.times)?replace("[tiempoViaje]", busInformation.durationMin)
116 ?replace("[estacionesDestino]", estacionesDesFormateadas)?replace("[estacionesOrigen]", estacionesOriFormateadas)
117 ?replace("[price]", price)?replace("[distance]", distance) />
118 </#if>
119
120 <#if valorEvaluar == "tipoServcio" >
121
122 <#-- reemplazamos las variables en respuestaSupra -->
123 <#if busInformation.firstBusSupra?has_content>
124 <#assign respuestaSupra = respuestaSupra?replace("[destino]", busInformation.destination)?replace("[origen]",
125 busInformation.origin)?replace("[tipoServicio]", busInformation.firstBusSupra.serviceType)
126 ?replace("[horaPrimerAutoBusSupra]", busInformation.firstBusSupra.firstBusTime)
127 ?replace("[estacionOrigen]", busInformation.firstBusSupra.originStation)
128 ?replace("[estacionDestino]", busInformation.firstBusSupra.destinationStation)
129 ?replace("[horaLlegada]", busInformation.firstBusSupra.arrivalTime)/>
130 <#else>
131 <#assign respuestaSupra = "" />
132 </#if>
133
134 <#-- reemplazamos las variables en respuestaComfort -->
135 <#if busInformation.firstBusComfort?has_content>
136 <#assign respuestaComfort = respuestaComfort?replace("[destino]", busInformation.destination)?replace("[origen]",
137 busInformation.origin)?replace("[tipoServicio]", busInformation.firstBusComfort.serviceType)
138 ?replace("[horaPrimerAutoBusConfort]", busInformation.firstBusComfort.firstBusTime)
139 ?replace("[estacionOrigen]", busInformation.firstBusComfort.originStation)
140 ?replace("[estacionDestino]", busInformation.firstBusComfort.destinationStation)
141 ?replace("[horaLlegada]", busInformation.firstBusComfort.arrivalTime)/>
142 <#else>
143 <#assign respuestaComfort = "" />
144 </#if>
145 </#if>
146 <#if valorEvaluar == "tipoServicioUltimo" >
147
148 <#-- reemplazamos las variables en respuestaSupra ultimo bus-->
149 <#if busInformation.lastBusSupra?has_content>
150 <#assign respuestaSupra = respuestaSupra?replace("[destino]", busInformation.destination)?replace("[origen]",
151 busInformation.origin)?replace("[tipoServicio]", busInformation.lastBusSupra.serviceType)
152 ?replace("[horaPrimerAutoBusSupra]", busInformation.lastBusSupra.firstBusTime)
153 ?replace("[estacionOrigen]", busInformation.lastBusSupra.originStation)
154 ?replace("[estacionDestino]", busInformation.lastBusSupra.destinationStation)
155 ?replace("[horaLlegada]", busInformation.lastBusSupra.arrivalTime)/>
156 <#else>
157 <#assign respuestaSupra = "" />
158 </#if>
159
160 <#-- reemplazamos las variables en respuestaComfort ultimo bus-->
161 <#if busInformation.lastBusComfort?has_content>
162 <#assign respuestaComfort = respuestaComfort?replace("[destino]", busInformation.destination)?replace("[origen]",
163 busInformation.origin)?replace("[tipoServicio]", busInformation.lastBusComfort.serviceType)
164 ?replace("[horaPrimerAutoBusConfort]", busInformation.lastBusComfort.firstBusTime)
165 ?replace("[estacionOrigen]", busInformation.lastBusComfort.originStation)
166 ?replace("[estacionDestino]", busInformation.lastBusComfort.destinationStation)
167 ?replace("[horaLlegada]", busInformation.lastBusComfort.arrivalTime)/>
168 <#else>
169 <#assign respuestaComfort = "" />
170 </#if>
171</#if>
172 <#if valorEvaluar == "Opción45855620" >
173
174 <#if busInformation.travelEveryDay?has_content>
175 <#if busInformation.travelEveryDay == "S">
176 <#assign respuestaSi = respuestaSi?replace("[destino]", busInformation.destination)?replace("[origen]",
177 busInformation.origin)?replace("[numeroServicios]", busInformation.times)?replace("[tiempoViaje]", busInformation.durationMin) />
178 <#assign respuestaNo = "" />
179 <#else>
180 <#assign respuestaNo = respuestaNo?replace("[destino]", busInformation.destination)?replace("[origen]",
181 busInformation.origin)?replace("[numeroServicios]", busInformation.times)?replace("[tiempoViaje]", busInformation.durationMin) />
182 <#assign respuestaSi = "" />
183
184 </#if>
185 </#if>
186 </#if>
187 <#if valorEvaluar == "nocturno" >
188 <#if busInformation.firstNightService?has_content >
189 <#assign respuestaSi = respuestaSi?replace("[destino]", busInformation.destination)?replace("[origen]",
190 busInformation.origin)?replace("[numeroServicios]", busInformation.times)?replace("[tipoServicio]", busInformation.firstNightService.serviceType)
191 ?replace("[horaPrimerAutoBusNocturno]", busInformation.firstNightService.firstBusTime)
192 ?replace("[estacionOrigen]", busInformation.firstNightService.originStation)
193 ?replace("[estacionDestino]", busInformation.firstNightService.destinationStation)
194 ?replace("[horaLlegada]", busInformation.firstNightService.arrivalTime)/>
195 <#assign respuestaNo = "" />
196 <#else>
197 <#if busInformation.lastBusComfort?has_content>
198 <#assign respuestaNo = respuestaNo?replace("[destino]", busInformation.destination)?replace("[origen]",
199 busInformation.origin)?replace("[numeroServicios]", busInformation.times)?replace("[tipoServicio]", busInformation.lastBusComfort.serviceType)
200 ?replace("[horaPrimerAutoBusConfort]", busInformation.lastBusComfort.firstBusTime)
201 ?replace("[estacionOrigen]", busInformation.lastBusComfort.originStation)
202 ?replace("[estacionDestino]", busInformation.lastBusComfort.destinationStation)
203 ?replace("[horaLlegada]", busInformation.lastBusComfort.arrivalTime)/>
204 <#assign respuestaSi = "" />
205 <#else>
206 <#assign respuestaNo = respuestaNo/>
207 <#assign respuestaSi = "" />
208 </#if>
209 </#if>
210 </#if>
211 <#if (respuestaGenerica!="" || respuestaComfort!="" || respuestaSupra!="" || respuestaSi!="" || respuestaNo!="") >
212
213 <#assign faqs = faqs + [{"titulo": titulo, "valorEvaluar": valorEvaluar, "respuestaGenerica":
214 respuestaGenerica, "respuestaComfort": respuestaComfort, "respuestaSupra": respuestaSupra,
215 "respuestaSi": respuestaSi, "respuestaNo": respuestaNo}]>
216</#if>
217 </#if>
218 <#else>
219 <#if !titulo?contains("[") && (respuestaGenerica!="" || respuestaComfort!="" || respuestaSupra!="" || respuestaSi!="" || respuestaNo!="") >
220 <#assign faqs = faqs + [{"titulo": titulo, "valorEvaluar": valorEvaluar, "respuestaGenerica":
221 respuestaGenerica, "respuestaComfort": respuestaComfort, "respuestaSupra": respuestaSupra,
222 "respuestaSi": respuestaSi, "respuestaNo": respuestaNo}]>
223 </#if>
224 </#if>
225
226</#list>
227 </#list>
228
229<div class="dropdown2020 c-dropdown-with-info container-fluid">
230<#assign idAleatorioInicial = .now?long />
231 <div class="preguntas-frecuentes container">
232 <div id="accordion${idAleatorioInicial}" class="panel-group" role="tablist" aria-multiselectable="true">
233 <#if faqs?has_content>
234 <#assign idAleatorio = .now?long />
235 <#list faqs as faq>
236 <div class="panel panel-default">
237 <div class="panel-heading accordian" role="tab" id="heading_${idAleatorio}" aria-selected="false" aria-controls="collapse_${idAleatorio}"
238 aria-expanded="false" tabindex="-1">
239 <div class="pregunta-faq">
240 <a role="button" data-toggle="collapse" data-parent="#accordion${idAleatorioInicial}"
241 href="#collapse_${idAleatorio}" title="${faq.titulo}" aria-expanded="false" aria-controls="collapse_${idAleatorio}" class="collapsed">
242 <span class="container-displays-blinds h3">
243 ${faq.titulo}
244 </span>
245 </a>
246 </div>
247 </div>
248 <div id="collapse_${idAleatorio}" class="panel-collapse collapse" role="tabpanel" aria-labelledby="heading_${idAleatorio}" aria-hidden="true" aria-expanded="false">
249 <div class="contenido-preguntas-frecuentes" tabindex="0">
250 <#if faq.valorEvaluar == "ninguno" >
251 ${faq.respuestaGenerica}
252 <#elseif faq.valorEvaluar == "tipoServcio">
253 ${faq.respuestaSupra}
254 ${faq.respuestaComfort}
255 <#elseif faq.valorEvaluar == "tipoServicioUltimo">
256 ${faq.respuestaSupra}
257 ${faq.respuestaComfort}
258 <#elseif faq.valorEvaluar == "Opción45855620">
259 ${faq.respuestaSi}
260 ${faq.respuestaNo}
261 <#elseif faq.valorEvaluar == "nocturno">
262 ${faq.respuestaSi}
263 ${faq.respuestaNo}
264 </#if>
265 </div>
266 </div>
267 <#assign idAleatorio-- />
268 </div>
269 </#list>
270 </#if>
271 </div>
272 </div>
273</div>
274
275
276<#if faqs?has_content>
277<script type="application/ld+json">
278<@compress single_line=true>
279{
280 "@context": "https://schema.org",
281 "@type": "FAQPage",
282 "mainEntity": [
283 <#list faqs as faq>
284 <#-- Determinar qué respuesta usar -->
285 <#assign respuesta = "">
286 <#if faq.respuestaGenerica?has_content>
287 <#assign respuesta = faq.respuestaGenerica>
288 <#elseif faq.respuestaComfort?has_content>
289 <#assign respuesta = faq.respuestaComfort>
290 <#elseif faq.respuestaSupra?has_content>
291 <#assign respuesta = faq.respuestaSupra>
292 <#elseif faq.respuestaSi?has_content>
293 <#assign respuesta = faq.respuestaSi>
294 <#elseif faq.respuestaNo?has_content>
295 <#assign respuesta = faq.respuestaNo>
296 </#if>
297
298 <#assign cleaned_answer = respuesta?replace("'", "’")>
299 <#assign cleaned_question = faq.titulo?replace("'", "’")>
300 {
301 "@type": "Question",
302 "name": "${cleaned_question?json_string}",
303 "acceptedAnswer": {
304 "@type": "Answer",
305 "text": "${cleaned_answer?json_string}"
306 }
307 }<#if faq_has_next>,</#if>
308 </#list>
309 ]
310}
311</@compress>
312</script>
313</#if>
Español
Català
Galego
English
Italiano
Português
Euskara
Deutsch
