Find bus tickets Almuñecar to
Nerja, at the best price
Bus schedules and stops
What is the journey from ##origin## to ##destination## like?
Buses from ##origin## to ##destination## run ##times## times per day, and the journey takes ##durationMin##. You can book your tickets to ##destination## from just ##Precio##€.
Buses from ##origin## to ##destination## run ##times## times per day. The journey duration ranges from ##durationMin## for the fastest service to ##durationMax## hours for the service with the most stops. You can book your tickets to ##destination## from just ##Precio##€.
|
##Duracion## |
|
|
##firstBus## |
|
|
##lastBus## |
|
##Distancia##Km |
|
##times## buses daily |
1478
454
Best prices and days to travel from ##origin## to ##destination##
In this section, you can check the best prices and days to travel from ##origin## to ##destination##. Easily find the most economical option depending on the day of the week.
In the coming months
Stations
##origin##
##destination##
Advantages of travelling with Alsa
Comfort
Buses equipped with Wi-Fi, on-board entertainment, footrests, WC, and the best safety systems.
Best price
Our trips are the most economical way to get around, with the best price guaranteed.
Environmental efficiency
Travelling by bus is the most sustainable way to travel, improving our carbon footprint.
Frequently Asked Questions
For "." left-hand operand: Expected a hash, but this has evaluated to a string (wrapper: f.t.SimpleScalar):
==> busInformation [in template "10157#10197#77738740" at line 14, column 6]
----
FTL stack trace ("~" means nesting-related):
- Failed at: #if busInformation.status?? && busInf... [in template "10157#10197#77738740" at line 14, column 1]
----
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">
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 <#list busInformation.lastStopsOnItinerary as estacion>
108 <#assign estacionesDesFormateadas += "- ${estacion} <br>">
109 </#list>
110 <#list busInformation.firstStopsOnItinerary as estacion>
111 <#assign estacionesOriFormateadas += "- ${estacion} <br>">
112 </#list>
113 <#assign respuestaGenerica = respuestaGenerica?replace("[destino]", busInformation.destination)?replace("[origen]",
114 busInformation.origin)?replace("[numeroServicios]", busInformation.times)?replace("[tiempoViaje]", busInformation.durationMin)
115 ?replace("[estacionesDestino]", estacionesDesFormateadas)?replace("[estacionesOrigen]", estacionesOriFormateadas)
116 ?replace("[price]", price)?replace("[distance]", distance) />
117
118 <#if valorEvaluar == "tipoServcio" >
119
120 <#-- reemplazamos las variables en respuestaSupra -->
121 <#if busInformation.firstBusSupra?has_content>
122 <#assign respuestaSupra = respuestaSupra?replace("[destino]", busInformation.destination)?replace("[origen]",
123 busInformation.origin)?replace("[tipoServicio]", busInformation.firstBusSupra.serviceType)
124 ?replace("[horaPrimerAutoBusSupra]", busInformation.firstBusSupra.firstBusTime)
125 ?replace("[estacionOrigen]", busInformation.firstBusSupra.originStation)
126 ?replace("[estacionDestino]", busInformation.firstBusSupra.destinationStation)
127 ?replace("[horaLlegada]", busInformation.firstBusSupra.arrivalTime)/>
128 <#else>
129 <#assign respuestaSupra = "" />
130 </#if>
131
132 <#-- reemplazamos las variables en respuestaComfort -->
133 <#if busInformation.firstBusComfort?has_content>
134 <#assign respuestaComfort = respuestaComfort?replace("[destino]", busInformation.destination)?replace("[origen]",
135 busInformation.origin)?replace("[tipoServicio]", busInformation.firstBusComfort.serviceType)
136 ?replace("[horaPrimerAutoBusConfort]", busInformation.firstBusComfort.firstBusTime)
137 ?replace("[estacionOrigen]", busInformation.firstBusComfort.originStation)
138 ?replace("[estacionDestino]", busInformation.firstBusComfort.destinationStation)
139 ?replace("[horaLlegada]", busInformation.firstBusComfort.arrivalTime)/>
140 <#else>
141 <#assign respuestaComfort = "" />
142 </#if>
143 </#if>
144 <#if valorEvaluar == "tipoServicioUltimo" >
145
146 <#-- reemplazamos las variables en respuestaSupra ultimo bus-->
147 <#if busInformation.lastBusSupra?has_content>
148 <#assign respuestaSupra = respuestaSupra?replace("[destino]", busInformation.destination)?replace("[origen]",
149 busInformation.origin)?replace("[tipoServicio]", busInformation.lastBusSupra.serviceType)
150 ?replace("[horaPrimerAutoBusSupra]", busInformation.lastBusSupra.firstBusTime)
151 ?replace("[estacionOrigen]", busInformation.lastBusSupra.originStation)
152 ?replace("[estacionDestino]", busInformation.lastBusSupra.destinationStation)
153 ?replace("[horaLlegada]", busInformation.lastBusSupra.arrivalTime)/>
154 <#else>
155 <#assign respuestaSupra = "" />
156 </#if>
157
158 <#-- reemplazamos las variables en respuestaComfort ultimo bus-->
159 <#if busInformation.lastBusComfort?has_content>
160 <#assign respuestaComfort = respuestaComfort?replace("[destino]", busInformation.destination)?replace("[origen]",
161 busInformation.origin)?replace("[tipoServicio]", busInformation.lastBusComfort.serviceType)
162 ?replace("[horaPrimerAutoBusConfort]", busInformation.lastBusComfort.firstBusTime)
163 ?replace("[estacionOrigen]", busInformation.lastBusComfort.originStation)
164 ?replace("[estacionDestino]", busInformation.lastBusComfort.destinationStation)
165 ?replace("[horaLlegada]", busInformation.lastBusComfort.arrivalTime)/>
166 <#else>
167 <#assign respuestaComfort = "" />
168 </#if>
169</#if>
170 <#if valorEvaluar == "Opción45855620" >
171
172 <#if busInformation.travelEveryDay == "S">
173 <#assign respuestaSi = respuestaSi?replace("[destino]", busInformation.destination)?replace("[origen]",
174 busInformation.origin)?replace("[numeroServicios]", busInformation.times)?replace("[tiempoViaje]", busInformation.durationMin) />
175 <#assign respuestaNo = "" />
176 <#else>
177 <#assign respuestaNo = respuestaNo?replace("[destino]", busInformation.destination)?replace("[origen]",
178 busInformation.origin)?replace("[numeroServicios]", busInformation.times)?replace("[tiempoViaje]", busInformation.durationMin) />
179 <#assign respuestaSi = "" />
180
181 </#if>
182 </#if>
183 <#if valorEvaluar == "nocturno" >
184 <#if busInformation.firstNightService?has_content >
185 <#assign respuestaSi = respuestaSi?replace("[destino]", busInformation.destination)?replace("[origen]",
186 busInformation.origin)?replace("[numeroServicios]", busInformation.times)?replace("[tipoServicio]", busInformation.firstNightService.serviceType)
187 ?replace("[horaPrimerAutoBusNocturno]", busInformation.firstNightService.firstBusTime)
188 ?replace("[estacionOrigen]", busInformation.firstNightService.originStation)
189 ?replace("[estacionDestino]", busInformation.firstNightService.destinationStation)
190 ?replace("[horaLlegada]", busInformation.firstNightService.arrivalTime)/>
191 <#assign respuestaNo = "" />
192 <#else>
193 <#if busInformation.lastBusComfort?has_content>
194 <#assign respuestaNo = respuestaNo?replace("[destino]", busInformation.destination)?replace("[origen]",
195 busInformation.origin)?replace("[numeroServicios]", busInformation.times)?replace("[tipoServicio]", busInformation.lastBusComfort.serviceType)
196 ?replace("[horaPrimerAutoBusConfort]", busInformation.lastBusComfort.firstBusTime)
197 ?replace("[estacionOrigen]", busInformation.lastBusComfort.originStation)
198 ?replace("[estacionDestino]", busInformation.lastBusComfort.destinationStation)
199 ?replace("[horaLlegada]", busInformation.lastBusComfort.arrivalTime)/>
200 <#assign respuestaSi = "" />
201 <#else>
202 <#assign respuestaNo = respuestaNo/>
203 <#assign respuestaSi = "" />
204 </#if>
205 </#if>
206 </#if>
207 <#if (respuestaGenerica!="" || respuestaComfort!="" || respuestaSupra!="" || respuestaSi!="" || respuestaNo!="") >
208
209 <#assign faqs = faqs + [{"titulo": titulo, "valorEvaluar": valorEvaluar, "respuestaGenerica":
210 respuestaGenerica, "respuestaComfort": respuestaComfort, "respuestaSupra": respuestaSupra,
211 "respuestaSi": respuestaSi, "respuestaNo": respuestaNo}]>
212</#if>
213 </#if>
214 <#else>
215 <#if !titulo?contains("[") && (respuestaGenerica!="" || respuestaComfort!="" || respuestaSupra!="" || respuestaSi!="" || respuestaNo!="") >
216 <#assign faqs = faqs + [{"titulo": titulo, "valorEvaluar": valorEvaluar, "respuestaGenerica":
217 respuestaGenerica, "respuestaComfort": respuestaComfort, "respuestaSupra": respuestaSupra,
218 "respuestaSi": respuestaSi, "respuestaNo": respuestaNo}]>
219 </#if>
220 </#if>
221
222</#list>
223 </#list>
224
225<div class="dropdown2020 c-dropdown-with-info container-fluid">
226<#assign idAleatorioInicial = .now?long />
227 <div class="preguntas-frecuentes container">
228 <div id="accordion${idAleatorioInicial}" class="panel-group" role="tablist" aria-multiselectable="true">
229 <#if faqs?has_content>
230 <#assign idAleatorio = .now?long />
231 <#list faqs as faq>
232 <div class="panel panel-default">
233 <div class="panel-heading accordian" role="tab" id="heading_${idAleatorio}" aria-selected="false" aria-controls="collapse_${idAleatorio}"
234 aria-expanded="false" tabindex="-1">
235 <div class="pregunta-faq">
236 <a role="button" data-toggle="collapse" data-parent="#accordion${idAleatorioInicial}"
237 href="#collapse_${idAleatorio}" title="${faq.titulo}" aria-expanded="false" aria-controls="collapse_${idAleatorio}" class="collapsed">
238 <span class="container-displays-blinds h3">
239 ${faq.titulo}
240 </span>
241 </a>
242 </div>
243 </div>
244 <div id="collapse_${idAleatorio}" class="panel-collapse collapse" role="tabpanel" aria-labelledby="heading_${idAleatorio}" aria-hidden="true" aria-expanded="false">
245 <div class="contenido-preguntas-frecuentes" tabindex="0">
246 <#if faq.valorEvaluar == "ninguno" >
247 ${faq.respuestaGenerica}
248 <#elseif faq.valorEvaluar == "tipoServcio">
249 ${faq.respuestaSupra}
250 ${faq.respuestaComfort}
251 <#elseif faq.valorEvaluar == "tipoServicioUltimo">
252 ${faq.respuestaSupra}
253 ${faq.respuestaComfort}
254 <#elseif faq.valorEvaluar == "Opción45855620">
255 ${faq.respuestaSi}
256 ${faq.respuestaNo}
257 <#elseif faq.valorEvaluar == "nocturno">
258 ${faq.respuestaSi}
259 ${faq.respuestaNo}
260 </#if>
261 </div>
262 </div>
263 <#assign idAleatorio-- />
264 </div>
265 </#list>
266 </#if>
267 </div>
268 </div>
269</div>
270
271
272<#if faqs?has_content>
273<script type="application/ld+json">
274<@compress single_line=true>
275{
276 "@context": "https://schema.org",
277 "@type": "FAQPage",
278 "mainEntity": [
279 <#list faqs as faq>
280 <#-- Determinar qué respuesta usar -->
281 <#assign respuesta = "">
282 <#if faq.respuestaGenerica?has_content>
283 <#assign respuesta = faq.respuestaGenerica>
284 <#elseif faq.respuestaComfort?has_content>
285 <#assign respuesta = faq.respuestaComfort>
286 <#elseif faq.respuestaSupra?has_content>
287 <#assign respuesta = faq.respuestaSupra>
288 <#elseif faq.respuestaSi?has_content>
289 <#assign respuesta = faq.respuestaSi>
290 <#elseif faq.respuestaNo?has_content>
291 <#assign respuesta = faq.respuestaNo>
292 </#if>
293
294 <#assign cleaned_answer = respuesta?replace("'", "’")>
295 <#assign cleaned_question = faq.titulo?replace("'", "’")>
296 {
297 "@type": "Question",
298 "name": "${cleaned_question?json_string}",
299 "acceptedAnswer": {
300 "@type": "Answer",
301 "text": "${cleaned_answer?json_string}"
302 }
303 }<#if faq_has_next>,</#if>
304 </#list>
305 ]
306}
307</@compress>
308</script>
309</#if>