Created
August 21, 2015 11:15
-
-
Save anonymous/a314207e92bd4d705e03 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
class ControllerProductSearch extends Controller { | |
public function index() { | |
$this->language->load('product/search'); | |
$this->load->model('catalog/category'); | |
$this->load->model('catalog/product'); | |
$this->load->model('tool/image'); | |
if (isset($this->request->get['search'])) { | |
$search = $this->request->get['search']; | |
} else { | |
$search = ''; | |
} | |
if (isset($this->request->get['tag'])) { | |
$tag = $this->request->get['tag']; | |
} elseif (isset($this->request->get['search'])) { | |
$tag = $this->request->get['search']; | |
} else { | |
$tag = ''; | |
} | |
if (isset($this->request->get['description'])) { | |
$description = $this->request->get['description']; | |
} else { | |
$description = ''; | |
} | |
if (isset($this->request->get['category_id'])) { | |
$category_id = $this->request->get['category_id']; | |
} else { | |
$category_id = 0; | |
} | |
if (isset($this->request->get['sub_category'])) { | |
$sub_category = $this->request->get['sub_category']; | |
} else { | |
$sub_category = ''; | |
} | |
if (isset($this->request->get['sort'])) { | |
$sort = $this->request->get['sort']; | |
} else { | |
$sort = 'p.sort_order'; | |
} | |
if (isset($this->request->get['order'])) { | |
$order = $this->request->get['order']; | |
} else { | |
$order = 'ASC'; | |
} | |
if (isset($this->request->get['page'])) { | |
$page = $this->request->get['page']; | |
} else { | |
$page = 1; | |
} | |
if (isset($this->request->get['limit'])) { | |
$limit = $this->request->get['limit']; | |
} else { | |
$limit = $this->config->get('config_catalog_limit'); | |
} | |
if (isset($this->request->get['search'])) { | |
$this->document->setTitle($this->language->get('heading_title') . ' - ' . $this->request->get['search']); | |
} else { | |
$this->document->setTitle($this->language->get('heading_title')); | |
} | |
$this->document->addScript('catalog/view/javascript/jquery/jquery.total-storage.min.js'); | |
$this->data['breadcrumbs'] = array(); | |
$this->data['breadcrumbs'][] = array( | |
'text' => $this->language->get('text_home'), | |
'href' => $this->url->link('common/home'), | |
'separator' => false | |
); | |
$url = ''; | |
if (isset($this->request->get['search'])) { | |
$url .= '&search=' . urlencode(html_entity_decode($this->request->get['search'], ENT_QUOTES, 'UTF-8')); | |
} | |
if (isset($this->request->get['tag'])) { | |
$url .= '&tag=' . urlencode(html_entity_decode($this->request->get['tag'], ENT_QUOTES, 'UTF-8')); | |
} | |
if (isset($this->request->get['description'])) { | |
$url .= '&description=' . $this->request->get['description']; | |
} | |
if (isset($this->request->get['category_id'])) { | |
$url .= '&category_id=' . $this->request->get['category_id']; | |
} | |
if (isset($this->request->get['sub_category'])) { | |
$url .= '&sub_category=' . $this->request->get['sub_category']; | |
} | |
if (isset($this->request->get['sort'])) { | |
$url .= '&sort=' . $this->request->get['sort']; | |
} | |
if (isset($this->request->get['order'])) { | |
$url .= '&order=' . $this->request->get['order']; | |
} | |
if (isset($this->request->get['page'])) { | |
$url .= '&page=' . $this->request->get['page']; | |
} | |
if (isset($this->request->get['limit'])) { | |
$url .= '&limit=' . $this->request->get['limit']; | |
} | |
$this->data['breadcrumbs'][] = array( | |
'text' => $this->language->get('heading_title'), | |
'href' => $this->url->link('product/search', $url), | |
'separator' => $this->language->get('text_separator') | |
); | |
if (isset($this->request->get['search'])) { | |
$this->data['heading_title'] = $this->language->get('heading_title') . ' - ' . $this->request->get['search']; | |
} else { | |
$this->data['heading_title'] = $this->language->get('heading_title'); | |
} | |
$this->data['text_empty'] = $this->language->get('text_empty'); | |
$this->data['text_critea'] = $this->language->get('text_critea'); | |
$this->data['text_search'] = $this->language->get('text_search'); | |
$this->data['text_keyword'] = $this->language->get('text_keyword'); | |
$this->data['text_category'] = $this->language->get('text_category'); | |
$this->data['text_sub_category'] = $this->language->get('text_sub_category'); | |
$this->data['text_quantity'] = $this->language->get('text_quantity'); | |
$this->data['text_manufacturer'] = $this->language->get('text_manufacturer'); | |
$this->data['text_model'] = $this->language->get('text_model'); | |
$this->data['text_price'] = $this->language->get('text_price'); | |
$this->data['text_tax'] = $this->language->get('text_tax'); | |
$this->data['text_points'] = $this->language->get('text_points'); | |
$this->data['text_compare'] = sprintf($this->language->get('text_compare'), (isset($this->session->data['compare']) ? count($this->session->data['compare']) : 0)); | |
$this->data['text_display'] = $this->language->get('text_display'); | |
$this->data['text_list'] = $this->language->get('text_list'); | |
$this->data['text_grid'] = $this->language->get('text_grid'); | |
$this->data['text_sort'] = $this->language->get('text_sort'); | |
$this->data['text_limit'] = $this->language->get('text_limit'); | |
$this->data['entry_search'] = $this->language->get('entry_search'); | |
$this->data['entry_description'] = $this->language->get('entry_description'); | |
$this->data['button_search'] = $this->language->get('button_search'); | |
$this->data['button_cart'] = $this->language->get('button_cart'); | |
$this->data['button_wishlist'] = $this->language->get('button_wishlist'); | |
$this->data['button_compare'] = $this->language->get('button_compare'); | |
$this->data['compare'] = $this->url->link('product/compare'); | |
$this->load->model('catalog/category'); | |
// 3 Level Category Search | |
$this->data['categories'] = array(); | |
$categories_1 = $this->model_catalog_category->getCategories(0); | |
foreach ($categories_1 as $category_1) { | |
$level_2_data = array(); | |
$categories_2 = $this->model_catalog_category->getCategories($category_1['category_id']); | |
foreach ($categories_2 as $category_2) { | |
$level_3_data = array(); | |
$categories_3 = $this->model_catalog_category->getCategories($category_2['category_id']); | |
foreach ($categories_3 as $category_3) { | |
$level_3_data[] = array( | |
'category_id' => $category_3['category_id'], | |
'name' => $category_3['name'], | |
); | |
} | |
$level_2_data[] = array( | |
'category_id' => $category_2['category_id'], | |
'name' => $category_2['name'], | |
'children' => $level_3_data | |
); | |
} | |
$this->data['categories'][] = array( | |
'category_id' => $category_1['category_id'], | |
'name' => $category_1['name'], | |
'children' => $level_2_data | |
); | |
} | |
$this->data['products'] = array(); | |
if (isset($this->request->get['search']) || isset($this->request->get['filter_tag'])) { | |
$data = array( | |
'filter_name' => $search, | |
'filter_tag' => $tag, | |
'filter_description' => $description, | |
'filter_category_id' => $category_id, | |
'filter_sub_category' => $sub_category, | |
'sort' => $sort, | |
'order' => $order, | |
'start' => ($page - 1) * $limit, | |
'limit' => $limit | |
); | |
$product_total = $this->model_catalog_product->getTotalProducts($data); | |
$results = $this->model_catalog_product->getProducts($data); | |
foreach ($results as $result) { | |
if ($result['image']) { | |
$image = $this->model_tool_image->resize($result['image'], $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height')); | |
} else { | |
$image = false; | |
} | |
//this for swap image | |
$images = $this->model_catalog_product->getProductImages($result['product_id']); | |
if(isset($images[0]['image']) && !empty($images[0]['image'])){ | |
$images =$images[0]['image']; | |
} | |
// | |
if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) { | |
$price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax'))); | |
} else { | |
$price = false; | |
} | |
if ((float)$result['special']) { | |
$special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax'))); | |
} else { | |
$special = false; | |
} | |
if ($this->config->get('config_tax')) { | |
$tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price']); | |
} else { | |
$tax = false; | |
} | |
if ($this->config->get('config_review_status')) { | |
$rating = (int)$result['rating']; | |
} else { | |
$rating = false; | |
} | |
$this->data['products'][] = array( | |
'product_id' => $result['product_id'], | |
'thumb' => $image, | |
'name' => $result['name'], | |
'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 100) . '..', | |
'price' => $price, | |
'special' => $special, | |
'tax' => $tax, | |
'rating' => $result['rating'], | |
'reviews' => sprintf($this->language->get('text_reviews'), (int)$result['reviews']), | |
'href' => $this->url->link('product/product', 'product_id=' . $result['product_id'] . $url), | |
// for swap image | |
'thumb_swap' => $this->model_tool_image->resize($images, $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height')), | |
// | |
// for saving percentage | |
'saving' => round((($result['price'] - $result['special'])/$result['price'])*100, 0), | |
// | |
); | |
} | |
$url = ''; | |
if (isset($this->request->get['search'])) { | |
$url .= '&search=' . urlencode(html_entity_decode($this->request->get['search'], ENT_QUOTES, 'UTF-8')); | |
} | |
if (isset($this->request->get['tag'])) { | |
$url .= '&tag=' . urlencode(html_entity_decode($this->request->get['tag'], ENT_QUOTES, 'UTF-8')); | |
} | |
if (isset($this->request->get['description'])) { | |
$url .= '&description=' . $this->request->get['description']; | |
} | |
if (isset($this->request->get['category_id'])) { | |
$url .= '&category_id=' . $this->request->get['category_id']; | |
} | |
if (isset($this->request->get['sub_category'])) { | |
$url .= '&sub_category=' . $this->request->get['sub_category']; | |
} | |
if (isset($this->request->get['limit'])) { | |
$url .= '&limit=' . $this->request->get['limit']; | |
} | |
$this->data['sorts'] = array(); | |
$this->data['sorts'][] = array( | |
'text' => $this->language->get('text_default'), | |
'value' => 'p.sort_order-ASC', | |
'href' => $this->url->link('product/search', 'sort=p.sort_order&order=ASC' . $url) | |
); | |
$this->data['sorts'][] = array( | |
'text' => $this->language->get('text_name_asc'), | |
'value' => 'pd.name-ASC', | |
'href' => $this->url->link('product/search', 'sort=pd.name&order=ASC' . $url) | |
); | |
$this->data['sorts'][] = array( | |
'text' => $this->language->get('text_name_desc'), | |
'value' => 'pd.name-DESC', | |
'href' => $this->url->link('product/search', 'sort=pd.name&order=DESC' . $url) | |
); | |
$this->data['sorts'][] = array( | |
'text' => $this->language->get('text_price_asc'), | |
'value' => 'p.price-ASC', | |
'href' => $this->url->link('product/search', 'sort=p.price&order=ASC' . $url) | |
); | |
$this->data['sorts'][] = array( | |
'text' => $this->language->get('text_price_desc'), | |
'value' => 'p.price-DESC', | |
'href' => $this->url->link('product/search', 'sort=p.price&order=DESC' . $url) | |
); | |
if ($this->config->get('config_review_status')) { | |
$this->data['sorts'][] = array( | |
'text' => $this->language->get('text_rating_desc'), | |
'value' => 'rating-DESC', | |
'href' => $this->url->link('product/search', 'sort=rating&order=DESC' . $url) | |
); | |
$this->data['sorts'][] = array( | |
'text' => $this->language->get('text_rating_asc'), | |
'value' => 'rating-ASC', | |
'href' => $this->url->link('product/search', 'sort=rating&order=ASC' . $url) | |
); | |
} | |
$this->data['sorts'][] = array( | |
'text' => $this->language->get('text_model_asc'), | |
'value' => 'p.model-ASC', | |
'href' => $this->url->link('product/search', 'sort=p.model&order=ASC' . $url) | |
); | |
$this->data['sorts'][] = array( | |
'text' => $this->language->get('text_model_desc'), | |
'value' => 'p.model-DESC', | |
'href' => $this->url->link('product/search', 'sort=p.model&order=DESC' . $url) | |
); | |
$url = ''; | |
if (isset($this->request->get['search'])) { | |
$url .= '&search=' . urlencode(html_entity_decode($this->request->get['search'], ENT_QUOTES, 'UTF-8')); | |
} | |
if (isset($this->request->get['tag'])) { | |
$url .= '&tag=' . urlencode(html_entity_decode($this->request->get['tag'], ENT_QUOTES, 'UTF-8')); | |
} | |
if (isset($this->request->get['description'])) { | |
$url .= '&description=' . $this->request->get['description']; | |
} | |
if (isset($this->request->get['category_id'])) { | |
$url .= '&category_id=' . $this->request->get['category_id']; | |
} | |
if (isset($this->request->get['sub_category'])) { | |
$url .= '&sub_category=' . $this->request->get['sub_category']; | |
} | |
if (isset($this->request->get['sort'])) { | |
$url .= '&sort=' . $this->request->get['sort']; | |
} | |
if (isset($this->request->get['order'])) { | |
$url .= '&order=' . $this->request->get['order']; | |
} | |
$this->data['limits'] = array(); | |
$limits = array_unique(array($this->config->get('config_catalog_limit'), 25, 50, 75, 100)); | |
sort($limits); | |
foreach($limits as $limits){ | |
$this->data['limits'][] = array( | |
'text' => $limits, | |
'value' => $limits, | |
'href' => $this->url->link('product/search', $url . '&limit=' . $limits) | |
); | |
} | |
$url = ''; | |
if (isset($this->request->get['search'])) { | |
$url .= '&search=' . urlencode(html_entity_decode($this->request->get['search'], ENT_QUOTES, 'UTF-8')); | |
} | |
if (isset($this->request->get['tag'])) { | |
$url .= '&tag=' . urlencode(html_entity_decode($this->request->get['filter_tag'], ENT_QUOTES, 'UTF-8')); | |
} | |
if (isset($this->request->get['description'])) { | |
$url .= '&description=' . $this->request->get['description']; | |
} | |
if (isset($this->request->get['category_id'])) { | |
$url .= '&category_id=' . $this->request->get['category_id']; | |
} | |
if (isset($this->request->get['sub_category'])) { | |
$url .= '&sub_category=' . $this->request->get['sub_category']; | |
} | |
if (isset($this->request->get['sort'])) { | |
$url .= '&sort=' . $this->request->get['sort']; | |
} | |
if (isset($this->request->get['order'])) { | |
$url .= '&order=' . $this->request->get['order']; | |
} | |
if (isset($this->request->get['limit'])) { | |
$url .= '&limit=' . $this->request->get['limit']; | |
} | |
$pagination = new Pagination(); | |
$pagination->total = $product_total; | |
$pagination->page = $page; | |
$pagination->limit = $limit; | |
$pagination->text = $this->language->get('text_pagination'); | |
$pagination->url = $this->url->link('product/search', $url . '&page={page}'); | |
$this->data['pagination'] = $pagination->render(); | |
} | |
$this->data['search'] = $search; | |
$this->data['description'] = $description; | |
$this->data['category_id'] = $category_id; | |
$this->data['sub_category'] = $sub_category; | |
$this->data['sort'] = $sort; | |
$this->data['order'] = $order; | |
$this->data['limit'] = $limit; | |
if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/product/search.tpl')) { | |
$this->template = $this->config->get('config_template') . '/template/product/search.tpl'; | |
} else { | |
$this->template = 'default/template/product/search.tpl'; | |
} | |
$this->children = array( | |
'common/column_left', | |
'common/column_right', | |
'common/content_top', | |
'common/content_bottom', | |
'common/footer', | |
'common/header' | |
); | |
$this->response->setOutput($this->render()); | |
} | |
// search autofill | |
//<![CDATA[ | |
public function ajax() | |
{ | |
// die ('asd'); | |
// Contains results | |
$data = array(); | |
if( isset($this->request->get['keyword']) ) { | |
// Parse all keywords to lowercase | |
$keywords = strtolower( $this->request->get['keyword'] ); | |
// Perform search only if we have some keywords | |
if( strlen($keywords) >= 2 ) { | |
$parts = explode( ' ', $keywords ); | |
$add = ''; | |
// Generating search | |
foreach( $parts as $part ) { | |
$add .= ' AND (LOWER(pd.name) LIKE "%' . $this->db->escape($part) . '%"'; | |
$add .= ' OR LOWER(p.model) LIKE "%' . $this->db->escape($part) . '%")'; | |
} | |
$add = substr( $add, 4 ); | |
$sql = 'SELECT pd.product_id, pd.name, p.model FROM ' . DB_PREFIX . 'product_description AS pd '; | |
$sql .= 'LEFT JOIN ' . DB_PREFIX . 'product AS p ON p.product_id = pd.product_id '; | |
$sql .= 'LEFT JOIN ' . DB_PREFIX . 'product_to_store AS p2s ON p2s.product_id = pd.product_id '; | |
$sql .= 'WHERE ' . $add . ' AND p.status = 1 '; | |
$sql .= 'AND pd.language_id = ' . (int)$this->config->get('config_language_id'); | |
$sql .= ' AND p2s.store_id = ' . (int)$this->config->get('config_store_id'); | |
$sql .= ' ORDER BY p.sort_order ASC, LOWER(pd.name) ASC, LOWER(p.model) ASC'; | |
$sql .= ' LIMIT 4'; | |
// echo $sql; | |
$res = $this->db->query( $sql ); | |
if( $res ) { | |
$data = ( isset($res->rows) ) ? $res->rows : $res->row; | |
// For the seo url stuff | |
$basehref = 'product/product&keyword=' . $this->request->get['keyword'] . '&product_id='; | |
foreach( $data as $key => $values ) { | |
$data[$key] = array( | |
'name' => substr($values['name'],0,50)."...", | |
'href' => $this->url->link($basehref . $values['product_id']), | |
'img1' => $this->getProductImage($values['product_id']), | |
'price' => $this->getProductPrice($values['product_id']) | |
); | |
} | |
} | |
} | |
} | |
echo json_encode( $data ); | |
} | |
function getProductImage($idImg) { | |
$sql1 = "SELECT image, product_id FROM oc_product WHERE product_id = $idImg LIMIT 0,1"; | |
$res = mysql_query( $sql1 ); | |
$row = mysql_fetch_array($res); | |
// print_r ($row); | |
if ($row['image']) return $row['image']; else return "blank"; | |
} | |
function getProductPrice($idPrice) { | |
$sql1 = "SELECT price, product_id,tax_class_id FROM oc_product as p WHERE product_id = $idPrice LIMIT 0,1"; | |
$res = mysql_query( $sql1 ); | |
$row = mysql_fetch_array($res); | |
// print_r ($row); | |
if ($row['price']) | |
return $this->currency->format($this->tax->calculate($row['price'], $row['tax_class_id'], $this->config->get('config_tax'))); | |
else return "0"; | |
} | |
//]]> | |
// end search auto fill | |
} | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment