'Все компании', 61 => 'DUNAV', 63 => 'Croisi Europe', 54 => 'AMA Waterways', 55 => 'Viking River Cruises', 67 => 'Avalon'); #Массив уровней обслуживания $SERVICE = array(2 => 'Стандарт', 3 => 'Премиум', 4 => 'Комфорт', 5 => 'Люкс'); #Массив с реками $RIVERS = array('Балтийское море','Висла','Влтава','Европейский канал','Дору','Дунай','Каналы Бельгии','Майн','Меконг','Каналы Голландии', 'Мозель','Неккар','Нил','Одер','По','Рейн','Рона','Сена','Эльба','Янцзы'); #Массив со странами $COUNTRIES = array('Австрия','Бельгия','Болгария','Венгрия','Вьетнам','Германия','Голландия','Египет','Испания','Италия','Китай','Камбоджа ', 'Люксембург','Польша','Португалия ','Румыния ','Сербия ','Словакия ','Франция ','Хорватия ','Чехия ','Швейцария'); #Массив с языками (название, путь до иконки) $LANGS = array( array('Обслуживание на английском языке','http://nikatravel.ru/global/img/en32.png'), array('Обслуживание на немецком языке','http://nikatravel.ru/global/img/de32.png'), array('Обслуживание на английском и немецком языках','http://nikatravel.ru/global/img/en-de32.png'), array('Русская группа','http://nikatravel.ru/global/img/ru-group32.png'), array('Часть экипажа говорит по-русски','http://nikatravel.ru/global/img/ru-crew32.png'), array('Запланирована русская группа','http://nikatravel.ru/global/img/ru-plan.png') ); #Массив названий месяцев $MONTH_RUS = array( 1 => 'Янв', 2 => 'Фев', 3 => 'Мар', 4 => 'Апр', 5 => 'Май ',6 => 'Июн', 7 => 'Июл', 8 => 'Авг', 9 => 'Сен', 10 => 'Окт', 11 => 'Ноя', 12 => 'Дек' ); ############################################# # ШАБЛОНЫ #шаблон вывода найденных круизов $TemplateCruiseOutHeader= << #cruise_search_out {width:100%;border: 1px solid;text-align:center;vertical-align:middle;} #cruise_search_out img {border:0px;}

Найдено %total_cruises% круизов

HTML; $TemplateCruiseOutContent = << HTML; $TemplateCruiseOutFooter = << HTML; # #шаблон формы поиска $TemplateCruiseForm = << #cruise_search p{font-weight:bold;padding:5px;} #cruise_search div {border:1px dotted;padding:5px;width:99%;margin:5 auto;} #cruise_search .calend_m {border:1px solid;} #cruise_search .calend_m td {width:70px;height:25px;} #cruise_search .calend_m #y {text-align:center;font-weight:bold;} #cruise_search .langs input {margin-left:20px;} #cruise_search .langs img {margin-bottom:-10px;border:0px;}

Круизные компании

%COMPANIES%

Уровень обслуживания

%SERVICE%

Язык обслуживания

%NikaLangs%

Дата круиза

%NikaDateCruise%

Страны

%COUNTRIES%

Реки

%RIVERS%

HTML; # #шаблон сообщения, если не найден ни один круиз $TemplateCruiseSearchNull = <<Найдено 0 круизов. Попробуйте изменить Ваш запрос. HTML; # #шаблон сообщения, если произошла ошибка при поиске $TemplateCruiseSearchError = <<Произошла ошибка. Повторите Ваш запрос позже. HTML; # #шаблон сообщения, если произошла ошибка при загрузке страницы с информацией о круизе или теплоходе $TemplateCruiseContentError =<<Произошла ошибка. Не удалось загрузить страницу. HTML; # # ############################################# // КОНЕЦ НАСТРОЕК // ////////////////////////////////////////////// //если послан запрос на поиск if(isset($_REQUEST['cruise_search'])) { //запоминаем эту строчку поиска и передаем запрос на сервер НИКИ $QUERY = ''; foreach($_GET as $key=>$val) { if(is_array($val)) { foreach($val as $key_arr=>$val_arr) { $QUERY .= '&'.$key.'['.@urlencode($key_arr).']=on'; } } else $QUERY .= '&'.$key.'='.@urlencode($val); } $content = NikaGetPage(NIKA_URL_SEARCH.$QUERY); //проверяем ответ, если не было ошибки, то парсим полученную информацию if(!empty($content) && !strstr(substr($content, 0, 20), 'ERROR_')) { if(NIKA_FORMAT == 'json') { $content = json_decode($content); if(!stristr(CHARSET, 'utf-8')) { for($i=0; $iname = iconv('utf-8', CHARSET, $content[$i]->name); $content[$i]->countries = iconv('utf-8', CHARSET, $content[$i]->countries); $content[$i]->rivers = iconv('utf-8', CHARSET, $content[$i]->rivers); $content[$i]->min_price = iconv('utf-8', CHARSET, $content[$i]->min_price); } } } elseif(NIKA_FORMAT == 'xml') { if(!stristr(CHARSET, 'utf-8')) $content = iconv('utf-8', CHARSET.'//IGNORE', $content); $content = simplexml_load_string($content); } //всего круизов $total_cruises = sizeof($content); if($total_cruises > 0) { //выводим шапку echo NikaTemplate($TemplateCruiseOutHeader, array('total_cruises' =>$total_cruises)); //дальше выводим информацию о каждом круизе foreach($content as $cruise) { $cruise->ship_photo = !empty($cruise->ship_photo) ? 'фото теплохода' : ''; $cruise->langs = isset($cruise->langs) ? ''.$LANGS[$cruise->langs][0].'' : ''; echo NikaTemplate($TemplateCruiseOutContent, $cruise); } //выводим конец шаблона echo $TemplateCruiseOutFooter; } else echo $TemplateCruiseSearchNull; } else echo $TemplateCruiseSearchError; } //если послан запрос на показ информации о круизе или корабле elseif(isset($_GET['show_cruise'])) { if(!empty($_GET['tid'])) { $tid = intval($_GET['tid']); $content = NikaGetPage(NIKA_URL_CONTENT.'&tid='.$tid); } elseif(!empty($_GET['hid'])) { $hid = intval($_GET['hid']); $content = NikaGetPage(NIKA_URL_CONTENT.'&hid='.$hid); } //если удалось загрузить страницу, то выводим её, иначе ошибку if(!empty($content) && !strstr(substr($content, 0, 20), 'ERROR_')) { if(!stristr(CHARSET, 'utf-8')) echo iconv('utf-8', CHARSET.'//IGNORE', $content); else echo $content; } else echo $TemplateCruiseContentError; } //иначе выводим форму поиска else { $tmp = array( 'COMPANIES' => NikaArray2Data('company', $COMPANIES, 3), 'SERVICE' => NikaArray2Data('service', $SERVICE, 2), 'NikaLangs' => NikaLangs($LANGS), 'NikaDateCruise' => NikaDateCruise($MONTH_RUS), 'COUNTRIES' => NikaArray2Data('countries', $COUNTRIES), 'RIVERS' => NikaArray2Data('rivers', $RIVERS) ); echo NikaTemplate($TemplateCruiseForm, $tmp); } #### FUNCTIONS #### function NikaDateCruise($MONTH_RUS) { #Обработка дат if(NIKA_DATES) { $max_date = NikaGetPage(NIKA_URL_DATES); if(preg_match("#^[0-9]{4}-[0-9]{2}$#", $max_date)) { $DATES['max_year'] = date("Y", strtotime($max_date)); $DATES['max_month'] = date("m", strtotime($max_date)); } else $max_date = ''; } if(empty($max_date)) { $DATES['max_year'] = date("Y")+1; $DATES['max_month'] = date("m"); } $DATES['now_year'] = date("Y"); $DATES['now_month'] = date("m"); $ret = '
Даты круиза Кол-во
дней
Язык Название круиза Цена Маршрут Теплоход
%start%
-
%stop%
%days% %langs% %name% %min_price%
Страны: %countries%
Реки: %rivers%
%ship_photo%
%ship%
'; for($y=$DATES['now_year']; $y<=$DATES['max_year']; $y++) { $ret .= ''; } elseif($y == $DATES['max_year']) { $DATES['now_month'] = $DATES['max_month']+1; while($DATES['now_month'] != $m) { $ret .= ''; if($m%3 == 0) $ret .= ''; $m++; } while($m < 13) { $ret .= ''; if($m%3 == 0) $ret .= ''; $m++; } $ret .= '
'; $m = 1; if( ($y!=$DATES['now_year']) && ($y<$DATES['max_year'])) { $DATES['now_month'] = 12; while($m < 13) { $ret .= ''; if($m%3 == 0) $ret .= ''; $m++; } $ret .= '
'.$y.'
'.$MONTH_RUS[$m].'
'; } else { while($DATES['now_month'] != $m) { $ret .= ''.$MONTH_RUS[$m].''; if($m%3 == 0) $ret .= ''; $m++; } while($m < 13) { $ret .= ''; if($m%3 == 0) $ret .= ''; $m++; } $ret .= ''; } } $ret .= ''; return $ret; } function NikaArray2Data($name, $arr, $break = 5) { $ret = ''; $i = 0; foreach($arr as $key => $val) { if($i%$break == 0 && $i != 0) $ret .= ''; $ret .= ''; $i++; } while($i%$break != 0) { $ret .= ''; $i++; } $ret .= '
 
'; return $ret; } function NikaLangs($LANGS) { $ret = ''; foreach($LANGS as $key=>$lng) { $ret .= ''; } return $ret; } function NikaTemplate($tpl, $arr) { foreach($arr as $key=>$val) { if(empty($val)) $val = ' '; $tpl = str_replace('%'.$key.'%', $val, $tpl); } return $tpl; } function NikaGetPage($url, $method = 'get', $postdata = '') { $content = ''; if(stristr(NIKA_GET_PAGE, 'curl') or stristr($method, 'post') or !empty($postdata)) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1); if (stristr($method, 'post') && !empty($postdata)) { curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $postdata); } $content = curl_exec($curl); curl_close($curl); } else { $content = @file_get_contents($url); } return $content; } ?>