Jump to content

Recommended Posts

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! :D

post-1213141-0-26793100-1459505784_thumb.jpg

post-1213141-0-78766400-1459505550_thumb.jpg

Edited by joelbr (see edit history)
Link to comment
Share on other sites

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

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

  • 1 month later...

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...