Jump to content

PS 1.7 afficher la description du contact sur le formulaire


Recommended Posts

Bonjour, j'ai fait la migration d'un PS 1.6.1.4 vers 1.7.2.4 et je dois récupérer les scripts personnalisés qui avaient été réalisés sur l'ancienne mouture.

Là, j'ai un souci pour afficher les descriptions de contact sur la page contact, selon le contact sélectionné. J'ai récupéré le code de l'ancienne version, je vois bien les descriptions dans l'inspecteur, mais elles ne s'affichent pas selon les contacts choisis. A première vue c'est le onchange qui ne fonctionne pas.
Voici le code

 <div class="form-group row">
          <label class="col-md-3 form-control-label">{l s='Subject' d='Shop.Forms.Labels'}</label>
          <div class="col-md-6">
          {foreach from=$contact.contacts item=contact_elt}
          <input type="hidden" name="id_contact" value="{$contact_elt.id_contact}" />
          {/foreach}
            <select id="id_contact" name="id_contact" class="form-control form-control-select" onchange="showElemFromSelect('id_contact', 'desc_contact')">
              {foreach from=$contact.contacts item=contact_elt}
                <option value="{$contact_elt.id_contact}">{$contact_elt.name}</option>
              {/foreach}
            </select>
            <div class="col-md-6">
            <p id="desc_contact0" class="desc_contact"></p>
                    {foreach from=$contact.contacts item=contact_elt}
                        <p id="desc_contact{$contact_elt.id_contact|intval}" class="desc_contact" style="display:none;">
                            {$contact_elt.description}
                        </p>
                    {/foreach}

            </div>
          </div>
        </div>

Je n'ai pas trouvé dans les fichiers de l'ancienne installation le js qui contiendrait la function showElemFromSelect créée pour cela. Si quelqu'un peut me dire ce que je dois ajouter, je lui en serais très reconnaissante !

Tout ce que j'ai trouvé, c'est dans tools.js ceci :

function showElemFromSelect(select_id, elem_id)
{
	var select = document.getElementById(select_id);
	for (var i = 0; i < select.length; ++i)
	{
	    var elem = document.getElementById(elem_id + select.options[i].value);
		if (elem != null)
			toggle(elem, i == select.selectedIndex);
	}
}

Mais j'ai trouvé la même chose dans le tools.js de PS 1.7 donc il doit y avoir une customisation quelque part sur laquelle je n'arrive pas à mettre la main.

Merci d'avance.

Link to comment
Share on other sites

Personne ne peut m'aider ?

En attendant, je cherche, je cherche ... et je m'ararcheles cheveux. Je vous fais grâce de tous mes essais mais voilà le dernier en date :

J'ai ajouté un script direct dans le fichier tpl (un seul fichier sur lequel travailler ça simplifie) :

<div class="form-group row">
          <label class="col-md-3 form-control-label">{l s='Subject' d='Shop.Forms.Labels'}</label>
<script type="text/javascript">
{literal}
$(document).ready(function(){
    $("select").change(function(){
        $(this).find("option:selected").each(function(){
            var optionValue = $(this).attr("value");
            if(optionValue){
                $(".desc_contact").not(".desc_contact" + optionValue).hide();
                $(".desc_contact" + optionValue).show();
            } else{
                $(".desc_contact").hide();
            }
        });
    }).change();
});
{/literal}
</script>
          <div class="col-md-6">
            <select id="id_contact" name="id_contact" class="form-control form-control-select">
            <option value="0">{l s='Choisir...'}</option>
              {foreach from=$contact.contacts item=contact_elt}
                <option value="{$contact_elt.id_contact}"  {if isset($smarty.post.id_contact) && $smarty.post.id_contact == $contact_elt.id_contact} {/if}>{$contact_elt.name}</option>
              {/foreach}
            </select>

           </div>

            <p id="desc_contact0" class="desc_contact"></p>
                    {foreach from=$contact.contacts item=contact_elt}
										<div class="desc_contact desc_contact{$contact_elt.id_contact|intval}">
                        <p class="{$contact_elt.id_contact|intval}_desc_contact_p">
                            {$contact_elt.description}
                        </p>
                        </div>
                    {/foreach}



          </div>

et dans le css :

.desc_contact{
display:none;
}

Dans l'inspecteur, je vois bien mes div cachées. mais quand je sélectionne une option, aucune div n'apparaît. Prestashop 1.7 ne comprend pas hide() et show() ???

Merci d'avance pour vos lumières !

Link to comment
Share on other sites

  • 2 months later...

Hello,

Il est surement trop tard, mais je viens de résoudre ce même problème :
 

<script type="text/javascript">
   function showElemFromSelect(select_id, elem_id)
{
	var select = document.getElementById(select_id);
	for (var i = 0; i < select.length; ++i)
	{
	    var elem = document.getElementById(elem_id + select.options[i].value);
		if (elem != null)
			 if (i == select.selectedIndex)
			 {
				elem.style.display="block";
			}
			else
			{
				elem.style.display="none";
			}
	}
}
</script>
<div class="form-group row">
          <label class="col-md-3 form-control-label">{l s='Subject' d='Shop.Forms.Labels'}</label>
          <div class="col-md-6">
            <select name="id_contact" id="id_contact" class="form-control form-control-select" onchange="showElemFromSelect('id_contact', 'desc_contact')">
              {foreach from=$contact.contacts item=contact_elt}
                <option value="{$contact_elt.id_contact}">{$contact_elt.name}</option>
              {/foreach}
            </select>
			{foreach from=$contact.contacts item=contact_elt}
               <p id="desc_contact{$contact_elt.id_contact}" class="desc_contact" style="display:none;">
                            {$contact_elt.description}
               </p>
             {/foreach}
          </div>
  <script type="text/javascript">
			showElemFromSelect('id_contact', 'desc_contact');
		  </script>
</div>

J'ai seulement rajouté l'ID sur le select et repris en local la fonction que j'ai légèrement corrigé.

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