THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

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

Offline

#1 Loop : clause or

(06-08-2014 15:38:26)


Je voudrais que la recherche se fasse sur le titre OU la reference du produit (ce qui me parait beaucoup plus logique)

Le code est dans search.html :

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

Si je comprend bien, la recherche ne se fait que sur le titre.
Si je rajoute ref="{$smarty.get.q}", il va faire un AND, et je veux un OR ...

comment faire ?

Online

#2 Re: Loop : clause or

(06-08-2014 15:43:16)


ce qui me parait beaucoup plus logique

C'est une question de point de vue smile

Tu peux malgré tout faire un OR, de façon peu efficace, mais ça marche :

{$id_produits = '0'}

{* Récupérer les ID des produits dont le titre matche *}
{loop type="product" name="select_title" title="{$smarty.get.q}"}
   {$id_produits = "{$id_produits},${ID}"}
{/loop}

{* Récupérer les ID des produits dont la ref matche *}
{loop type="product" name="select_ref" ref="{$smarty.get.q}"}
   {$id_produits = "{$id_produits},${ID}"}
{/loop}

{* Afficher l'ensemble *}
{loop type="product" name="product_list" id=$id_produits  limit=$limit page=$product_page order=$product_order}
...
{/loop}

OpenStudio Toulouse

Offline

#3 Re: Loop : clause or

(07-08-2014 08:49:05)


bof, c'est assez moyen ...
J'ai préféré surcharger la loop product, en ajoutant un filtre 'keyword' :

     public function buildModelCriteria()
     {
        $criteria = parent::buildModelCriteria();
                
        $keyword = $this->getKeyword();        
        if (!is_null($keyword)) {
            $keyword = "%$keyword%";
            $searchCriteria = Criteria::LIKE;
            $criteria->_and();
            $criteria->filterByRef($keyword,$searchCriteria);
            $criteria->_or();
            $criteria->where("CASE WHEN NOT ISNULL(`requested_locale_i18n`.ID) THEN `requested_locale_i18n`.`TITLE` ELSE `default_locale_i18n`.`TITLE` END ".$searchCriteria." ?", $keyword, \PDO::PARAM_STR);
        }
        
        return $criteria;
     }

C'est parfait ainsi !

Last edited by griotteau (07-08-2014 08:49:19)

Online

#4 Re: Loop : clause or

(07-08-2014 09:06:37)


Si tu sais coder, alors youpi !


OpenStudio Toulouse