File: //home/temp/yarusvl.ru/ajax/search_products.php
<?php
if(!empty($_SERVER['HTTP_USER_AGENT'])){
session_name(md5($_SERVER['HTTP_USER_AGENT']));
}
session_start();
require_once('../api/Mgc.php');
define('IS_CLIENT', true);
$mgc = new Mgc();
$limit = 10;
/*Определяем язык*/
$lang_id = $mgc->languages->lang_id();
$language = $mgc->languages->get_language($lang_id);
$lang_link = $mgc->languages->get_lang_link();
$px = ($lang_id ? 'l' : 'p'); /*Если язык существует выбираем с таблицы переводов, иначе - таблицы produtcs*/
$lang_sql = $mgc->languages->get_query(array('object'=>'product'));
/*Ищем товар*/
$keyword = $mgc->request->get('query', 'string');
$keyword_filter = '';
if (!empty($keyword)) {
$keywords = explode(' ', $keyword);
foreach ($keywords as $kw) {
$kw = $mgc->db->escape($kw);
if($kw!=='') {
$keyword_filter .= $mgc->db->placehold("AND (
$px.name LIKE '%$kw%'
OR $px.meta_keywords LIKE '%$kw%'
OR p.id in (SELECT product_id FROM __variants WHERE sku LIKE '%$kw%')
) ");
}
}
}
// т.к. для MySQL 5.7 в ONLY_FULL_GROUP_BY режиме нужно применять ф-цию ANY_VALUE, а в MySQL 5.6 и более ранних её нет,
// принято решение для запросов где есть группировка отключать ONLY_FULL_GROUP_BY режим
$mgc->db->query("SET @mode := @@SESSION.sql_mode");
$mgc->db->query("SET SESSION sql_mode = ''");
/*Делаем выборку из БД*/
$mgc->db->query("SELECT
p.id,
p.url,
$px.name,
i.filename as image
FROM __products p
$lang_sql->join
LEFT JOIN __images i ON i.product_id=p.id AND i.position=(SELECT MIN(position) FROM __images WHERE product_id=p.id LIMIT 1)
WHERE
1
$keyword_filter
AND visible=1
GROUP BY p.id
ORDER BY $px.name
LIMIT ?
", $limit);
$products = $mgc->db->results();
// Вернем MySQL в обычный режим
$mgc->db->query("SET SESSION sql_mode = @mode");
$suggestions = array();
$ids = array();
foreach($products as $p){
$ids[] = $p->id;
}
/*Подставляем к найденым товарам их варианты*/
$variants = array();
foreach ($mgc->variants->get_variants(array('product_id'=>$ids)) as $v) {
$variants[$v->product_id][] = $v;
}
/*Определяем валюту*/
$currencies = $mgc->money->get_currencies(array('enabled'=>1));
if(isset($_SESSION['currency_id'])) {
$currency = $mgc->money->get_currency($_SESSION['currency_id']);
} else {
$currency = reset($currencies);
}
/*Подготавливаем данные для отображения в автокомплите*/
foreach($products as $product) {
$suggestion = new stdClass();
if(!empty($product->image)) {
$product->image = $mgc->design->resize_modifier($product->image, 35, 35);
}
$suggestion->price = $mgc->money->convert($variants[$product->id][0]->price, $currency->id);
$suggestion->currency = $currency->sign;
$suggestion->value = $product->name;
$suggestion->data = $product;
$suggestion->lang = $lang_link;
$suggestions[] = $suggestion;
}
$res = new stdClass;
$res->query = $keyword;
$res->suggestions = $suggestions;
header("Content-type: application/json; charset=UTF-8");
header("Cache-Control: must-revalidate");
header("Pragma: no-cache");
header("Expires: -1");
print json_encode($res);