Jump to content

[Résolu] Module de recherche de pour listing alphabétique


Recommended Posts

Bonjour,

Je tente de développer "proprement" un module qui permet d'accéder a une liste de produit par ordre alphabétique.
En gros module qui liste "a,b,c,etc." et qui si l'on clic sur la lettre A par exemple ou devrait avoir le list des produit dont le nom commence par A.

C'est mon premier dev de module PS, ma première approche de smarty et la POO me donnait des boutons ;-). Donc soyez indulgent sur ma méconnaissance svp ;-) .

Pour le listing, comment requêter la BDD afin de liste les produit de la même manière que en utilisant les catégorie.

Dans mon module modules/listingblock.php j'ai une classe qui récupère les id + nom + desc courte et une autre pour compter le NB de résultat :

public function getCountListing($lang,$key)
   {
       $result = array();
        /* how many product avalable */
        if (!$result = Db::getInstance()->getRow('SELECT count(`id_product`) FROM `ps_product_lang` WHERE `id_lang`='.$lang.' AND `name` LIKE "'.$key.'%"'))
            return false;
        return $result;
   }

   public function getProductListing($lang,$key)
   {
       $result = array();
        /* content */
        if (!$result = Db::getInstance()->getRow('SELECT `id_product`,`name`,`description_short` FROM `ps_product_lang` WHERE `id_lang`='.$lang.' AND `name` LIKE "'.$key.'%"'))
            return false;
        return $result;
   }



Comment faire mieux ?

Dans mon affichage de module j'accède comme cela pour demander la list des produits commençant par c

/listing.php?listing=c



Dans /listing.php j'ai cà :

if ($listing = Tools::getValue('listing') AND !is_array($listing))
{
   include(dirname(__FILE__).'/pagination.php');

   $smarty->assign(
       array(
           'products' => ListingBlock::getProductListing(intval($cookie->id_lang), $listing),
           'pages_nb' => 1,
           'nbProducts' => ListingBlock::getCountListing(intval($cookie->id_lang), $listing)
       )
   );

}
else
{
   $smarty->assign(array(
   'products' => array(),
   'pages_nb' => 1,
   'nbProducts' => 0));
}

$smarty->assign('listing', $listing);

$smarty->display(_PS_THEME_DIR_.'listing.tpl');



Et dans la template de theme listing.tpl :

{capture name=path}{l s='Listing'}{/capture}
{include file=$tpl_dir./breadcrumb.tpl}

{l s='Listing' mod='Listingblock'} 
   {if $nbProducts > 0}
       "{if $listing}{$listing|escape:'htmlall':'UTF-8'}{/if}"
   {/if}

{include file=$tpl_dir./errors.tpl}

{if !$nbProducts}


       {if $listing}
           {l s='No results found for your search'} "{$listing|escape:'htmlall':'UTF-8'}"
       {else}
           {l s='Please type a search keyword'}
       {/if}

{else}
{$nbProducts|intval} 
   {if $nbProducts == 1}
       {l s='result has been found.'}
   {else}
       {l s='results have been found.'}
   {/if}

   {foreach from=$products item=v}
       {$v}

   {/foreach}

{/if}



Bon en gros ca va j'usqu'a la page listing, ca me dit qu'il y as des résultat, mais white is white après.

Donc si vous avez des idées, des conseils, je suis preneur.

Question sub : si je veux afficher directement la liste de produit a travers :

{include file=$tpl_dir./product-sort.tpl}
{include file=$tpl_dir./product-list.tpl products=$products}
{include file=$tpl_dir./pagination.tpl}



Quel format doit avoir ma requête pour être pris en compte et afficher correctement les produit comme dans un listing de catégorie?

Merci à tous.
Mike

Link to comment
Share on other sites

  • 1 month later...

Désolé il n'est pas encore finalisé mais sera bientôt disponible sur le store.

Ton exemple est plus simple en fait, il te faut juste lister les produits par ordre alphabétique en une seule page et crée des ancre HTML.

Pour lister tes produits utilise :

$sql = 'SELECT 
       `id_product`, `name`, `link_rewrite`  
       FROM `'._DB_PREFIX_.'product_lang` 
       WHERE `id_lang`='.$lang;

$listing = Db::getInstance()->ExecuteS($sql);



Comme ca tu n'as plus qu'as jouer avec $listing pour générer ta stdout comme tu le souhaite.
mike

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