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

Материал из Mid Office Manager Help
Перейти к: навигация, поиск
(Содержимое страницы заменено на «Статья уже обновлена»)
Строка 1: Строка 1:
== Готовая форма для вашего сайта ==
+
Статья уже обновлена
 
+
<!--На продакшне лежит папка cross_domain. В ней лежат:
+
- easyXDM.js (не трогаем, не меяем)
+
- json2.js (не трогаем, не меяем)
+
- папка cors
+
-- easyXDM.swf (не трогаем, не меяем)
+
-- index.html
+
-- name.html (не трогаем, не меяем)
+
Файл index.html нужен для добавления доменных имен, на которых предполагается расположить форму поиска. Доменные имена прописываются в 57 строке через запятую (4 инстанса):
+
var alwaysTrustedOrigins = [(/www\.aviatrans\.ru/), (/aviatrans\.ru/), (/www\.avia\.aviatrans\.ru/), (/avia\.aviatrans\.ru/), (/xdm1/), (/.*/)];
+
-->
+
 
+
Для размещения формы на своем сайте вам надо сделать следующее:
+
 
+
<ol>
+
<li>Скачайте архив [http://xtrip-wiki.gridnine.com/wiki/images/7/72/Custom_form.zip Custom_form.zip], разархивируйте и разместите разархивированные файлы на хостинге вашего домена:<br>
+
- json2.js<br>
+
- easyXDM.js<br>
+
- common.js<br>
+
В файле '''common.js''' необходимо заменить '''dev.ibe.gridnine.com''' на доменное имя вашего сайта с Sabre IBE. Также необходимо указать путь к загруженным файлам.
+
 
+
<li>Прописать в '''<head>''' страницы, на которой будет расположена форма поиска (заменить '''dev.ibe.gridnine.com''' на доменное имя сайта с Sabre IBE):<br><br>
+
 
+
<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" />
+
<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></pre>
+
 
+
Первая строка с указанием 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>
+
</li>
+
 
+
<li>Взять содержимое файла '''верстка v2.txt''' и разместить его в предполагаемом месте размещения формы поиска.</li>
+
<li>При необходимости доработать CSS для формы поиска.</li>
+
 
+
</ol>
+
<br>
+
 
+
== Более подробное описание запросов поиска перелетов ==
+
<div style="border-style: none; float:left;" class="toccolours mw-collapsible mw-collapsed">
+
 
+
=== Прямой перелет  ===
+
 
+
Вы можете самостоятельно создать форму поиска любого удобного для вас дизайна для передачи данных в Sabre IBE. После передачи данных в нашу систему клиент попадет на второй шаг с результатами поиска.
+
 
+
'''Пример ссылки с передаваемыми данными''':
+
 
+
<font color="#0000ff">Имя_вашего_сайта/ru/step2.html?FlightSearchForm.From=<font color="#ff0000">REMOTE</font>&amp;FlightSearchForm.routeType=<font color="#ff0000">ROUND_TRIP</font>&amp;FlightSearchForm.departureLocation.0.CODE=<font color="#ff0000">MOW</font>&amp;FlightSearchForm.arrivalLocation.0.CODE=<font color="#ff0000">LON</font>&amp;FlightSearchForm.date.0=<font color="#ff0000">16.10.2011</font>&amp;FlightSearchForm.date.1=<font color="#ff0000">25.10.2011</font>&amp;FlightSearchForm.departureLocation.0.CODE=<font color="#ff0000">MOW</font>&amp;FlightSearchForm.serviceClass=<font color="#ff0000">ECONOMY</font>&amp;FlightSearchForm.adults=<font color="#ff0000">1</font>&amp;FlightSearchForm.children=<font color="#ff0000">0</font>&amp;FlightSearchForm.infants=<font color="#ff0000">0</font>&amp;FlightSearchForm.infants_with_seat=<font color="#ff0000">1</font>&amp;FlightSearchForm.searchType=<font color="#ff0000">FLIGHTS</font></font>
+
 
+
*Имя_вашего_сайта подменяется соответствующим доменным именем сайтом агентства.
+
 
+
=== Описание параметров для передачи данных  ===
+
 
+
'''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 код авиакомпании. Если значений несколько, то они перечисляется несколькими парами, например: '''…&amp;FlightSearchForm.airline=<font color="#ff0000">XX</font>&amp;FlightSearchForm.airline=<font color="#ff0000">YY</font>&amp;FlightSearchForm.airline=<font color="#ff0000">ZZ</font>&amp;…'''
+
 
+
'''FlightSearchForm.skipConnected: (тип перелета – отображать только прямые/все перелеты, необязательное поле)'''
+
 
+
*TRUE – отображение только прямых перелетов
+
*FALSE – отображение всех перелетов
+
 
+
<br>
+
 
+
=== Сложный перелет  ===
+
 
+
Рассмотрим ссылку на сложный перелет на примере перелета<span lang="ru-RU"> </span><font color="#0070c0"><span lang="ru-RU">Москва-Лондон</span></font><span lang="ru-RU">
+
</span><font color="#00b050"><span lang="ru-RU">Лондон-Париж
+
</span></font><span lang="ru-RU">– </span><font color="#7030a0"><span lang="ru-RU">Париж-Санкт-Петербург</span></font>
+
 
+
<font color="#ff0000"><span lang="ru-RU">'''Красным '''</span></font><span lang="ru-RU">выделены
+
необходимые для внесения параметры. Порядок расположения данных
+
запроса в ссылке непринципиален.</span>
+
 
+
<font color="#808080">http</font><font color="#808080"><span lang="ru-RU">://</span></font><font color="#808080">russia</font><font color="#808080"><span lang="ru-RU">.</span></font><font color="#808080">ibe</font><font color="#808080"><span lang="ru-RU">.</span></font><font color="#808080">gridnine</font><font color="#808080"><span lang="ru-RU">.</span></font><font color="#808080">com</font><font color="#808080"><span lang="ru-RU">/</span></font><font color="#808080">ru</font><font color="#808080"><span lang="ru-RU">/</span></font><font color="#808080">step</font><font color="#808080"><span lang="ru-RU">2.</span></font><font color="#808080">html</font><font color="#808080"><span lang="ru-RU">?</span></font><font color="#808080">FlightSearchForm</font><font color="#808080"><span lang="ru-RU">.</span></font><font color="#808080">From</font><font color="#808080"><span lang="ru-RU">=</span></font><font color="#808080">REMOTE</font>
+
 
+
&amp;FlightSearchForm.routeType=<font color="#ff0000">'''MULTISTOP'''</font>
+
 
+
<font color="#0070c0">&amp;FlightSearchForm.departureLocation.</font><font color="#ff0000">'''0'''</font><font color="#0070c0">.CODE=MOW</font>
+
 
+
<font color="#0070c0">&amp;FlightSearchForm.arrivalLocation.</font><font color="#ff0000">'''0'''</font><font color="#0070c0">.CODE=LON</font>
+
 
+
<font color="#0070c0">&amp;FlightSearchForm.date.</font><font color="#ff0000">'''0'''</font><font color="#0070c0">=16.10.2012</font>
+
 
+
<font color="#00b050">&amp;FlightSearchForm.departureLocation.</font><font color="#ff0000">'''1'''</font><font color="#00b050">.CODE=LON</font>
+
 
+
<font color="#00b050">&amp;FlightSearchForm.arrivalLocation.</font><font color="#ff0000">'''1'''</font><font color="#00b050">.CODE=PAR</font>
+
 
+
<font color="#00b050">&amp;FlightSearchForm.date.</font><font color="#ff0000">'''1'''</font><font color="#00b050">=25.10.2012</font>
+
 
+
<font color="#7030a0">&amp;FlightSearchForm.departureLocation.</font><font color="#ff0000">'''2'''</font><font color="#7030a0">.CODE=PAR</font>
+
 
+
<font color="#7030a0">&amp;FlightSearchForm.arrivalLocation.</font><font color="#ff0000">'''2'''</font><font color="#7030a0">.CODE=LED</font>
+
 
+
<font color="#7030a0">&amp;FlightSearchForm.date.</font><font color="#ff0000">'''2'''</font><font color="#7030a0">=28.10.2012</font>
+
 
+
<font color="#808080">&amp;FlightSearchForm.serviceClass=ECONOMY</font>
+
 
+
<font color="#808080">&amp;FlightSearchForm.adults=1</font>
+
 
+
<font color="#808080">&amp;FlightSearchForm.children=0</font>
+
 
+
<font color="#808080">&amp;FlightSearchForm.infants=0</font>
+
 
+
<font color="#808080">&amp;FlightSearchForm.searchType=FLIGHTS</font>
+
 
+
<span lang="ru-RU">
+
</span><span lang="ru-RU">…где
+
выделенные красным «0», «1» и «2»
+
– привязывают параметры к определенному перелету.</span>
+
 
+
Сама ссылка полностью выглядит так:
+
 
+
<font color="#0000ff">Имя_вашего_сайта/ru/step2.html?FlightSearchForm.From=REMOTE&amp;FlightSearchForm.routeType=<font color="#ff0000">'''MULTISTOP'''</font>&amp;FlightSearchForm.departureLocation.<font color="#ff0000">'''0'''</font>.CODE=MOW&amp;FlightSearchForm.arrivalLocation.<font color="#ff0000">'''0'''</font>.CODE=LON&amp;FlightSearchForm.date.<font color="#ff0000">'''0'''</font>=16.10.2012&amp;FlightSearchForm.departureLocation.<font color="#ff0000">'''1'''</font>.CODE=LON&amp;FlightSearchForm.arrivalLocation.<font color="#ff0000">'''1'''</font>.CODE=PAR&amp;FlightSearchForm.date.<font color="#ff0000">'''1'''</font>=25.10.2012&amp;FlightSearchForm.departureLocation.<font color="#ff0000">'''2'''</font>.CODE=PAR&amp;FlightSearchForm.arrivalLocation.<font color="#ff0000">'''2'''</font>.CODE=LED&amp;FlightSearchForm.date.<font color="#ff0000">'''2'''</font>=28.10.2012&amp;FlightSearchForm.serviceClass=ECONOMY&amp;FlightSearchForm.adults=1&amp;FlightSearchForm.children=0&amp;FlightSearchForm.infants=0&amp;FlightSearchForm.searchType=FLIGHTS</font>
+
 
+
=== Запрос названия города для подстановки в поля «Пункт отправления» «Пункт назначения»  ===
+
 
+
<spoiler text="In English">Requests for cities and carriers autocompletion:
+
 
+
To get the list of applicable cities or carriers by name (or a part of name) or IATA code you need to send a GET or POST request to
+
 
+
Name_of_your_website/system/modules/com.gridnine.opencms.modules.sabre-ibe/pages/ajax_provider_locations.jsp
+
 
+
* Name_of_your_website should be replaced by your IBE domain name;
+
 
+
Request parameters:
+
 
+
cmd=GET_LOCATIONS (used to get list of locations)
+
 
+
cmd=GET_AIRLINES (used to get list of carriers)
+
 
+
locale=en
+
 
+
term=...
+
 
+
Name (or a part of name) or IATA code of airport/city/carrier should be passed as the value of the 'term' parameter (e.g.: term=Mos, term=MOW, for a carrier: term=SU).
+
 
+
The page will return the response in JSON format as the result.
+
 
+
The whole request should look something like that:
+
 
+
Name_of_your_website/system/modules/com.gridnine.opencms.modules.sabre-ibe/pages/ajax_provider_locations.jsp?cmd=GET_LOCATIONS&locale=ru&term=moscow</spoiler>
+
 
+
Для получения данных о пунктах назначения нужно отправить запрос GET или POST на адрес:
+
 
+
<font color="#0000ff">Имя_вашего_сайта/system/modules/com.gridnine.opencms.modules.sabre-ibe/pages/ajax_provider_locations.jsp</font>
+
 
+
<nowiki>*</nowiki> Имя_вашего_сайта - надо подставить соответствующее доменное имя сайта агентства
+
 
+
<span lang="ru-RU">'''Параметры'''</span>''':'''
+
 
+
cmd=<font color="#0000ff"><span lang="ru-RU">'''GET_LOCATIONS'''</span></font>
+
 
+
cmd=<font color="#0000ff"><span lang="ru-RU">'''GET_AIRLINES'''</span></font>
+
 
+
<font color="#0000ff">'''locale=ru'''</font>
+
 
+
<font color="#0000ff"><span lang="ru-RU">'''term=...'''</span></font>
+
 
+
В качестве значения term нужно передать название или IATA-код, или часть названия геолокации/авиакомпании которые нужно найти (например для городов: term=Mos, term=MOW, для а/к: term=SU).
+
 
+
В результате запроса, страница вернет ответ в формате JSON.
+
 
+
Целиком запрос должен выглядеть например так:
+
 
+
<font color="#0000ff"><span lang="ru-RU">Имя_вашего_сайта/system/modules/com.gridnine.opencms.modules.sabre-ibe/pages/ajax_provider_locations.jsp?cmd=</span></font><font color="#0000ff"><span lang="ru-RU">'''GET_LOCATIONS'''</span></font><font color="#0000ff"><span lang="ru-RU">&amp;</span></font><font color="#0000ff"><span lang="ru-RU">'''locale=ru'''</span></font><font color="#0000ff"><span lang="ru-RU">&amp;</span></font><font color="#0000ff"><span lang="ru-RU">'''term=moscow'''</span></font>
+
 
+
=== Принцип размещения и работы скрипта для кроссдоменных запросов ===
+
Для отправки междоменных запросов можно использовать PHP-прокси.
+
Скрипт устаналивается на свой сервер, после чего на этот скрипт транслируются ajax-запросы.
+
 
+
Пример получения списка городов autocomplete (пример кода для Autocomplete в сборке Jquery-ui v1.8.6):
+
 
+
КОД HTML:
+
<pre><input type="text" name="FlightSearchForm.departureLocation.0" />
+
<input type="hidden" name="FlightSearchForm.departureLocation.0.CODE" value="" /></pre>
+
 
+
КОД JAVASCRIPT:
+
<pre>$(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");
+
});
+
});
+
</pre>
+
 
+
Вариант скрипта proxy.php:
+
 
+
<pre>
+
<?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&#39;
+
);
+
 
+
/* * * 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;
+
}
+
}
+
 
+
?>
+
</pre>
+
</div>
+

Версия 15:31, 3 мая 2018

Статья уже обновлена

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

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