# Desarrolladores
# Introducción
Este documento detalla cómo funciona el motor de reservas. Está dirigido a programadores o desarrolladores web que quieran conocer los detalles técnicos, aquellos que quieran extender sus funcionalidades o bien aquellos que quieran tomarlo de partida para construir sus propias soluciones.
El motor de reservas está implementado en JS. Interactúa con el API de mybooking y con la página web para guiar al cliente en el proceso de reserva.
TIP
Puede descargase aquí, mybooking-js-engine (opens new window)
El plugin de WordPress usan la libraría JS del motor de reservas y sigue sus guías para llegar a cabo los diferentes procesos.
# ¿Cómo funciona el motor de reservas?
El motor de reservas es un conjunto de componentes que llevan a cabo cada uno de los pasos del proceso de reserva.
Está diseñado de manera que cada paso se lleve a cabo en una página independiente del sitio web. Cada página activa uno de los componentes e incluye un conjunto de elementos en los que se visualiza la información al usuario de la página web.
Para funcionar se utilizan:
- Clase en el body
- Ids o clases en determinados elementos
- Microplantillas
# Idioma
Si estamos desarrollando un sitio multi idioma, se utilizará el atributo lang del elemento html para determinar el idioma.
<html lang="es"></html>
# Clase en el body
Permite al motor de reservas identificar el componente que gestionará la página, de forma que pueda activarse la funcionalidad correspondiente.
# Ids o clases
Permite al motor de reservas identificar ciertos componentes, de forma que pueda programar eventos que respondan a la interacción del usuario con los mismos, o bien mostrar el resultado de determinados procesos.
# Microplantillas
Parte del proceso de construcción de las páginas del motor de reservas se lleva a cabo mediante micro plantillas. Presenta la información obtenida de la API.
# Preparación de las páginas
El plugin de Wordpress siguen las conveciones detalladas en el apartado anterior.
Sólo si desarrolla una nueva solución utilizando la librería JS debe tenerlo en cuenta. Además de lo anterior, se deberá tener en cuenta:
- Sitios multi idioma
- Incluir la librería JS en las págins
# Librería JS
Cada una de las páginas del proceso de reserva debe incluir el script para cargar la librería del motor de reservas.
<script type="text/javascript">
window.mybookingEngine = (function() {
var baseURL = "BASE-URL";
function getBaseURL() {
return baseURL;
}
return {
baseURL: getBaseURL
};
})();
</script>
<script src="/assets/js/mybooking-engine.js"></script>
Reemplaza
BASE-URL
por la url base de tu instancia de mybooking.
# Alquiler
El proceso de reserva se inicia con un selector, que permite al cliente introducir las fechas en las que desea realizar la reserva. Puede escoger entre dos selectores:
- Formulario selector
- Asistente de selección
Para implementar el proceso de reserva se necesitan 3 páginas en el sitio web:
- Seleccionar producto
- Completar datos
- Resumen
# Formulario selector
TIP
El selector inicia el proceso de reserva
El formulario selector inicia el proceso de reserva seleccionando las fechas del período de reserva y los lugares de entrega y devolución, si corresponde.
Suele encontrarse en la página de inicio del sitio web.
La formulario selector requiere los siguientes elementos en la página donde se muestra:
- Clase mybooking-selector-widget en el elemento body
- Formulario de búsqueda cuyo atributo name sea widget_search_form
# Clase
<body class="mybooking-selector-widget"></body>
# Formulario búsqueda
En el formulario de búsqueda se pueden utilizar los siguientes campos:
Descripción | id | name |
---|---|---|
Lugar de entrega | widget_pickup_place | pickup_place |
Fecha de entrega | widget_date_from | date_from |
Hora de entrega | widget_time_from | time_from |
Lugar de devolución | widget_return_place | return_place |
Fecha de devolución | widget_date to | date to |
Hora de devolución | widget_time_to | time_to |
Código de promoción | widget_promotion_code | promotion_code |
Número de adultos | widget_numbers_of_adults | numbers_of_adults |
Número de niños | widget_number_of_children | number_of_children |
Regla para la edad del conductor | widget_driver_age_rule | driver_age_rule |
Número de productos a contratar | widget_number_of_products | number_of_products |
El plugin de WordPress está preparado para presentar los campos en función de la configuración del negocio. Además, puede personalizarse en páginas o sitios web concretos.
La plantilla HTML permite adaptarlo a las necesidades de cada web.
<form
name="widget_search_form"
method="get"
enctype="application/x-www-form-urlencoded"
>
<label>Lugar de entrega</label>
<select id="widget_pickup_place" name="pickup_place"></select>
<label>Lugar de devolución</label>
<select id="widget_return_place" name="return_place"> </select>
<label>Fecha de entrega</label>
<input type="text" id="widget_date_from" name="date_from" autocomplete="off" />
<select id="widget_time_from" name="time_from"> </select>
<label>Fecha de devolución</label>
<input type="text" id="widget_date_to" name="date_to" autocomplete="off" />
<select id="widget_time_to" name="time_to"> </select>
<input type="submit" value="Buscar" />
</form>
# Asistente de selección
TIP
El asistente de selección inicia el proceso de reserva.
El asistente de selección inicia el proceso de reserva seleccionando las fechas del período de reserva y los lugares de entrega y devolución, si corresponde. El una alternativa al formulario selector diseñado para dar una mejor de experiencia al usuario en el móvil.
La asistente requiere los siguientes elementos en la página donde se muestra:
- Clase mybooking-selector-wizard en el elemento body
- Contenedor que presentará los pasos del Wizard
<div id="wizard_container" class="selector_wizard_container" style="display: none">
<!-- Title -->
<div id="step_title" class="selector_wizard_step_title"></div>
<!-- Close btn -->
<span id="close_wizard_btn" class="selector_wizard_close_btn"><i class="fa fa-times"></i></span>
<!-- Container -->
<div id="wizard_container_step" class="selector_wizard_step_container">
<div id="wizard_container_step_header"></div>
<div id="wizard_container_step_body"></div>
</div>
</div>
El plugin de WordPress lo incluyen, de forma que no es necesario incluirlo. Se ha de tener en cuenta si se desea ajustarlo en un tema de terceros.
# Página selección de producto
TIP
La página de selección de producto muestra los resultados de la búsqueda y permite seleccionar el producto.
La página de selección de productos requiere los siguientes elementos:
- Clase choose_product en el elemento body
- Contenedor donde se mostrará el resultado de la búsqueda
- Plantilla para visualizar el resultado de la búsqueda
- Formulario para cambiar las fechas
# Clase
En el body se debe incluir la clase choose_product
<body class="choose_product"></body>
# Contenedor resultado de la búsqueda
Crear el contenedor donde se mostrarán los productos. El id del mismo debe ser product_listing
<div id="product_listing"></div>
# Plantilla productos
Añadir el script que se encargará de visualizar los productos que retorna la búsqueda. El id del mismo debe ser script_detailed_product
<script type="text/tpml" id="script_detailed_product">
<% for (var idx=0;idx<products.length;idx++) { %>
<% var product = products[idx]; %>
<div>
<div>
<p><%=product.name%></p>
<p><%=product.short_description%></p>
<p><%=new Number(product.price).toFixed(2)%>€</p>
</div>
<img src="<%=products.photo%>" alt="">
<% if (product.availability) { %>
<a data-product="<%=product.code%>">Seleccionar</a>
<% } else { %>
<p>Consulta telefónica</p>
<% } %>
</div>
<% } %>
</script>
# Formulario cambiar fechas
Añadir el formulario que permitirá cambiar los datos de la selección. Tiene los mismos campos que el formulario de la página de inicio.
# Página completar datos
TIP
La página de completar datos permite finalizar la reserva tras introducir los datos y seleccionar los extras.
La página de completar necesita los siguientes elementos:
- Clase complete en el elemento body
- Contenedor donde se muestra el resumen de la reserva
- Contenedor para mostrar los extras
- Formulario para completar datos
- Formulario para cambiar las fechas
- Plantilla con el resumen de la reserva
# Clase
<body class="complete"></body>
# Contenedor resultado de la búsqueda
Crear el contenedor donde se muestra el resumen de la reserva. El id del mismo debe ser reservation_detail
<div id="reservation_detail"></div>
# Contenedor para mostrar los extras
Crear el contenedor donde se muestra los extras para que el cliente pueda seleccionarlos. El id del mismo debe ser extras_listing
<div id="extras_listing"></div>
# Formulario para completar datos
# Formulario para cambiar fechas
Añadir el formulario que permitirá cambiar los datos de la selección. Tiene los mismos campos que el formulario de la página de inicio.
# Plantilla resumen de la reserva
# Página resumen
TIP
La página de resumen muestra la información de la solicitud de reserva.
La página resumen necesita los siguientes elementos:
- Clase summary en el elemento body
- Contenedor donde se muestra el resumen de la reserva
- Plantilla con el resumen de la reserva
# Clase
<body class="summary"></body>
# Contenedor resultado de la búsqueda
Crear el contenedor donde se muestra el resumen de la reserva. El id del mismo debe ser reservation_detail
<div id="reservation_detail"></div>