Jump to content

Ajout d'une liste déroulante dans le module "homeslider"


Nicks

Recommended Posts

Bonjour!

 

****************************

Prestashop : 1.6.1.16

PHP: 5.6

****************************

 

J'ai besoin de personnaliser le slider de la homepage (modifier la couleur de fond en fonction du type de produit et d'autres modifications conditionnelles de ce genre...).

Pour ce faire, j'ai décidé de modifier le module "homeslider" (j'ai en fait, dupliqué le module et renommé les fichiers, class etc... en ce sens, jusque-là pas de problème, ça fonctionne bien.)

 

Ce que je souhaite faire, c'est ajouter un champ de type "select" dans l'admin, d'où je pourrai sélectionner une catégorie (une liste prédéfinie que je renseigne directement dans la class (homeslider.php)) pour ensuite utiliser ce nouveau champ en tant que classe css.

 

Ma difficulté provient du fait que lorsque j'ajoute un nouveau champ de type "select", le formulaire ne génère pas les infos de langue : quelque-chose du type : <select name="category_1" id="category_1"> (mais :  <select name="category" id="category">

 

HomeSlider.php

 

array(
'type' => 'select',
'label' => $this->l('categorie'),
'name' => 'category',
'required' => true,
'lang' => true,
'options' => array(
    'query' => $options = array(
         array(
           'id_option' => 'toto',       
           'name' => 'toto'   
        ),
        array(
         'id_option' => 'tutu',
         'name' => 'tutu'
       ),
    ),
    'id' => 'id_option',
    'name' => 'name'
  )
),

Du coup, erreur à la validation du form, pas d'enregistrement en bdd.

 

J'ai contourné le problème, vu que mon site n'est qu'en FR, en renseignant directement l'id de la langue "en dur" dans le code.

 

array(
'type' => 'select',
'label' => $this->l('categorie'),
'name' => 'category_1',
'required' => true,
'lang' => true,
'options' => array(
    'query' => $options = array(
         array(
           'id_option' => 'toto',       
           'name' => 'toto'   
        ),
        array(
         'id_option' => 'tutu',
         'name' => 'tutu'
       ),
    ),
    'id' => 'id_option',
    'name' => 'name'
  )
),

Et également dans les boucles de $lang à plusieurs endroits dans le code.

 

Du coup ca fonctionne. La catégorie est bien enregistrée dans la base, MAIS... dès que j'édite un slide, la catégorie n'est pas "selected", du coup, obligé de reséléctionner la bonne catégorie sans quoi j'update avec la première catégorie de la liste...

 

J'ai testé en créant un champ de type "text" et là aucun problème, pas besoin de bidouiller, je peux garder toutes les variables de $lang dans le code et les valeurs existantes sont bien renseignées dans le champ lors de l'édition d'un slide.

 

Ma question est donc : comment faire en sorte, dans mon cas, pour récupérer les valeurs existantes pour un champ select?

 

Merci!

 

Link to comment
Share on other sites

J'avance un peu en regardant ce qu'il se passe au niveau du tpl :

{extends file="helpers/form/form.tpl"}

J'ai donc fait quelques tests depuis ce fichier pour voir comment ca se passe pour la valeur "selected" et je vois ca :

{if $fields_value[$input.name] == $option[$input.options.id]}
       selected="selected"
{/if}

problème, si j'affiche les valeurs de ses deux variables j'ai ca :

 

{$fields_value[$input.name]} => 1 // Je devrais avoir toto et surtout je ne vois pas du tout à quoi ce chiffre fait référence...

{$option[$input.options.id]} => toto // Ok

 

 

Link to comment
Share on other sites

Bon en fait je m'étais un peu planté... La valeur correspondait à un autre champ ...

Du coup l'erreur est :

{$fields_value[$input.name]} => array

 

Du coup dans homeSlider.php :

$fields['category'] = Tools::getValue('category', $slide->category);

si je fais un var_dump($fields['category']), j'obtiens :array(1) { [1]=> string(1) "1" }

 

Donc j'imagine que je n'accède pas à la valeur car elle est dans un tableau? Comment faire pour accéder à la valeur name de ce tableau (si le problème est bien là)?

Edited by Nicks (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...