session_start();
// обработка входных данных
$get_var = array(
'cut' => 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();
}
?>