Jump to content
kerlin

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.

Share this post


Link to post
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 !

Share this post


Link to post
Share on other sites

Hello ! toujours personne pour m'aider ? J'ai beau chercher sur le Net, je ne vois pas de fichier modifié en ce sens pour PS 1.7.

Merci d'avance

Share this post


Link to post
Share on other sites
Posted (edited)

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)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More