HEX
Server: Apache/2.4.6 (CentOS) mpm-itk/2.4.7-04 mod_fcgid/2.3.9 PHP/5.4.16
System: Linux dvm.vladweb.ru 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
User: region-gk.ru (1016)
PHP: 7.3.33
Disabled: NONE
Upload Files
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);