THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline

#1 recherche: search.html

(30-08-2020 14:30:39)


Bonjour
Comment faire pour que les résultats de recherche soit triés sur le titre et sur la référence?
Merci d'avance

Offline

#2 Re: recherche: search.html

(31-08-2020 11:24:55)


Bonjour,

Il faut passer spécifier dans la boucle product le pramètre order="alpha,ref".

{loop type="product" name="product_list" limit=18 order="max_price, alpha, ref"}

Tu peux consulter la documentation ici : https://doc.thelia.net/en/documentation … oduct.html

Offline

#3 Re: recherche: search.html

(02-09-2020 10:34:16)


Ah oui non je me suis mal exprimée, je souhaite que la recherche se face sur le titre et la référence

Actuellement lorsqu'on tape un mot clé dans la barre de recherche, la boucle ne regarde que le titre or j'aimerais que la référence soit inclus.

Par exemple si je tape : séchoir
J'ai des résultats
SI je tape 120124, je n'ai rien or c'est bien une référence existante.

Offline

#4 Re: recherche: search.html

(02-09-2020 13:06:30)


Voilà la boucle à utiliser :

{loop type="product" name="product_list" search_in="ref,title" search_term={$smarty.get.q}  limit=$limit page=$product_page order=$product_order}

Attention, la recherche se fait uniquement sur les références de produit, et pas sur les références de combinaisons de déclinaison.


OpenStudio Toulouse

Offline

#5 Re: recherche: search.html

(03-09-2020 08:03:07)


Bonjour
Merci pour la réponse mais cela ne fonctionne pas.

Maintenant si je tape 120124, donc la bizarre cela m'affiche "0 ELEMENT" or j'ai bien le produit d'afficher

Par contre si je tape un mot clé: Séchoir, cela m'affiche "80 éléments" mais aucun produits d'afficher....

Y a t il autre chose à modifier?

Offline

#6 Re: recherche: search.html

(03-09-2020 08:26:44)


Il y a du y avoir des modifs non maitrisées sur le fichier search.html  big_smile

Repart de la page d'itigine et fait juste la modif que je t'ai indiqué


OpenStudio Toulouse

Offline

#7 Re: recherche: search.html

(03-09-2020 08:51:35)


J'ai repris donc le fichier search.html d'origine et modifié la ligne.

Mais cela me fait la même chose

Vous pouvez aller testé : https://www.autourdulinge.fr/
si vous mettez Séchoir il y aura pas de produit mais c'est marqué 80 éléments
si vous mettez 120124, vous aurez 1 produits mais marqué 0 élément

Offline

#8 Re: recherche: search.html

(03-09-2020 09:53:21)


Alors c'est normal, parce que la boucle qui affiche le nombre de résultats trouvés n'a pas les même paramètres que celle qui remonte les produits.

Il faut remplacer : {assign var="amount" value={count type="product" title={$smarty.get.q}}}

Par {assign var="amount" value={count type="product" search_in="ref,title" search_term={$smarty.get.q}}


OpenStudio Toulouse

Offline

#9 Re: recherche: search.html

(03-09-2020 13:20:38)


Merci ! du coup maintenant le nombre est cohérent aux résultats trouvés.

par contre, cela ne recherche que sur la référence et pas sur le titre malgré le search_in="ref,title"...

SI je tape séchoir ou balcon, je n'ai aucun résultat
Si je tape 120124 j'ai bien le produit.

Du coup juste pour voir j'ai inversé ref et title dans le search_in en mettant search_in="title,ref" au lieu de search_in="ref,title"

Et la du coup j'ai zéro résultat peut importe le mot clé saisie que ce soit séchoir ou 120124 je n'ai plus rien....

Je ne comprend pas pourquoi pourtant je ne modifie que les lignes que vous m'avez indiqué.

Offline

#10 Re: recherche: search.html

(03-09-2020 22:00:22)


Le site est en français, et les titres des produits ont bien été saisis dans la langue "français", avec le drapeau français sélectionné ?

download


OpenStudio Toulouse

Offline

#11 Re: recherche: search.html

(04-09-2020 09:19:41)


BOnjour

oui le drapeau français est bien sélectionné dans les fiches produits.
J'ai testé en ne mettant que search_in='title"

Et sur le site en mot clé 'ai mis juste "se" pour tester  et aucun résultat. Or beaucoup de titre ont "se" dans leur libellé...

Je ne sais pas où il va chercher lorsqu'on lui met la valeur title mais surement pas dans la table produit.
Ce qui est bizarre c'est que si je remet la page d'origine en mettant " title=$smarty.get.q" et bien cela fonctionne.....

Offline

#12 Re: recherche: search.html

(04-09-2020 14:34:51)


Ha j'ai compris. Il faut une recherche exacte, le titre doit être exactement "se". Il te faut indiquer un mode de recherche différent :

search_mode='sentence'

{loop type="product" name="product_list" search_in="ref,title" search_mode='sentence' search_term={$smarty.get.q}  limit=$limit page=$product_page order=$product_order}

Et ident dans le {count ... }, attention !

La doc de la recherche avec les boucles : http://doc.thelia.net/en/documentation/ … -arguments


OpenStudio Toulouse

Offline

#13 Re: recherche: search.html

(04-09-2020 15:16:08)


Oh super c'est bon cela fonctionne !!

Merci beaucoup !!

Offline

#14 Re: recherche: search.html

(16-04-2021 10:51:00)


Merci pour les infos ^^
J'ai mis ça

{loop type="product" name="product_list" search_in="title" search_mode="any_word" search_term="{$smarty.get.q|regex_replace:"/[^0-9a-zA-Z]+/":" "}" limit=$limit page=$product_page order=$product_order}

et j'ai tapé :

sf565+*f-('9b+y3rù$^v^tg

et j'ai eu le droit à une belle erreur!

Unable to execute COUNT statement [SELECT COUNT(*) FROM (SELECT `product`.`id`, `product`.`tax_rule_id`, `product`.`ref`, `product`.`visible`, `product`.`position`, `product`.`template_id`, `product`.`brand_id`, `product`.`virtual`, `product`.`created_at`, `product`.`updated_at`, `product`.`version`, `product`.`version_created_at`, `product`.`version_created_by`, CASE WHEN `pse`.PROMO=1 THEN `price`.PROMO_PRICE ELSE `price`.PRICE END AS real_price, `price`.PRICE AS price, `price`.PROMO_PRICE AS promo_price, NOT ISNULL(`requested_locale_i18n`.`ID`) AS IS_TRANSLATED, CASE WHEN NOT ISNULL(`requested_locale_i18n`.`TITLE`) THEN `requested_locale_i18n`.`TITLE` ELSE `default_locale_i18n`.`TITLE` END AS i18n_TITLE, CASE WHEN NOT ISNULL(`requested_locale_i18n`.`CHAPO`) THEN `requested_locale_i18n`.`CHAPO` ELSE `default_locale_i18n`.`CHAPO` END AS i18n_CHAPO, CASE WHEN NOT ISNULL(`requested_locale_i18n`.`DESCRIPTION`) THEN `requested_locale_i18n`.`DESCRIPTION` ELSE `default_locale_i18n`.`DESCRIPTION` END AS i18n_DESCRIPTION, CASE WHEN NOT ISNULL(`requested_locale_i18n`.`POSTSCRIPTUM`) THEN `requested_locale_i18n`.`POSTSCRIPTUM` ELSE `default_locale_i18n`.`POSTSCRIPTUM` END AS i18n_POSTSCRIPTUM, CASE WHEN NOT ISNULL(`requested_locale_i18n`.`META_TITLE`) THEN `requested_locale_i18n`.`META_TITLE` ELSE `default_locale_i18n`.`META_TITLE` END AS i18n_META_TITLE, CASE WHEN NOT ISNULL(`requested_locale_i18n`.`META_DESCRIPTION`) THEN `requested_locale_i18n`.`META_DESCRIPTION` ELSE `default_locale_i18n`.`META_DESCRIPTION` END AS i18n_META_DESCRIPTION, CASE WHEN NOT ISNULL(`requested_locale_i18n`.`META_KEYWORDS`) THEN `requested_locale_i18n`.`META_KEYWORDS` ELSE `default_locale_i18n`.`META_KEYWORDS` END AS i18n_META_KEYWORDS, CASE WHEN ISNULL(`CategorySelect`.POSITION) THEN 9223372036854775807 ELSE CAST(`CategorySelect`.POSITION as SIGNED) END AS position_delegate, `CategorySelect`.CATEGORY_ID AS default_category_id, `CategorySelect`.DEFAULT_CATEGORY AS is_default_category, `SalePriceDisplay`.DISPLAY_INITIAL_PRICE AS display_initial_price, `pse`.ID AS pse_id, `pse`.NEWNESS AS is_new, `pse`.PROMO AS is_promo, `pse`.QUANTITY AS quantity, `pse`.WEIGHT AS weight, `pse`.EAN_CODE AS ean_code, COUNT(`pse_count`.ID) AS pse_count FROM `product` INNER JOIN `product_sale_elements` `pse` ON (`product`.`id`=`pse`.`product_id` AND `pse`.IS_DEFAULT=1) INNER JOIN `product_sale_elements` `pse_count` ON (`product`.`id`=`pse_count`.`product_id`) LEFT JOIN `product_price` `price` ON (`pse`.`id`=`price`.`PRODUCT_SALE_ELEMENTS_ID` AND `price`.`currency_id` = :p1) LEFT JOIN `product_i18n` `default_locale_i18n` ON (`product`.`id`=`default_locale_i18n`.`id` AND `default_locale_i18n`.LOCALE = :p2) LEFT JOIN `product_i18n` `requested_locale_i18n` ON (`product`.`id`=`requested_locale_i18n`.`id` AND `requested_locale_i18n`.LOCALE = :p3) LEFT JOIN `product_category` `CategorySelect` ON (`product`.`id`=`CategorySelect`.`product_id` AND `CategorySelect`.DEFAULT_CATEGORY = 1) LEFT JOIN `sale_product` `SaleProductPriceDisplay` ON (`product`.`id`=`SaleProductPriceDisplay`.`product_id`) LEFT JOIN `sale` `SalePriceDisplay` ON (`SaleProductPriceDisplay`.`sale_id`=`SalePriceDisplay`.`id` AND `SalePriceDisplay`.`active` = 1) WHERE (NOT ISNULL(`requested_locale_i18n`.ID) OR NOT ISNULL(`default_locale_i18n`.ID)) AND `product`.`visible`=:p4 AND CASE WHEN NOT ISNULL(`requested_locale_i18n`.ID)
THEN `requested_locale_i18n`.`TITLE`
ELSE `default_locale_i18n`.`TITLE`
END IN :p5 GROUP BY `product`.`id`) propelmatch4cnt]
in Criteria.php line 2528

Last edited by Elyos (16-04-2021 10:56:27)


Aide les autres, ils t'aideront en retour.

Offline

#15 Re: recherche: search.html

(20-04-2021 08:57:03)


search_mode   
the search mode : `any_word` (search any word separeted by a space), `sentence` (the sentence, anywhere in the field) or `strict_sentence` (the exact sentence)

default : strict_sentence

si je mets any_word ça plante... (voir erreur au dessus)

Last edited by Elyos (20-04-2021 09:16:18)


Aide les autres, ils t'aideront en retour.

Offline

#16 Re: recherche: search.html

(20-04-2021 09:48:01)


Bon bah j'ai fait cette modif qui semble fonctionner : https://github.com/thelia/thelia/pull/2382/files


Aide les autres, ils t'aideront en retour.

Offline

#17 Re: recherche: search.html

(20-04-2021 09:52:58)


Du coup, je rebondis sur deux questions/évolutions...

ça serait bien si
- on trouve 1 seul produit => redirection vers la produit directement
- d'avoir les différents modes de recherche en cascade conditionnelle :
-> mode strict : si résultat on affiche sinon on passe au mode suivant
-> mode sentence : si résultat on affiche sinon on passe au mode suivant
-> mode any_word

là faudrait le faire en loop conditionnelle je suppose ?


Aide les autres, ils t'aideront en retour.

Offline

#18 Re: recherche: search.html

(07-05-2021 08:07:16)


roadster31 wrote:

Voilà la boucle à utiliser :

{loop type="product" name="product_list" search_in="ref,title" search_term={$smarty.get.q}  limit=$limit page=$product_page order=$product_order}

Attention, la recherche se fait uniquement sur les références de produit, et pas sur les références de combinaisons de déclinaison.


N'est-il pas possible de lancer également sur les références de combinaison ? (sans passer par un module)

Si je remplace

{loop type="product" name="product_list" search_in="ref,title" search_mode='any_word' search_term={$smarty.get.q}  limit=$limit page=$product_page order=$product_order}

par

{loop type="product_sale_elements" name="product_list" search_in="ref,title" search_mode='any_word' search_term={$smarty.get.q}  limit=$limit page=$product_page order=$product_order}

ça me dit que "ref,title" n'est pas une bonne valeur pour "search_in"...
si je ne mets que ref ça me dit que çe me dit que "alpha" n'est pas une bonne valeur pour "order"...


Aide les autres, ils t'aideront en retour.

Offline

#19 Re: recherche: search.html

(07-05-2021 08:23:50)


Pour ceux que ça intéresse, j'ai joué avec les loops :

si pas de produits trouvés, on cherche une déclinaison correspondante à la référence (mot clefs saisis), car si on ne trouve pas de produit, seule la référence diffère au niveau de la recherche.

{assign var="pse_ref" value=false}
{assign var="amount" value={count type="product" search_in="ref,title" search_term={$smarty.get.q} search_mode='any_word'}}
{if {$amount}==0}
	{assign var="pse_ref" value=true}
	{assign var="amount" value={count type="product_sale_elements" ref={$smarty.get.q}}}
{/if}
{if {$amount} > 0}
{include file="includes/toolbar.html" toolbar="top" limit=$limit order=$product_order amount={$amount}}
{/if}
<div id="category-products" class="grid">
	<div class="products-content">
		{if {$pse_ref} == false}
			<ul class="products-grid list-unstyled row">
				{loop type="product" name="product_list" search_in="ref,title" search_mode='any_word' search_term={$smarty.get.q}  limit=$limit page=$product_page order=$product_order}
					{include file="includes/single-product.html" product_id=$ID hasBtn=true hasDescription=true width="369" height="247"}
				{/loop}
			</ul>
		{else}
			{ifloop rel="product_sale_elements_list"}
				<ul class="products-grid list-unstyled row">
					{loop type="product_sale_elements" name="product_sale_elements_list" ref={$smarty.get.q}}
						{loop type="product" name="product_related" id=$PRODUCT_ID}
							{include file="includes/single-product.html" product_id=$ID hasBtn=true hasDescription=true width="369" height="247"}
						{/loop}
					{/loop}
				</ul>
			{/ifloop}
			{elseloop  rel="product_sale_elements_list"}
				<h2 class="text-center">{intl l="No results found"} </h2>
			{/elseloop}
		{/if}
	</div>
</div><!-- /#category-products -->
{if {$amount} > 0}
	{include file="includes/toolbar.html" toolbar="bottom" amount={$amount}}
{/if}

Last edited by Elyos (07-05-2021 08:27:11)


Aide les autres, ils t'aideront en retour.