function show() { $idu = isset($_SESSION['idu']) ? $_SESSION['idu'] : 0; $this->stat->saveStat($idu, "search/show"); $model = new Model_Search(); if ($idu > 0) { $p = intval(isset($_GET['p']) ? $_GET['p'] : 1); $sex = intval(isset($_POST['sex']) ? $_POST['sex'] : (isset($_SESSION['sex']) ? $_SESSION['sex'] : 0)); $bage = intval(isset($_POST['bage']) ? $_POST['bage'] : (isset($_SESSION['bage']) ? $_SESSION['bage'] : 0)); $aage = intval(isset($_POST['aage']) ? $_POST['aage'] : (isset($_SESSION['aage']) ? $_SESSION['aage'] : 0)); $idcity = intval(isset($_POST['idcity']) ? $_POST['idcity'] : (isset($_SESSION['idcity']) ? $_SESSION['idcity'] : 0)); $_SESSION['sex'] = $sex; $_SESSION['bage'] = $bage; $_SESSION['aage'] = $aage; $_SESSION['idcity'] = $idcity; $userCount = $model->getUsersCount($idu, $sex, $bage, $aage, $idcity); $pageCount = $this->getPageCount($userCount, REC_ON_PAGE); $p = $this->getPage($p, $pageCount); $userList = $model->getUsersList($idu, $sex, $bage, $aage, $idcity, $p); $this->template->vars('p', $p); $this->template->vars('blockleft', $p <= 1); $this->template->vars('blockright', $p >= $pageCount); $this->template->vars('userCount', $userCount); $this->template->vars('userList', $userList); $this->template->view('show', true); } else { header('Location:' . WEB_APP); } }
public function attributesAction() { $request = $this->getRequest(); $this->setViewChange('../search/index'); $this->getLayout()->meta_title = $this->translate('Search'); $this->getLayout()->meta_description = $this->translate('Search'); $attributes = array(); $attributes[0] = $request->getRequest('attributes'); $attributes[1] = $request->getRequest($attributes[0]); /* CRUMBS */ $this->view->crumbs = array(array('name' => $this->view->translate('Home'), 'href' => $request->getBaseUrl()), array('name' => $this->translate('Search'))); if (count($attributes) == 2) { $page = (int) $request->getRequest('page', 1); if ($page < 1) { $page = 1; } $limit = JO_Registry::get('front_limit'); $order = $request->getRequest('order'); if (is_null($order)) { $order = 'desc'; } $sort = $request->getRequest('sort'); if (is_null($sort)) { $sort = 'relevance'; } if ($sort == 'price') { $sort = 'rprice'; } if ($sort == 'username') { $prefix = 'users.'; } else { $prefix = 'items.'; } $this->view->searchText = implode(' - ', $attributes); $all_cats_link = $link = $request->getBaseUrl() . '?controller=search&action=attributes/' . urlencode($attributes[0] . '/' . urlencode($attributes[1])); $category = $request->getRequest('category'); if ($category) { $link .= '&category=' . $category; } $this->view->sort_by = array(array('name' => $this->view->translate('relevance'), 'href' => WM_Router::create($link . '&sort=relevance'), 'is_selected' => $sort == 'relevance' ? true : false), array('name' => $this->view->translate('date'), 'href' => WM_Router::create($link . '&sort=datetime'), 'is_selected' => $sort == 'datetime' ? true : false), array('name' => $this->view->translate('title'), 'href' => WM_Router::create($link . '&sort=name'), 'is_selected' => $sort == 'name' ? true : false), array('name' => $this->view->translate('rating'), 'href' => WM_Router::create($link . '&sort=rating'), 'is_selected' => $sort == 'rating' ? true : false), array('name' => $this->view->translate('sales'), 'href' => WM_Router::create($link . '&sort=sales'), 'is_selected' => $sort == 'sales' ? true : false), array('name' => $this->view->translate('price'), 'href' => WM_Router::create($link . '&sort=price'), 'is_selected' => $sort == 'price' ? true : false), array('name' => $this->view->translate('author name'), 'href' => WM_Router::create($link . '&sort=username'), 'is_selected' => $sort == 'username' ? true : false)); /* ORDER */ $link .= '&sort=' . $sort; $all_cats_link .= '&sort=' . $sort; $this->view->orders = array(array('name' => '»', 'href' => WM_Router::create($link . '&order=desc'), 'is_selected' => $order == 'desc' ? true : false), array('name' => '«', 'href' => WM_Router::create($link . '&order=asc'), 'is_selected' => $order == 'asc' ? true : false)); $link .= '&order=' . $order; $all_cats_link .= '&order=' . $order; $total_records = Model_Search::getAllSearchItemsByAttr($attributes, $sort . ' ' . $order, $category); if ($total_records) { $this->view->total_result = $cnt_total_records = count($total_records); $this->view->categories = array(); $categories = Model_Search::getCategoriesByAttr($attributes, $category); if ($categories) { if ($category) { $this->view->all_cats_link = WM_Router::create($all_cats_link); $exists = array(); foreach ($categories as $cat) { if (substr_count($cat['categories'], '|||') > 1) { continue; } $cat_parts = explode('|||', $cat['categories']); foreach ($cat_parts as $part) { $sub_parts = explode('@@@', $part); if (in_array($sub_parts[0], $exists)) { continue; } $exists[] = $sub_parts[0]; $this->view->categories[] = array('name' => $sub_parts[1], 'href' => WM_Router::create($link . '&category=' . $sub_parts[0])); } } $this->view->categories[0] = array('name' => $this->view->categories[0]['name']); $this->view->cnt_categories = count($this->view->categories) - 1; $this->view->subcategories = $this->view->cnt_categories == 1 ? $this->translate('Subcategory') : $this->translate('Subcategories'); } else { foreach ($categories as $cat) { if (strpos($cat['categories'], '|||')) { continue; } $cat_parts = explode('@@@', $cat['categories']); $this->view->categories[] = array('name' => $cat_parts[1], 'href' => WM_Router::create($link . '&category=' . $cat_parts[0])); } $this->view->cnt_categories = count($this->view->categories); $this->view->subcategories = $this->view->cnt_categories == 1 ? $this->translate('Category') : $this->translate('Categories'); } } $start = $page * $limit - $limit; if ($start > $cnt_total_records) { $page = max(ceil($cnt_total_records / $limit), 1); $start = $page * $limit - $limit; } elseif ($start < 0) { $start = 0; } $items = array_slice($total_records, $start, $limit); $this->view->items = array(); foreach ($items as $n => $item) { $item['demo_url'] = WM_Router::create($request->getBaseUrl() . '?module=' . $item['module'] . '&controller=items&action=preview&item_id=' . $item['id'] . '&name=' . WM_Router::clearName($item['name'])); $item['categories'] = trim($item['categories'], ','); $item['categories'] = explode(',', $item['categories']); $item['categories'] = JO_Array::multi_array_to_single_uniq($item['categories']); $item['categories'] = array_filter($item['categories'], create_function('$a', 'return $a!="";')); $this->view->items[] = Helper_Items::returnViewIndex($item, 'category'); } $pagination = new Model_Pagination(); $pagination->setLimit($limit); $pagination->setPage($page); $pagination->setText(array('text_prev' => $this->view->translate('Prev'), 'text_next' => $this->view->translate('Next'))); $pagination->setTotal($cnt_total_records); $pagination->setUrl(WM_Router::create($link . '&page={page}')); $this->view->pagination = $pagination->render(); if (!empty($this->view->pagination)) { $this->view->pagination = str_replace('{of}', $this->view->translate('OF'), $this->view->pagination); } } } $this->view->children = array(); $this->view->children['header_part'] = 'layout/header_part'; $this->view->children['footer_part'] = 'layout/footer_part'; }
public function getFullMaterials2($gid, $limit = 0, $offset = 0, $search_string = NULL, $params = array(), $time = 0) { if (empty($params)) { $for_order = ' a.rating DESC,'; } else { $for_order = ''; } $sort = Arr::get($params, 'sort', 'price_down'); $data = array(); $vData = $params; // $vData['date_start'] = $params['date_start']; $vData['gid'] = $gid; $vData['search_string'] = $search_string; $vData['sort'] = $sort; $vData['offset'] = $offset; $validation = Validation::factory($vData); $validation->rule('gid', 'not_empty'); $validation->rule('gid', 'digit'); // $validation->rule('csrf', 'not_empty'); // $validation->rule('csrf', 'Security::check'); $validation->rule('price_from', 'digit'); $validation->rule('price_to', 'digit'); if (!$validation->check()) { $data['errors'] = $validation->errors('filterErrors'); return FALSE; } if ($sort && $sort != '') { $srt = explode('_', $sort); if (isset($srt[1]) && $srt[1] == 'down') { $svariant = 'DESC'; } else { $svariant = 'ASC'; } switch ($srt[0]) { case 'views': $material_sort = 'views'; default: $sfield = 'price'; break; } $srtData = $this->getField($sfield, $gid); if (isset($material_sort)) { $query = "SELECT DISTINCT a.*\n\t\t\t\t\tFROM materials a\n\t\t\t\t\tWHERE a.sleep = 0 "; } else { if ($gid != 0) { $query = "SELECT DISTINCT a.*, b1.value\n\t\t\t\t\t\tFROM materials a, " . $srtData['type'] . " b1, group_param_values c1\n\t\t\t\t\t\tWHERE a.sleep = 0 "; } else { $query = "SELECT DISTINCT a.*\n\t\t\t\t\tFROM materials a\n\t\t\t\t\tWHERE a.sleep = 0 "; } } } else { $query = "SELECT DISTINCT a.*\n\t\t\t\t\tFROM materials a\n\t\t\t\t\tWHERE a.sleep = 0 "; } if ($gid != 0) { $query .= "AND EXISTS (SELECT * FROM group_materials_rel g where a.id = g.mid AND g.gid = " . $gid . ") "; } if ($search_string) { // //сначала получаем id лист вхождений по тексту $searcher = new Model_Search(); $words = $searcher->getSearchString($search_string); if (!empty($words)) { if ($gid != 0) { $for_order = 'CASE WHEN '; } $query .= 'AND ('; $i = 0; foreach ($words as $word) { if ($i != 0) { $query .= ' AND '; } $query .= 'UPPER(a.name) LIKE \'%' . $word . '%\''; if ($i != 0) { $for_order .= ' AND '; } $for_order .= 'UPPER(a.name) LIKE \'%' . $word . '%\''; ++$i; } if ($gid != 0) { $for_order .= ' THEN 0 ELSE 1 END, '; } if ($gid == 0) { $query .= ' OR EXISTS (SELECT * FROM groups g, group_materials_rel r WHERE a.id = r.mid AND g.id = r.gid '; foreach ($words as $word) { $query .= 'AND UPPER(g.name) LIKE \'%' . $word . '%\' '; } $query .= ' ) '; } if ($gid != 0) { $query .= ' OR EXISTS (SELECT * FROM chars b, group_param_values c where a.id = c.mid AND b.id = c.`value` '; } else { $query .= ' OR EXISTS (SELECT * FROM chars b, group_param_values c, group_params d where a.id = c.mid AND b.id = c.`value` AND d.type = "chars" AND d.id = c.pid '; } foreach ($words as $word) { $query .= 'AND UPPER(b.value) LIKE \'%' . $word . '%\''; } $query .= ' ) '; if ($gid != 0) { $query .= ' OR EXISTS (SELECT * FROM `select` s, group_param_values c where a.id = c.mid AND s.id = c.`value` '; } else { $query .= ' OR EXISTS (SELECT * FROM `select` s, group_param_values c, group_params d where a.id = c.mid AND s.id = c.`value` AND d.type = "select" AND d.id = c.pid '; } foreach ($words as $word) { $query .= 'AND UPPER(s.value) LIKE \'%' . $word . '%\''; } $query .= ' ) '; if ($gid != 0) { $query .= ' OR EXISTS (SELECT * FROM `texts` t, group_param_values c where a.id = c.mid AND t.id = c.`value` '; } else { $query .= ' OR EXISTS (SELECT * FROM `texts` t, group_param_values c, group_params d where a.id = c.mid AND t.id = c.`value` AND d.type = "texts" AND d.id = c.pid '; } foreach ($words as $word) { $query .= 'AND UPPER(t.value) LIKE \'%' . $word . '%\''; } $query .= ' )) '; } } if (count($params) > 0) { foreach ($params as $key => $value) { if ($value != '') { $key = addslashes($key); $paramTitle = explode('_', $key); $paramData = $this->getField($paramTitle[0], $gid); //формируем параметры запроса к базе данных switch ($key) { case 'price_from': $query .= 'AND EXISTS (SELECT * FROM price b, group_param_values c where a.id = c.mid AND b.id = c.`value` AND c.pid = ' . $paramData['id'] . ' AND b.`value` >= ' . $value * 100 . ') '; break; case 'price_to': $query .= 'AND EXISTS (SELECT * FROM price b, group_param_values c where a.id = c.mid AND b.id = c.`value` AND c.pid = ' . $paramData['id'] . ' AND b.`value` <= ' . $value * 100 . ') '; break; case 'meh-shuby': $query .= 'AND EXISTS (SELECT * FROM `select` b, group_param_values c where a.id = c.mid AND b.id = c.`value` AND c.pid = ' . $paramData['id'] . ' AND b.`value` in ('; for ($i = 0; $i < count($value); ++$i) { if ($i != 0) { $query .= ', '; } $query .= '\'' . addslashes(trim($value[$i])) . '\''; } $query .= ')) '; break; case 'type': $query .= 'AND EXISTS (SELECT * FROM `select` b, group_param_values c where a.id = c.mid AND b.id = c.`value` AND c.pid = ' . $paramData['id'] . ' AND b.`value` in ('; for ($i = 0; $i < count($value); ++$i) { if ($i != 0) { $query .= ', '; } $query .= '\'' . addslashes(trim($value[$i])) . '\''; } $query .= ')) '; break; case 'material': $query .= 'AND EXISTS (SELECT * FROM `select` b, group_param_values c where a.id = c.mid AND b.id = c.`value` AND c.pid = ' . $paramData['id'] . ' AND b.`value` in ('; for ($i = 0; $i < count($value); ++$i) { if ($i != 0) { $query .= ', '; } $query .= '\'' . addslashes(trim($value[$i])) . '\''; } $query .= ')) '; break; case 'razmer': foreach ($value as $itm) { $query .= 'AND EXISTS (SELECT * FROM `select` b, group_param_values c where a.id = c.mid AND b.id = c.`value` AND c.pid = ' . $paramData['id'] . ' AND b.`value` = \'' . mysql_real_escape_string(trim($itm)) . '\') '; } break; case 'color': $query .= 'AND EXISTS (SELECT * FROM `select` b, group_param_values c where a.id = c.mid AND b.id = c.`value` AND c.pid = ' . $paramData['id'] . ' AND b.`value` in ('; for ($i = 0; $i < count($value); ++$i) { if ($i != 0) { $query .= ', '; } $query .= '\'' . addslashes(trim($value[$i])) . '\''; } $query .= ')) '; break; } } } } if ($sort && $sort != '') { if (isset($material_sort)) { $query .= 'ORDER BY a.' . $material_sort . ' ' . $svariant; } else { if ($gid != 0) { $query .= 'AND a.id = c1.mid AND b1.id = c1.`value` AND c1.pid = ' . $srtData['id'] . ' ORDER BY ' . $for_order . ' CAST(b1.value AS UNSIGNED) ' . $svariant; } } } else { $query .= 'ORDER BY a.rating DESC '; } $query .= ' LIMIT ' . $offset . ', ' . $limit; // if($gid==0) // echo $query; try { $result = DB::query(Database::SELECT, $query)->execute(); } catch (Exception $e) { throw new HTTP_Exception_500(); } $fieldtypes = array('chars', 'photoalbum', 'select', 'price'); $chars = new Model_Params_Chars(); $photoalbum = new Model_Params_Photoalbum(''); $select = new Model_Params_Selects(); $price = new Model_Params_Prices(); $files = new Model_Params_Files(''); $images = new Model_Params_Images(); $dates = new Model_Params_Dates(); $texts = new Model_Params_Texts(); $catalog = new Model_Category('tree'); $parents = $catalog->getParents(Arr::get($GLOBALS, 'categoryId')); $node = ''; foreach ($parents as $key => $parent) { if ($parent["url"] == "glavnaya") { $node .= $parents[$key + 1]["url"] . "/"; break; } } /*foreach($parents as $parent) { var_dump($parent); if($parent['level']>1 && $parent['url']!='glavnaya') { $node .= $parent['url'].'/'; } }*/ if ($result) { foreach ($result as $item) { $mid = $item['id']; unset($item['id']); $gid = $this->getGroupFromMid($mid); //var_dump($gid.'-'.$item['name']); $charfileds = $chars->getTypeParams($mid, $gid); $new = array_merge($item, $charfileds); $photos = $photoalbum->getTypeParams($mid, $gid); $new = array_merge($new, $photos); $filesfield = $files->getTypeParams($mid, $gid); $new = array_merge($new, $filesfield); $textfields = $texts->getTypeParams($mid, $gid); $new = array_merge($new, $textfields); $datesfields = $dates->getTypeParams($mid, $gid); $new = array_merge($new, $datesfields); $imagefields = $images->getTypeParams($mid, $gid); $new = array_merge($new, $imagefields); $seletfields = $select->getTypeParams($mid, $gid); $new = array_merge($new, $seletfields); $prices = $price->getTypeParams($mid, $gid); $new = array_merge($new, $prices); //получаем ноду $new['node'] = $node; $data[$mid] = $new; } return $data; } }