Jump to content

indexation des référence des déclinaisons


Recommended Posts

Bonjour,

PS1.5 ne semble pas m'indexer les références des déclinaisons ce qui limite considérablement l'inrêt de ces derniers ^^

option à activer ? Bug ? Override à faire qque part ?

 

Je ne cache pas que c'est LA fonction qui me manque pour la mise en ligne de mon client...

 

Cordialement,

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

ok, pour la recherche alors, à mon avis ça rejoint la fonction find dans search : http://www.prestashop.com/forums/topic/175379-resolu-modification-fonction-recherche-sur-le-champs-reference/ déjà upgradée.

 

à mon avis dans :

 

$whereArray[] = ' p.id_product '.($word[0] == '-' ? 'NOT' : '').' IN (

SELECT id_product

FROM '._DB_PREFIX_.'search_word sw

LEFT JOIN '._DB_PREFIX_.'search_index si ON sw.id_word = si.id_word

WHERE sw.id_lang = '.(int)$id_lang.'....

 

il faut rajouter la table ps_product_attribute (champ reference)

Link to comment
Share on other sites

Mais je trouve étrange que je soit le premier à qui cela pose problème

c'est comme la fonction de recherche, bizarrement ça intéresse une poignée de personnes alors que le nombre de téléchargement de prestashop est à 1.6 millions...

 

soit ça n'intéresse vraiment personne,

soit tous le monde pense que ça marche parfaitement bien et personne ne fait de test

Link to comment
Share on other sites

Bon après 1H de lecture passionnante de code j'ai bien compris qu'il fallait surtout qu'ils soient indexés ces champs. Et comme par miracle il y a déjà une fonction getAttributes qui vient interroger la table qui nous interresse pour y indexer les name des attributs mais pas la ref....

 

On intervient alors pour juste ajouté la ref dans le SELECT et dans la boucle de sortie pour compléter la variable qui alimentera l'index ce qui nous donne ceci à mettre dans l'override du find :

 

public static function getAttributes($db, $id_product, $id_lang)
{
 if (!Combination::isFeatureActive())
  return '';
 $attributes = '';
 $attributesArray = $db->executeS('
 SELECT al.name, pa.reference FROM'._DB_PREFIX_.'product_attribute pa
 INNER JOIN '._DB_PREFIX_.'product_attribute_combination pac ON pa.id_product_attribute = pac.id_product_attribute
 INNER JOIN '._DB_PREFIX_.'attribute_lang al ON (pac.id_attribute = al.id_attribute AND al.id_lang = '.(int)$id_lang.')
 '.Shop::addSqlAssociation('product_attribute', 'pa').'
 WHERE pa.id_product = '.(int)$id_product);
 foreach ($attributesArray as $attribute)
  $attributes .= $attribute['name'].' '.($attribute['reference'] != "" ? $attribute['reference'].' ' : '');
 return $attributes;
}

 

N'étant pas codeur de métier je vous invite à me corriger en cas d'erreur.

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

à mon avis c'est plutot:

 

 

SELECT al.name, pa.reference FROM '._DB_PREFIX_.'product_attribute pa

 

quand tu mets un ? met des () c'est plus lisible et ça évite aussi des erreurs, d'ailleurs il y a une ) sans ( à cette ligne

 

De plus dans la fonction indexation il y a ça:

 

 

$product['tags'] = Search::getTags($db, (int)$product['id_product'], (int)$product['id_lang']);
$product['attributes'] = Search::getAttributes($db, (int)$product['id_product'], (int)$product['id_lang']);
$product['features'] = Search::getFeatures($db, (int)$product['id_product'], (int)$product['id_lang']);

 

Donc à mon avis il faudrait plutôt rajouter une nouvelle fonction (similaire à getAttributes : getReferences qui ne donnerais que les références, de manière à avoir ensuite dans la fonction indexation :

 

$product['tags'] = Search::getTags($db, (int)$product['id_product'], (int)$product['id_lang']);
$product['attributes'] = Search::getAttributes($db, (int)$product['id_product'], (int)$product['id_lang']);
$product['reference'] = Search::getReferences ($db, (int)$product['id_product']);
$product['features'] = Search::getFeatures($db, (int)$product['id_product'], (int)$product['id_lang']);

  • Like 1
Link to comment
Share on other sites

Ouch faute de frappe tout ca corrigée depuis sur mon site ^^ Faut pas faire des choses à 3H ^^

Why not ajouter une fonction mais comme il y a déjà une requête qui attaque cette table pourquoi en rajouter une ?

IJe n'ai pass traité içi non plus la gestion du poids de cette valeur dans les tris etc...

 

 

Dans tout les cas cette solution fonctionne pour les amateurs.

Link to comment
Share on other sites

il y a déjà une requête qui attaque cette table pourquoi en rajouter une ?

 

dans la fonction indexation tu as $product['attributes'] (comme je l'ai mis plus haut) qui contient les attributs, si tu modifies la fonction getAttributes alors $product['attributes'] contiendra les attributs et les références, sans compter que les références peuvent être dupliquées. (c'est mon avis après 5 min de réflexion, ensuite il faut voir ça dans sa globalité et surtout comment retrouver les références...)

Link to comment
Share on other sites

Oui ce serai plus "clean". Si j'ai le temps (jamais !!!) je recoderai un override spécifique aux refs (pfff le truc que personne ne revient dessus^^)

Je peut passer en résolut malgré que ce soit un peu cracra ?

Link to comment
Share on other sites

  • 2 months later...

Hello,

 

Un override pour ps 1.4 avait été donné dans un autre poste pour corriger le problème de recherche sur la désignation de produit mal écrite lorsqu'on recherché un GPS et tape GSP par exemple, on ne trouvait pas le produit GPS.

 

J'ai donc ajouté ta fonction proprement codé mais pas proprement construite comme l'indiqué coeos.pro n'étant pas une nouvelle fonction getReferences mais une modification de la fonction getAttributes pour y concaténer l'indexation de l'attribut et de sa référence à savoir :

 

public static function getAttributes($db, $id_product, $id_lang)
{
 $attributes = '';
 $attributesArray = $db->ExecuteS('
 SELECT al.name, pa.reference FROM '._DB_PREFIX_.'product_attribute pa
 INNER JOIN '._DB_PREFIX_.'product_attribute_combination pac ON pa.id_product_attribute = pac.id_product_attribute
 INNER JOIN '._DB_PREFIX_.'attribute_lang al ON (pac.id_attribute = al.id_attribute AND al.id_lang = '.(int)$id_lang.')
 WHERE pa.id_product = '.(int)$id_product);
 foreach ($attributesArray AS $attribute)
  $attributes .= $attribute['name'].' '.($attribute['reference'] != "" ? $attribute['reference'].' ' : '');
 return $attributes;
}

 

l'override à placer dans le dossier /override/classes est en pièce jointe de ce poste

 

Merci.

Search.php

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

  • 2 weeks later...

Parfait ! Le seul soucis , si je puis dire, c'est que quand on recherche sur la référence d'un attribut et qu'on ouvre donc la page produit : on ne tombe pas directement sur l'attribut en question mais sur l'attribut par défaut.

Mais c'est un détail :)

 

Merci!

Link to comment
Share on other sites

Parfait ! Le seul soucis , si je puis dire, c'est que quand on recherche sur la référence d'un attribut et qu'on ouvre donc la page produit : on ne tombe pas directement sur l'attribut en question mais sur l'attribut par défaut.

Mais c'est un détail :)

 

Merci!

 

sauf erreur de ma part ce n'est pas possible en 1.4, mais possible en 1.5, je l'utilise (le lien direct vers la déclinaison) pour ce module : http://www.coeos.pro...clinaisons.html

Edited by coeos.pro (see edit history)
Link to comment
Share on other sites

  • 8 months later...
  • 2 months later...
  • 5 months later...
  • 3 years later...

Je déterre le topic mais as-tu trouvé une solution... Je recherche exactement la même chose ! Je voudrais afficher en recherche rapide directement la variation déclinaison souhaité et idem au clic... Merci

 

Parfait ! Le seul soucis , si je puis dire, c'est que quand on recherche sur la référence d'un attribut et qu'on ouvre donc la page produit : on ne tombe pas directement sur l'attribut en question mais sur l'attribut par défaut.
Mais c'est un détail smile.png

Merci!

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...