0, 'num' => 0, 'page' => 0, 'nopage' => 0, 'sort' => '', 'pview' => '', 'frommarket' => '', 'ymclid' => '', 'yclid' => '' ); $noget = true; foreach ($get_var as $var => $def) { if (empty($_GET[$var])) $_GET[$var] = $def; $$var = (empty($_POST[$var])) ? $_GET[$var] : $_POST[$var]; if ($def === 0) $$var = (int)$$var; if (!empty($$var)) $noget = false; } if (empty($page) && (!empty($nopage))) $page = $nopage; $part = (empty($_POST['part'])) ? ((empty($_GET['part'])) ? 0 : (int)$_GET['part']) : (int)$_POST['part']; $url = (empty($_POST['url'])) ? ((empty($_GET['url'])) ? '' : $_GET['url']) : $_POST['url']; // параметры адресов и значений по умолчанию $root_dir = './..'; $prem_ini = $root_dir.'/vars_init.php'; // конфигурация include($prem_ini); include($prom_lib); $err_page = '404.php'; $err_code = '404 Not Found'; if (!isset($_SESSION['promo'])) promo_restore(); $promo = (empty($_SESSION['promo'])) ? 0 : 1; if (empty($_SERVER['REQUEST_URI'])) $_SERVER['REQUEST_URI'] = ''; $url_for_cat = (preg_match("/\.html$/",$_SERVER['REQUEST_URI']) || preg_match("/\.php/",$_SERVER['REQUEST_URI'])) ? 0 : 1; if (substr($_SERVER['REQUEST_URI'],-1) != '/') { if ($url_for_cat && $noget) redirect2($_SERVER['REQUEST_URI'].'/','301 Moved Permanently'); } if (preg_match("/\/\//",$_SERVER['REQUEST_URI'])) { $true_url = preg_replace("/([\/])+/i","/",$_SERVER['REQUEST_URI']); redirect2($true_url,'301 Moved Permanently'); } $url_all = explode('/',$url); if (empty($part) && $url_all[0] == '') { $part = false; $index = true; } if ($part) { include($cach_lib); // обработка параметров URL $url_arr = array(); $inf_mod = false; foreach($url_all as $str) { if (!empty($str)) { $url_arr[] = preg_replace("/'/",'',$str); if (preg_match("/\.html$/",$str)) { if ($str != $url_all[(count($url_all)-1)]) { include($file_db_); // подключаем библиотеку формирования страницы include($main_lib); // подключаем библиотеку формирования html страницы include($page_lib); redirect2($err_page,$err_code); } $inf_mod = true; $cach_file = $cach_dir.$part.'/models/'.cach_fname('PROMO_'.$promo.'_'.implode('_',$url_arr)); break; } } } // обрабатываем параметр выдачи только списка товаров (обрезаная выдача без заголовков) if ($cut == 1) $nocut = false; else { $nocut = true; $cut = 0; } if (!$inf_mod) { // обработка параметра сортировки if (!empty($sort_arr[$sort])) { $_SESSION['psort'] = $sort; $page = 0; } if (empty($_SESSION['psort'])) $_SESSION['psort'] = $sort_def; // обработка параметра количества выдачи if (!empty($num)) { if (in_array($num,$onpage_arr)) $_SESSION['on_page'] = $num; $page = 0; } if (empty($_SESSION['on_page'])) $_SESSION['on_page'] = $on_page; // вид каталога if (!empty($pview)) { if (in_array($pview,$cat_view_arr)) $_SESSION['pview'] = $pview; } if (empty($_SESSION['pview'])) $_SESSION['pview'] = 'squares'; // подготовка параметров для запроса кэша $cach_file = $cach_dir.$part."/".cach_fname('PROMO_'.$promo.'_'.implode('_',$url_arr).'_PAGE_'.$page.'_PVIEW_'.$_SESSION['pview'].'_SORT_'.$_SESSION['psort'].'_ONPAGE_'.$_SESSION['on_page'].'_CUT_'.$cut); } if (is_cach($cach_file,$cach_lim) && $cach) { header('Content-Type: text/html; charset=UTF-8', TRUE); print read_cach($cach_file); } else { // Кэша нет - генерируем страницу // подключаемся к БД include($file_db_); // подключаем библиотеку формирования страницы include($main_lib); // подключаем библиотеку формирования html страницы include($page_lib); if ($inf_mod) { require_once($trlt_utf); $out = get_modelinfo($part,$url_arr,$nocut); // отдаём страницу товара } else { $url_num = count($url_arr); $cat = array(); // информация текущего раздела $q = 'SELECT `id`,`name`,`lnk` FROM `cat` WHERE `id`='.$part.' LIMIT 1'; $p = $mysql->query($q); $cat['part'] = $p->fetch_row(); $p->close(); if ($url_num == 0) { // быстро отдаём страницу раздела, если других параметров просто не задано $filter = list_filter($cat); $cat['query'] = $part; $out = get_catalog($cat,$filter,$page,$sort_arr[$_SESSION['psort']],$_SESSION['on_page'],$nocut); } else { // иерархия адреса $url_struct = array('cat','tb','filters','cena'); $num_filters = 0; foreach ($url_struct as $ierarhiya) { switch($ierarhiya) { case 'cat': // проверяем все уровни адреса $pid = $part; $ind = 0; foreach ($url_arr as $url_arr_key => $url_arr_value) { $q = 'SELECT `id`,`name`,`lnk` FROM `cat` WHERE `pid`='.$pid.' AND `lnk` = \''.$url_arr_value.'\' LIMIT 1'; $p = $mysql->query($q); if ($p->num_rows) { //определена подкатегория $cat['cat'][$ind] = $p->fetch_row(); $p->close(); $pid = $cat['cat'][$ind][0]; $ind++; unset($url_arr[$url_arr_key]); } else break; } $cat['query'] = $pid; break; case 'tb': // ищем по вендору $tb_arr = array(); $pre_url = '/^brendi_/i'; foreach ($url_arr as $url_arr_key => $url_arr_value) { if (preg_match($pre_url,$url_arr_value)) { $chk = explode('_',preg_replace($pre_url,'',$url_arr_value)); $tb_arr = array(); foreach ($chk as $chk_value) $tb_arr[] = '`lnk` = \''.$chk_value.'\''; unset($url_arr[$url_arr_key]); break; } else $tb_arr[] = '`lnk` = \''.$url_arr_value.'\''; } $q = 'SELECT `id`,`name`,`lnk` FROM `tb` WHERE '.implode(' OR ',$tb_arr).' ORDER BY `name`'; $p = $mysql->query($q); while ($r = $p->fetch_row()) { $cat['tb'][$r[0]] = $r; $url_arr_key = array_search($r[2],$url_arr); if (false !== $url_arr_key) unset($url_arr[$url_arr_key]); $num_filters++; } $p->close(); break; case 'filters': // для каждого параметра фильтра проверяем наличие его ключа в запросе $filter = list_filter($cat); foreach($filter as $filter_id => $filter_char) { if (!empty($filter_char[0][3])) { $pre_url = '/^'.$filter_char[0][3].'_/i'; foreach ($url_arr as $url_arr_key => $url_arr_value) { if (preg_match($pre_url,$url_arr_value)) { $chk = explode('_',preg_replace($pre_url,'',$url_arr_value)); foreach ($filter_char[1] as $char_key => $char_arr) { $chk_key = array_search($char_arr[2],$chk); if (false !== $chk_key) { unset($chk[$chk_key]); $filter['selected'][$filter_id][$char_arr[0]] = $char_key; $num_filters++; } $chk_vol = count($chk); if ($chk_vol == 0) break; } $chk_vol = count($chk); if ($chk_vol == 0) unset($url_arr[$url_arr_key]); else { //echo "не верные значения опций: ".implode(", ",$chk)." - ошибка запрса!
"; redirect2($err_page,$err_code); } } } } } break; case 'cena': //echo "определяем фильтрацию по цене
"; foreach ($url_arr as $url_arr_key => $url_arr_value) { if (preg_match("/cena\-/i",$url_arr_value)) { preg_match("/ot\-([0-9]*)/i",$url_arr_value,$min); preg_match("/do\-([0-9]*)/i",$url_arr_value,$max); if (!empty($max[1])) $filter['price_max'] = (int)$max[1]; if (!empty($min[1])) $filter['price_min'] = (int)$min[1]; $cach = false; unset($url_arr[$url_arr_key]); break; } } break; } $url_num = count($url_arr); if($url_num == 0) break; } $url_vol = count($url_arr); if ($url_vol == 0) { if (empty($filter)) $filter = list_filter($cat); $out = get_catalog($cat,$filter,$page,$sort_arr[$_SESSION['psort']],$_SESSION['on_page'],$nocut); if ($num_filters > 3) $cach = false; } else redirect2($err_page,$err_code); $mysql->close(); } } if ($out == 'error') { redirect2($err_page,$err_code); } else { // пишем страницу в кэш if ($cach) write2cach($cach_file,$out); print_out($out); } } } elseif ($index) { $usragnt = $_SERVER['HTTP_USER_AGENT']; $mobile = (preg_match('/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i',$usragnt)||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i',substr($usragnt,0,4))) ? 1 : 0; include($cach_lib); $cach_file = $cach_dir.'INDEX_mob'.$mobile; if (is_cach($cach_file,$cach_lim) && $cach) { print read_cach($cach_file); } else { // Кэша нет - генерируем страницу // подключаемся к БД include($file_db_); // подключаем библиотеку формирования страницы include($main_lib); include($page_lib); $out = get_index($mobile); if ($cach) write2cach($cach_file,$out); print_out($out); $mysql->close(); } } else { redirect2($err_page,$err_code); } function print_out($out) { header('Content-Type: text/html; charset=UTF-8', TRUE); print $out; } function redirect2($page,$cod) { global $err_code,$page_tpl,$file_db_; header('HTTP/1.1 '.$cod); header('Status: '.$cod); header('Content-Type: text/html; charset=UTF-8', TRUE); if($cod == $err_code) { $nocut = 1; $_GET['cod'] = '404'; include($file_db_); include($page_tpl.'/error.php'); } else header('Location: '.$page); exit(); } ?>