Search the Community
Showing results for tags 'sencillo'.
-
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!