Jump to content

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)

Share this post


Link to post
Share on other sites

quand tu dits indexé, tu parles de référencement dans le sitemap, ou dans la page category, ou autre...

Share this post


Link to post
Share on other sites

En fait je parle de l indexation pour la recherche. Dans l état actuel les référence des déclinaisons ne sont pas searchable !

Share this post


Link to post
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)

Share this post


Link to post
Share on other sites

Je sens que cela risque d être un peu chaud pour moi à voir. Mais je trouve étrange que je soit le premier à qui cela pose problème . Un seb sur le sujet ?

Share this post


Link to post
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

Share this post


Link to post
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)

Share this post


Link to post
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

Share this post


Link to post
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.

Share this post


Link to post
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...)

Share this post


Link to post
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 ?

Share this post


Link to post
Share on other sites

tout dépend de ta définition de cracra...

si la solution n'est pas apportée de manière clair et précise (avec le code correspondant) je dirais non

Share this post


Link to post
Share on other sites

Heu pas compris là.

Ce que je veux dire c'est est-ce que passe le sujet comme résolut sachant qu'il y a mieux à faire comme code mais que la solution fonctionne dans l'éat ?

Share this post


Link to post
Share on other sites

oups, si ça fonctionne, oui pas de soucis, ceux qui passent par ici sauront qu'il faut passer la fonction getAttributes en override pour éviter les soucis lors de mises à jour.

Share this post


Link to post
Share on other sites

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)

Share this post


Link to post
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!

Share this post


Link to post
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)

Share this post


Link to post
Share on other sites

Help !! Je suis sur PS 1.5.3 et j'ai bien placé search.php dans l'override/classes

Malheureusement l'indexation sur les références ne se fait pas. J'ai bien forcé l'indexation à nouveau.

Pouvez vous m'aider ??

Share this post


Link to post
Share on other sites

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!

Share this post


Link to post
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...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More