Pesquise produtos em uma categoria específica

Estou tentando estender o comportamento padrão do mecanismo de pesquisa fornecido pelo módulo padrãoblocksearch no Prestashop 1.6.0.6.

Eu adicionei ao formulário padrão umselect categorias retornadas de entrada.

Tudo está funcionando nos lados do controlador e da vista. O formulário inteiro está enviando o parâmetro correto para oSearchController. Mas, no Modelo, ainda não sei quais são as alterações a serem aplicadasSearch.php entidade para que o métodofind retorna produtos que pertencem à categoria especificada. Passei um bom tempo tentando entender como o mecanismo de pesquisa emfind funciona, mas sem sucesso. Alguém pode me indicar a parte do código em questão? onde adicionar minhas condiçõescategory_id no SQL?

Editar: Entre todas as consultas sql emSearch::find método, acho que o seguinte é o interessado. Na verdade, eu adicioneiAND p.'id_manufacturer' ='.(int)$manufacturer_id.' e eu posso ver mudanças. Mas para categorias, parece mais complicado, acho que preciso de umJOIN algum lugar. Receio criar coisas que aparentemente funcionem, mas que são criadas sem respeitar as melhores práticas. Por favor, para me ajudar eu sou um novato em sql.

$sql = 'SELECT p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity, 
                pl.`description_short`, pl.`available_now`, pl.`available_later`, pl.`link_rewrite`, pl.`name`,
             MAX(image_shop.`id_image`) id_image, il.`legend`, m.`name` manufacturer_name '.$score.', MAX(product_attribute_shop.`id_product_attribute`) id_product_attribute,
                DATEDIFF(
                    p.`date_add`,
                    DATE_SUB(
                        NOW(),
                        INTERVAL '.(Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20).' DAY
                    )
                ) > 0 new
                FROM '._DB_PREFIX_.'product p
                '.Shop::addSqlAssociation('product', 'p').'
                INNER JOIN `'._DB_PREFIX_.'product_lang` pl ON (
                    p.`id_product` = pl.`id_product`
                    AND pl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('pl').'
                )
                LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa ON (p.`id_product` = pa.`id_product`)
                '.Shop::addSqlAssociation('product_attribute', 'pa', false, 'product_attribute_shop.`default_on` = 1').'
                '.Product::sqlStock('p', 'product_attribute_shop', false, $context->shop).'
                LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON m.`id_manufacturer` = p.`id_manufacturer`
                LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product`)'.
                Shop::addSqlAssociation('image', 'i', false, 'image_shop.cover=1').'
                LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = '.(int)$id_lang.')
                WHERE p.`id_product` '.$product_pool.'
                                AND p.`id_manufacturer` ='.(int)$manufacturer_id.'
                GROUP BY product_shop.id_product
                '.($order_by ? 'ORDER BY  '.$alias.$order_by : '').($order_way ? ' '.$order_way : '').'
                LIMIT '.(int)(($page_number - 1) * $page_size).','.(int)$page_size;

Editar número 2: solução temporária

if($category_id!=0)  $sql=$sql.' AND p.`id_product` IN (SELECT `id_product` FROM `ps_category_product` p WHERE p.`id_category`='.(int)$category_id.'  )';

questionAnswers(1)

yourAnswerToTheQuestion