joelbr Posted April 1, 2016 Share Posted April 1, 2016 (edited) Os habréis fijado que el backoffice busca por separado las palabras, haciendo de una búsqueda que debería ser más restrictiva y concreta, obtenemos resultados más generales, justamente lo contrario de lo que cabría esperar. Este tutorial es aplicable a backoffice y front office, al fin y al cabo solo es modificar la consulta a la base de datos y la forma de realizar la búsqueda (y de llamarla). Pues bien, explicaré aquí cómo mejorar esto modificando dos archivos. Buscamos estos dos archivos: controllers\admin\AdminCustomersController.php Classes\Customer.php En AdminCustomerController.php, buscaremos la función ajaxProcessSearchCustomers() *Tenéis que vigilar si tenéis la carpeta NOadmin, de hacer lo mismo en controllers\NOadmin\AdminCustomersController.php simplemete debemos comentar el primer for each. Quedando más o menos así (puede variar ligeramente según la versión de PS). public function ajaxProcessSearchCustomers(){ $searches = explode(' ', Tools::getValue('customer_search')); $search = Tools::getValue('customer_search'); $customers = array(); $searches = array_unique($searches); //foreach ($searches as $search) if (!empty($search) && $results = Customer::searchByName($search)) foreach ($results as $result) $customers[$result['id_customer]] = $result; if (count($customers)) $to_return = array( 'customers' => $customers, 'found' => true ); else $to_return = array('found' => false); $this->content = Tools::jsonEncode($to_return); } En Customer.php, buscaremos la función searchByName($query), y le modificaremos la consulta para que nos lleguen resultados más precisos y más apropiados a lo que estamos buscando. Quedando así: public static function searchByName($query){ $query2 = str_replace(' ', '%', $query); return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(" SELECT * FROM "._DB_PREFIX_."customer WHERE ( email LIKE '%".pSQL($query)."%' OR id_customer = ".(int)$query." OR concat(firstname, lastname) LIKE '%".pSQL($query2)."%') ".Shop::addSqlRestriction(Shop::SHARE_CUSTOMER)); } Todo esto ha sido testeado en prestashop 1.6.0.14, y hecho de forma expresa para buscar clientes al crear pedidos manuales en el backoffice. Lo mismo es aplicable a cualquier otro campo de búsqueda extrapolando las funciones a las que correspondan, o haciendo lo propio en versiones distintas de prestashop. PD: Es posible (y probable) que afecte a otros campos de busqueda del backoffice, pero no lo he probado aún. Adjunto imágenes del antes y el después, para que veáis la diferencia. Saludos! Edited April 1, 2016 by joelbr (see edit history) Link to comment Share on other sites More sharing options...
todobarato24h Posted April 4, 2016 Share Posted April 4, 2016 Hola buenas, yo tengo un problema, con ls busquedas, la verdad es que es una basura, solo un comentario, esto arreglaria por ejemplo que si busco en mi web, Galaxy S7, me salga lo que contenga estas palabras?, porque no me las busca directamente sale un chorro de articulos menos los que tiene que salir. Lo tengo todo bien configurado y la longitud minima de la pala esta en2 se supone que si pones S7, deberia salir lo que lo contenga pero no sale nada, y para buscar algo es un desastre. Dejo mi web por si puedes pasar a mirar pero las busquedas son horribles, www.todobarato24h.com. Saludos y gracias de ante mano. Link to comment Share on other sites More sharing options...
joelbr Posted April 6, 2016 Author Share Posted April 6, 2016 Si, puedes aplicar esta consulta a la parte front-end (segun tu version de prestashop sera una función u otra), y eliminar uno de los bucles que actúan sobre ajax (el primero) que hace que busque de forma recursiva e independiente las palabras separadas por espacios. Con ello, obtenemos un resultado apropiado ya que, actualmente, buscando Galaxy S7, hace una busqueda de "Galaxy", y otra de "S7" y lo mezcla ordenándolo por ID de producto. Quitando un bucle del php que afecta al ajax, nos devolvería la consulta de Galaxy%S7 (de ahí la modificacion de arriba, que buscaría una sola vez, ahorrando recursos y optimizando nuestra tienda) y mostrando un resultado óptimo. Dejará de mostrarte todos los resultados para "Galaxy" separados de "S7" y te mostrará solamente los que contengan "Galaxy S7". Saludos! =) www.ilercode.com Link to comment Share on other sites More sharing options...
joelbr Posted May 13, 2016 Author Share Posted May 13, 2016 Hola buenas, yo tengo un problema, con ls busquedas, la verdad es que es una basura, solo un comentario, esto arreglaria por ejemplo que si busco en mi web, Galaxy S7, me salga lo que contenga estas palabras?, porque no me las busca directamente sale un chorro de articulos menos los que tiene que salir. Lo tengo todo bien configurado y la longitud minima de la pala esta en2 se supone que si pones S7, deberia salir lo que lo contenga pero no sale nada, y para buscar algo es un desastre. Dejo mi web por si puedes pasar a mirar pero las busquedas son horribles, www.todobarato24h.com. Saludos y gracias de ante mano. PD: Para aplicarlo sobre otra parte, ten en cuenta que esta es la búsqueda de customers, habrá que encontrar la función que haga lo propio con productos y repetir el proceso. Saludos! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now