Jump to content

Comment Remplir Un Élément Select Par Des Éléments De La Base De Données?


Recommended Posts

Bonjour a tous !

J’espère que j'ai bien décrit le titre du sujet !
Mon problème est: Dans BO de mon module j'essaye de remplir un select depuis la table des catégories.
Voilà mon code:

- Fichier monmodule.php:

 public function getContent()
    {   $sqlCats = array(); 
        $sqlCats[] = 'SELECT pc.`id_category`, pcl.`name` FROM `'._DB_PREFIX_.'product` p, `'._DB_PREFIX_.'category_product` pc, `'._DB_PREFIX_.'category_lang` pcl WHERE pc.`id_product` = p.`id_product` AND pc.`id_category` = pcl.`id_category`;';

        foreach ($sqlCatsQuery as $sqlCat) {
            if (Db::getInstance()->execute($sqlCats) == false) {
                return false;
            } 
        }
	    $this->context->smarty->assign('productCats',$sqlCats);

...

- Fichier config.tpl:

{assign var='productCats' value=$productCats}
<div>
  <form action="" method="POST" class="form-group">
    <p><input type="text" name="" id="" /></p>
    <p><input type="textarea" name="" id="" /></p>
    <p><input type="text" name="" id="" /></p>
    <div class="col-sm-4">
        <div id="category_block">
            <select>
                {foreach from=$productCats key=id_categoryProduct item=categoryProduct}
                <option value="{$id_categoryProduct}">{$categoryProduct}</option>
                </option>
                {/foreach}
            </select>
...

Et voilà le résultat: 
probleme.png

Vos idées?
Merci par avance !

Link to comment
Share on other sites

essaye avec

public function getContent()
{
$sql= 'SELECT pc.`id_category`, pcl.`name` FROM `'._DB_PREFIX_.'product` p, `'._DB_PREFIX_.'category_product` pc, `'._DB_PREFIX_.'category_lang` pcl WHERE pc.`id_product` = p.`id_product` AND pc.`id_category` = pcl.`id_category`;';

$cats = Db::getInstance()->execute($sql);
$this->context->smarty->assign('productCats',$cats);

dans ton exemple sqlCats est l'array que tu définis avec juste la requete SQL, mais tu n'envoi pas le résultat de cette requète (Db::getInstance()->execute...)

Link to comment
Share on other sites

Si tu regardes https://www.prestashop.com/blog/fr/les-bonnes-pratiques-de-la-classe-db-sur-prestashop-1-5/ tu verra que dans mon exemple cats contient un array, qui est envoyé dans le fichier tpl sous le nom productCats. Pour l'afficher il faut faire un foreach en smarty : http://www.smarty.net/docsv2/fr/language.function.foreach.tpl

 

{foreach from=$productCats key=id_categoryProduct item=categoryProduct}

<option value="{$id_categoryProduct}">{$categoryProduct}</option>

{/foreach}

 

d'ailleurs tu avais un </option> en trop dans ton premier message.

Link to comment
Share on other sites

  • 8 months later...

Est ce que quelqu'un serai me dire si l'on peut automatisé la construction du select via les helper de formulaire pour avoir génération du formulaire avec un select rempli ?

Je présice que mon utilisation ce fera dans un module perso coté back office (appel de la methode $helper->generateForm(array($this->getConfigForm())); avec donc une définition du select via un array dans getConfigForm())

 

Merci d'avance :)

Link to comment
Share on other sites

Bonjour BeRoots,
 
Tu seras obligé de passer par une boucle de toute façon pour générer ta liste, comme par exemple coeos.pro te le conseille via smarty. En plus, tu peux y gérer le selected si nécessaire (confort de l'utilisateur).
Mais toi tu travailles visiblement que avec le helper ! J'ai trouvé ce lien : https://www.prestashop.com/forums/topic/313450-prestashop-16-helper-form-add-select-option/?p=1746440 et peut être que l'array() décrit dans $option pourrait te convenir.

Edited by Arnaud_69 (see edit history)
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...