Использование сторонней формы поиска — различия между версиями

Материал из Mid Office Manager Help
Перейти к: навигация, поиск
(Более подробное описание запросов поиска перелетов)
(Готовая форма для вашего сайта)
 
(не показаны 5 промежуточных версий 2 участников)
Строка 24: Строка 24:
  
 
<div style="border-style: none; margin-top: -10px;" class="toccolours mw-collapsible mw-collapsed">
 
<div style="border-style: none; margin-top: -10px;" class="toccolours mw-collapsible mw-collapsed">
<pre><link rel="stylesheet" href="http://dev.ibe.gridnine.com/system/modules/com.gridnine.opencms.modules.sabre-ibe/resources/css/jquery-ui-1.8.6.custom.css" type="text/css" />
+
<pre style="white-space: pre-wrap;"><link rel="stylesheet" href="http://dev.ibe.gridnine.com/system/modules/com.gridnine.opencms.modules.sabre-ibe/resources/css/jquery-ui-1.8.6.custom.css" type="text/css" />
 
<script type="text/javascript" src="http://dev.ibe.gridnine.com/system/modules/com.gridnine.opencms.modules.sabre-ibe/resources/js/jquery-1.5.js"></script>
 
<script type="text/javascript" src="http://dev.ibe.gridnine.com/system/modules/com.gridnine.opencms.modules.sabre-ibe/resources/js/jquery-1.5.js"></script>
 
<script type="text/javascript" src="http://dev.ibe.gridnine.com/system/modules/com.gridnine.opencms.modules.sabre-ibe/resources/js/jquery-ui-1.8.6.custom.js"></script>
 
<script type="text/javascript" src="http://dev.ibe.gridnine.com/system/modules/com.gridnine.opencms.modules.sabre-ibe/resources/js/jquery-ui-1.8.6.custom.js"></script>
Строка 36: Строка 36:
  
 
Первая строка с указанием CSS отображает форму поиска в стандартном визуальном решении. Вы можете убрать эту строку или указать ссылку на собственный CSS-файл.<br><br>
 
Первая строка с указанием CSS отображает форму поиска в стандартном визуальном решении. Вы можете убрать эту строку или указать ссылку на собственный CSS-файл.<br><br>
<div style="border-style: none; margin-top: -10px;" class="toccolours mw-collapsible mw-collapsed"><pre><link rel="stylesheet" href="http://dev.ibe.gridnine.com/system/modules/com.gridnine.opencms.modules.sabre-ibe/resources/css/jquery-ui-1.8.6.custom.css" type="text/css" /></pre></div>
+
<div style="border-style: none; margin-top: -10px;" class="toccolours mw-collapsible mw-collapsed"><pre style="white-space: pre-wrap;"><link rel="stylesheet" href="http://dev.ibe.gridnine.com/system/modules/com.gridnine.opencms.modules.sabre-ibe/resources/css/jquery-ui-1.8.6.custom.css" type="text/css" /></pre></div>
 
</li>
 
</li>
  
Строка 43: Строка 43:
  
 
</ol>
 
</ol>
<br>
 
  
 
== Более подробное описание запросов поиска перелетов ==
 
== Более подробное описание запросов поиска перелетов ==

Текущая версия на 15:41, 26 ноября 2018

Содержание

[править] Готовая форма для вашего сайта

Для размещения формы на своем сайте вам надо сделать следующее:

  1. Скачайте архив Custom_form.zip, разархивируйте и разместите разархивированные файлы на хостинге вашего домена:
    - json2.js
    - easyXDM.js
    - common.js
    В файле common.js необходимо заменить dev.ibe.gridnine.com на доменное имя вашего сайта с Sabre IBE. Также необходимо указать путь к загруженным файлам.
  2. Прописать в <head> страницы, на которой будет расположена форма поиска (заменить dev.ibe.gridnine.com на доменное имя сайта с Sabre IBE):

    <link rel="stylesheet" href="http://dev.ibe.gridnine.com/system/modules/com.gridnine.opencms.modules.sabre-ibe/resources/css/jquery-ui-1.8.6.custom.css" type="text/css" />
    <script type="text/javascript" src="http://dev.ibe.gridnine.com/system/modules/com.gridnine.opencms.modules.sabre-ibe/resources/js/jquery-1.5.js"></script>
    <script type="text/javascript" src="http://dev.ibe.gridnine.com/system/modules/com.gridnine.opencms.modules.sabre-ibe/resources/js/jquery-ui-1.8.6.custom.js"></script>
    <script type="text/javascript" src="http://dev.ibe.gridnine.com/system/modules/com.gridnine.opencms.modules.sabre-ibe/resources/js/jquery.tmpl.js"></script>
    <script type="text/javascript" src="http://dev.ibe.gridnine.com/system/modules/com.gridnine.opencms.modules.sabre-ibe/resources/js/jquery.maskedinput.js"></script>
    <script type="text/javascript" src="http://dev.ibe.gridnine.com/system/modules/com.gridnine.opencms.modules.sabre-ibe/resources/js/jquery.tipTip.js"></script>
    <script type="text/javascript" src="common.js"></script>
    <script type="text/javascript" src="easyXDM.js"></script>
    <script type="text/javascript" src="json2.js"></script>
    <script type="text/javascript" src="http://dev.ibe.gridnine.com/system/modules/com.gridnine.opencms.modules.sabre-ibe/resources/js/avia_step1.js?v=1401176648000&locale=ru"></script>

    Первая строка с указанием CSS отображает форму поиска в стандартном визуальном решении. Вы можете убрать эту строку или указать ссылку на собственный CSS-файл.

    <link rel="stylesheet" href="http://dev.ibe.gridnine.com/system/modules/com.gridnine.opencms.modules.sabre-ibe/resources/css/jquery-ui-1.8.6.custom.css" type="text/css" />
  3. Взять содержимое файла верстка v2.txt и разместить его в предполагаемом месте размещения формы поиска.
  4. При необходимости доработать CSS для формы поиска.

[править] Более подробное описание запросов поиска перелетов

[править] Прямой перелет

Вы можете самостоятельно создать форму поиска любого удобного для вас дизайна для передачи данных в Sabre IBE. После передачи данных в нашу систему клиент попадет на второй шаг с результатами поиска.

Пример ссылки с передаваемыми данными:

Имя_вашего_сайта/ru/step2.html?FlightSearchForm.From=REMOTE&FlightSearchForm.routeType=ROUND_TRIP&FlightSearchForm.departureLocation.0.CODE=MOW&FlightSearchForm.arrivalLocation.0.CODE=LON&FlightSearchForm.date.0=16.10.2011&FlightSearchForm.date.1=25.10.2011&FlightSearchForm.departureLocation.0.CODE=MOW&FlightSearchForm.serviceClass=ECONOMY&FlightSearchForm.adults=1&FlightSearchForm.children=0&FlightSearchForm.infants=0&FlightSearchForm.infants_with_seat=1&FlightSearchForm.searchType=FLIGHTS

  • Имя_вашего_сайта подменяется соответствующим доменным именем сайтом агентства.

[править] Описание параметров для передачи данных

FlightSearchForm.From:

  • REMOTE

FlightSearchForm.routeType: (тип перелёта)

  • ONE_WAY (В один конец)
  • ROUND_TRIP (Туда-Обратно)
  • MULTISTOP (Сложный маршрут)

FlightSearchForm.departureLocation.0.CODE:

  • IATA код города вылета

FlightSearchForm.arrivalLocation.0.CODE:

  • IATA код города прилёта

airport DME

  • IATA код аэропорта вылета/прилёта. Можно указывать вместо города вылета/прилета.

FlightSearchForm.date.0: (дата вылета)

  • дата в формате dd.MM.yyyy (напимер, 23.11.2011)

FlightSearchForm.date.1: (дата вылета обратно, только для ROUND_TRIP)

  • дата в формате dd.MM.yyyy (напимер, 03.12.2011)

FlightSearchForm.adults: (количество взрослых)

  • Число 1..6

FlightSearchForm.children: (количество детей)

  • Число 0..6

FlightSearchForm.infants: (количество младенцев)

  • Число 0..6

FlightSearchForm.infants_with_seat: (количество младенцев с местом)

  • Число 0..6

FlightSearchForm.YOUTHS: (количество молодёжи)

  • Число 0..6

FlightSearchForm.SENIORS: (количество пожилых)

  • Число 0..6

FlightSearchForm.searchType: (поиск по конкретным датам/лучшей цене)

  • FLIGHTS (конкретные даты)
  • NEAREST_DATES (по лучшей цене)

FlightSearchForm.serviceClass: (класс перелета)

  • ECONOMY (Эконом)
  • BUSINESS (Бизнес)

FlightSearchForm.timeOfDay.0: (время вылета, необязательное поле)

  • MORNING (Утро (06:00 - 12:00))
  • AFTERNOON (День (12:00 - 18:00))
  • EVENING (Вечер (18:00 - 00:00))
  • NIGHT (Ночь (00:00 - 06:00))

FlightSearchForm.timeOfDay.1: (время вылета обратно, только для ROUND_TRIP, необязательное поле)

  • MORNING (Утро (06:00 - 12:00))
  • AFTERNOON (День (12:00 - 18:00))
  • EVENING (Вечер (18:00 - 00:00))
  • NIGHT (Ночь (00:00 - 06:00))

FlightSearchForm.airline: (может быть несколько, необязательное поле)

  • IATA код авиакомпании. Если значений несколько, то они перечисляется несколькими парами, например: …&FlightSearchForm.airline=XX&FlightSearchForm.airline=YY&FlightSearchForm.airline=ZZ&…

FlightSearchForm.skipConnected: (тип перелета – отображать только прямые/все перелеты, необязательное поле)

  • TRUE – отображение только прямых перелетов
  • FALSE – отображение всех перелетов


[править] Сложный перелет

Рассмотрим ссылку на сложный перелет на примере перелета Москва-Лондон Лондон-Париж Париж-Санкт-Петербург

Красным выделены необходимые для внесения параметры. Порядок расположения данных запроса в ссылке непринципиален.

http://russia.ibe.gridnine.com/ru/step2.html?FlightSearchForm.From=REMOTE

&FlightSearchForm.routeType=MULTISTOP

&FlightSearchForm.departureLocation.0.CODE=MOW

&FlightSearchForm.arrivalLocation.0.CODE=LON

&FlightSearchForm.date.0=16.10.2012

&FlightSearchForm.departureLocation.1.CODE=LON

&FlightSearchForm.arrivalLocation.1.CODE=PAR

&FlightSearchForm.date.1=25.10.2012

&FlightSearchForm.departureLocation.2.CODE=PAR

&FlightSearchForm.arrivalLocation.2.CODE=LED

&FlightSearchForm.date.2=28.10.2012

&FlightSearchForm.serviceClass=ECONOMY

&FlightSearchForm.adults=1

&FlightSearchForm.children=0

&FlightSearchForm.infants=0

&FlightSearchForm.searchType=FLIGHTS

…где выделенные красным «0», «1» и «2» – привязывают параметры к определенному перелету.

Сама ссылка полностью выглядит так:

Имя_вашего_сайта/ru/step2.html?FlightSearchForm.From=REMOTE&FlightSearchForm.routeType=MULTISTOP&FlightSearchForm.departureLocation.0.CODE=MOW&FlightSearchForm.arrivalLocation.0.CODE=LON&FlightSearchForm.date.0=16.10.2012&FlightSearchForm.departureLocation.1.CODE=LON&FlightSearchForm.arrivalLocation.1.CODE=PAR&FlightSearchForm.date.1=25.10.2012&FlightSearchForm.departureLocation.2.CODE=PAR&FlightSearchForm.arrivalLocation.2.CODE=LED&FlightSearchForm.date.2=28.10.2012&FlightSearchForm.serviceClass=ECONOMY&FlightSearchForm.adults=1&FlightSearchForm.children=0&FlightSearchForm.infants=0&FlightSearchForm.searchType=FLIGHTS

[править] Запрос названия города для подстановки в поля «Пункт отправления» «Пункт назначения»

In English


Для получения данных о пунктах назначения нужно отправить запрос GET или POST на адрес:

Имя_вашего_сайта/system/modules/com.gridnine.opencms.modules.sabre-ibe/pages/ajax_provider_locations.jsp

* Имя_вашего_сайта - надо подставить соответствующее доменное имя сайта агентства

Параметры:

cmd=GET_LOCATIONS

cmd=GET_AIRLINES

locale=ru

term=...

В качестве значения term нужно передать название или IATA-код, или часть названия геолокации/авиакомпании которые нужно найти (например для городов: term=Mos, term=MOW, для а/к: term=SU).

В результате запроса, страница вернет ответ в формате JSON.

Целиком запрос должен выглядеть например так:

Имя_вашего_сайта/system/modules/com.gridnine.opencms.modules.sabre-ibe/pages/ajax_provider_locations.jsp?cmd=GET_LOCATIONS&locale=ru&term=moscow

[править] Принцип размещения и работы скрипта для кроссдоменных запросов

Для отправки междоменных запросов можно использовать PHP-прокси. Скрипт устаналивается на свой сервер, после чего на этот скрипт транслируются ajax-запросы.

Пример получения списка городов autocomplete (пример кода для Autocomplete в сборке Jquery-ui v1.8.6):

КОД HTML:

<input type="text" name="FlightSearchForm.departureLocation.0" />
<input type="hidden" name="FlightSearchForm.departureLocation.0.CODE" value="" />

КОД JAVASCRIPT:

$(document).ready(function() {
$('input').autocomplete({
source: "/ПУТЬ_ДО_СКРИПТА/proxy.php?csurl=http://ИМЯ_ВАШЕГО_САЙТА/system/modules/com.gridnine.opencms.modules.sabre-ibe/pages/ajax_provider_locations.jsp&cmd=GET_LOCATIONS&locale=ru",
minLength: 0,
focus: function(event, ui) {
return false;
},
select: function(event, ui) {
$(this).val(ui.item.label).next().val(ui.item.value);
$(this).trigger('change');
return false;
}
}).click(function(){
$(this)
.val("")
.next()
.val("")
.end()
.autocomplete("search");
});
});

Вариант скрипта proxy.php:

<?php

/**
 * AJAX Cross Domain (PHP) Proxy 0.7
 * by Iacovos Constantinou (http://www.iacons.net)
 *
 * Released under CC-GNU GPL
 */

/**
 * Enables or disables filtering for cross domain requests.
 * Recommended value: true
 */
define( 'CSAJAX_FILTERS', true );

/**
 * If set to true, $valid_requests should hold only domains i.e. a.example.com, b.example.com, usethisdomain.com
 * If set to false, $valid_requests should hold the whole URL ( without the parameters ) i.e. http://example.com/this/is/long/url/
 * Recommended value: false (for security reasons - do not forget that anyone can access your proxy)
 */
define( 'CSAJAX_FILTER_DOMAIN', false );

/**
 * Set debugging to true to receive additional messages - really helpful on development
 */
define( 'CSAJAX_DEBUG', true );

/**
 * A set of valid cross domain requests
 */
$valid_requests = array(
'http://dev.ibe.gridnine.com/system/modules/com.gridnine.opencms.modules.sabre-ibe/pages/ajax_provider_locations.jsp'
);

/* * * STOP EDITING HERE UNLESS YOU KNOW WHAT YOU ARE DOING * * */

// identify request headers
$request_headers = array( );
foreach ( $_SERVER as $key => $value ) {
if ( substr( $key, 0, 5 ) == 'HTTP_' ) {
$headername = str_replace( '_', ' ', substr( $key, 5 ) );
$headername = str_replace( ' ', '-', ucwords( strtolower( $headername ) ) );
if ( !in_array( $headername, array( 'Host', 'X-Proxy-Url' ) ) ) {
$request_headers[] = "$headername: $value";
}
}
}

// identify request method, url and params
$request_method = $_SERVER['REQUEST_METHOD'];
$request_params = ( $request_method == 'GET' ) ? $_GET : $_POST;
// Get URL from `csurl` in GET or POST data, before falling back to X-Proxy-URL header.
$request_url = urldecode( isset( $_REQUEST['csurl'] ) ? $_REQUEST['csurl'] : $_SERVER['HTTP_X_PROXY_URL'] );
$p_request_url = parse_url( $request_url );
unset( $request_params['csurl'] );

// ignore requests for proxy :)
if ( preg_match( '!' . $_SERVER['SCRIPT_NAME'] . '!', $request_url ) || empty( $request_url ) || count( $p_request_url ) == 1 ) {
csajax_debug_message( 'Invalid request - make sure that csurl variable is not empty' );
exit;
}

// check against valid requests
if ( CSAJAX_FILTERS ) {
$parsed = $p_request_url;
if ( CSAJAX_FILTER_DOMAIN ) {
if ( !in_array( $parsed['host'], $valid_requests ) ) {
csajax_debug_message( 'Invalid domain - ' . $parsed['host'] . ' does not included in valid requests' );
exit;
}
} else {
$check_url = isset( $parsed['scheme'] ) ? $parsed['scheme'] . '://' : '';
$check_url .= isset( $parsed['user'] ) ? $parsed['user'] . ($parsed['pass'] ? ':' . $parsed['pass'] : '') . '@' : '';
$check_url .= isset( $parsed['host'] ) ? $parsed['host'] : '';
$check_url .= isset( $parsed['port'] ) ? ':' . $parsed['port'] : '';
$check_url .= isset( $parsed['path'] ) ? $parsed['path'] : '';
if ( !in_array( $check_url, $valid_requests ) ) {
csajax_debug_message( 'Invalid domain - ' . $request_url . ' does not included in valid requests' );
exit;
}
}
}

// append query string for GET requests
if ( $request_method == 'GET' && count( $request_params ) > 0 && (!array_key_exists( 'query', $p_request_url ) || empty( $p_request_url['query'] ) ) ) {
$request_url .= '?' . http_build_query( $request_params );
}

// let the request begin
$ch = curl_init( $request_url );
curl_setopt( $ch, CURLOPT_HTTPHEADER, $request_headers ); // (re-)send headers
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); // return response
curl_setopt( $ch, CURLOPT_HEADER, true ); // enabled response headers
// add post data for POST requests
if ( $request_method == 'POST' ) {
curl_setopt( $ch, CURLOPT_POST, true );
curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query( $request_params ) );
}

// retrieve response (headers and content)
$response = curl_exec( $ch );
curl_close( $ch );

// split response to header and content
list($response_headers, $response_content) = preg_split( '/(\r\n){2}/', $response, 2 );

// (re-)send the headers
$response_headers = preg_split( '/(\r\n){1}/', $response_headers );
foreach ( $response_headers as $key => $response_header ) {
// Rewrite the `Location` header, so clients will also use the proxy for redirects.
if ( preg_match( '/^Location:/', $response_header ) ) {
list($header, $value) = preg_split( '/: /', $response_header, 2 );
$response_header = 'Location: ' . $_SERVER['REQUEST_URI'] . '?csurl=' . $value;
}
if ( !preg_match( '/^(Transfer-Encoding):/', $response_header ) ) {
header( $response_header );
}
}

// finally, output the content
print($response_content );

function csajax_debug_message( $message )
{
if ( true == CSAJAX_DEBUG ) {
print $message . PHP_EOL;
}
}

?> 
Личные инструменты
Пространства имён

Варианты
Действия
Навигация
Печать/экспорт
Инструменты