11521 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

J'utilise un popup particulier qui fonctionne déjà dans mon site.
C'est le popup suivant
http://sohtanaka.developpez.com/tutoriels/javascript/creez-fenetre-modale-avec-css-et-jquery/

Maintenant, je voudrais utiliser ce même popup mais pour ouvrir non pas une page mais un document pdf.
Et là je n'y arrive pas du tout. Je ne sais pas comment faire.

J'essai de passer le nom du document en variable et utilise du javascript....
Mais je pense que ce n'est pas ça ...

j'ai essayé (pour l'image où l'on clique et on obtient le popup

<a class="poplight" href="#" data-width="630"  data-rel="fichesbouteilles"  data-nom-evenement="<?php echo $pdf_champagne1; ?>"   >
<img class="champagne" src="<?php echo $logo_champagne1; ?>" alt="Champagner Trichet-Didier" > 
 </a> 


mais après j'avoue que dans le data-rel="fichesbouteilles", je ne sais pas quoi mettre pour que cela soit
Directement le pdf qui s'ouvre....

Quelqu'un a déjà utilisé ce type de popup ?
vous avez des conseils?

merci beaucoup pour votre aide

TImama
Bonjour Timama,
pour intégrer un pdf à une page web (même s'il ne s'agit pas d'une lightbox) la meilleure méthode est selon moi d'avoir recours à une iframe (en admettant que tous les navigateurs puissent lire des pdf...):

<a class="poplight" href="#" data-width="630" data-rel="fichesbouteilles">
    <img class="champagne" src="<?= htmlentities($logo_champagne1) ?>" alt="Champagner Trichet-Didier" > 
</a>

<div class="popup_block" id="fichesbouteilles">
    <iframe src="<?= htmlentities($pdf_champagne1) ?>"></iframe>
</div>



Ensuite pense à styler ton iframe pour qu'elle ressemble à quelque chose:

#fichesboutielles iframe {
    width: 100%;
    height: 100%;
    border: none;
    display: block;
}

Modifié par juliendargelos (07 Jul 2016 - 20:04)
merci beaucoup juliendargelos pour cette réponse.

J'aimerai ne pas utiliser d'Iframe pas mesure de sécurité Smiley cligne

En fait, j'ai modifié une chose à ce que je souhaite faire (car je cherche toujours).
MAintenant j'essai d'ouvrir une image.

En gros:
Je souhaite récupérer une donnée javascript (chemin vers un image) que je passe dans un popup.

Le popup doit ouvrir cette image. Mais je n'arrive pas à récupérer cette donnée dans le popup.
Faut il la récupérer en PHP avec Ajax?

J'ai cherché dans le forum...j'ai trouvé des choses similaires mais les codes étaient tous très compliqués...

Pour résumé, J'ai la balise <a> qui est une image sur laquelle on clique et qui ouvre un popup:


<a class="poplight" href="#" data-width="630"  data-rel="fichesbouteilles"   data-nom-Jpg="<?php echo $pdf_champagne1; ?>" data-nom-nomJpg="<?php echo $pdf_champagne1; ?>" >


avec le script suivant :


script type="text/javascript">
 
jQuery(function($){
                                    
    $('a.poplight').on('click', function() {
        var popID = $(this).data('rel'); //Trouver la pop-up correspondante
        var popWidth = $(this).data('width'); //Trouver la largeur

       $(".dataJpgPopup").replaceWith("$nomfichierimage =" + $(this).data("nomImage") + ";");
 
....... (j'ai pas tout mis)
 
return false;
    });



et

<div id="fichesbouteilles" class="popup_block">
       <p> haut </p>
        
       <?php echo '<div class="dataJpgPopup"></div>  ' ?>
               
         
        <img src="<?php echo $nomfichierimage ; ?>" >
        <p> bas</p>
  
 
</div>


mais quand je regarde l'inspecteur de firefox, cela me donne

<p> haut </p>

$nomfichierimage =http://champagner-pierre-trichet.de/wp-content/uploads/2016/07/2016_BESCHREIBUNG_Champagner-Pierre-TRICHET_BRUT-Premium_WEB-.jpg;

<img src="" +="" $(this).data("nomnomjpg")="" ""="">

<p> bas</p>

donc le chemin passe mais je n'arrive pas à bien le récupérer....
JE continue à chercher... si quelqu’un à une idée?

merci
Modérateur
Bonjour
Timama a écrit :

J'aimerai ne pas utiliser d'Iframe pas mesure de sécurité Smiley cligne

Pourquoi? En quoi jugez-vous l'iframe peu sécurisée dans ce cas? L'Iframe en interne ne pose aucun problème, pour insérer du contenu externe, c'est plutôt la bonne façon de procéder du point de vue de la sécurité.
Modérateur
Hello,

Je suis d'accord avec Kusto, on peut reprocher pas mal de chose à l'iframe mais pas la sécurité...


J'ai justement essayé de faire la même chose la semaine passée, voici mon résultat : http://codepen.io/anon/pen/QErZGQ

Au niveau des navigateurs, ceux que j'ai pu essayer (Chrome, Firefox, IE11, Edge), tous avait le zoom/dézoom et print de base sauf Edge. Il faut encore que je test sur mon mac pour le reste.
merci beaucoup pour vos réponses !

okay, je croyais pourtant (en lisant plusieurs info dessus sur le net) que les iframes étaient à éviter.

Soit, okay, j'utilise les Iframes.

Mais cela ne règle pas mon problème de passage de "chemin vers l'image" utilisé par le popup et l'iframe maintenant..en fait, j'ai une liste de pdf à ouvrir , tous différents mais pour chaque pdf il me met toujours le dernier pdf.

donc j'ai toujours mon problème de passage de données..... Smiley rolleyes
problème de javascript à mon avis....je ne la passe pas bien et j'y arrive pas depuis le debut..


je continue à chercher.... si quelqu'un peut m'aider sur le javascript car c'est là que j’apprends ..encore Smiley biggrin

merci beaucoup !
Voilà, j'ai trouvé ma ligne de code qui fonctionne pour bien faire passer la donnée "chemin vers l'image".


		 $(".dataJpgPopup").replaceWith(" <img src=\"  " + $(this).data("nomImage") + " \" >");




merci pour votre aide !
bonjour à tous.

Bon alors, j'ai encore un problème.
J'ai bien utilisé la ligne de code ci-dessus, l'image s'ouvre dans le popup sans problème.

Le problème est le suivant : j'ai une suite d'images (bouteilles) affichées. et quand on clique cela ouvre une autre image (détails de la bouteille). Bien sûr toutes les images qui s'ouvrent sont différentes.

Mais pour moi, ce n'est pas le cas. Quand je clique sur la bouteille n°1, cela ouvre une image A, puis sur une seconde bouteille cela ouvre la même image A (ce qui ne devrait pas arriver).
Si je reloade le site, et que je clique sur la bouteille n°2, cela ouvre bien l'image B, mais quand je clique sur la bouteille n°1, cela ouvre également l'image B.
En gros, cela ouvre seulement la première image chargée.

Je rappelle mon code là où j'ai mes images (de bouteilles) sur lesquelles je clique pour ouvrir un popup :

                    <div id="bouteilles-contentleft">
							<?php 
                                $args_champagne1= array(
                                'post_type' => 'champagne1',
                                'orderby'   => 'meta_value_num',
                                'meta_key'  => 'ordre_champagne1',
								'posts_per_page' =>-1,
                                'order'     => 'asc',
                                );
                        
                                $the_champagne1 = new WP_Query($args_champagne1);
									
                                while ($the_champagne1->have_posts()) : 
                                    $the_champagne1->the_post();
                                    $nom_champagne1 = get_post_meta($post->ID,'nom_champagne1',true);
                                    $ordre_champagne1 = get_post_meta($post->ID,'ordre_champagne1',true);
                                    $sousnom_champagne1 = get_post_meta($post->ID,'sousnom_champagne1',true);
                                    $logo_champagne1 = get_post_meta( $post->ID, 'logo_champ1', true );
                                    $pdf_champagne1 = get_post_meta( $post->ID, 'pdf_champ1', true );
									
                            ?>
                            
                            
                        <div class="bouteille">                   

                    <a class="poplight" href="#" data-width="630"  data-rel="fichesbouteilles"    data-nom-image="<?php echo $pdf_champagne1; ?>" >
                              <img class="champagne" src="<?php echo $logo_champagne1; ?>" alt="Champagner Trichet-Didier" > 
                           </a> 
                           <div class="underline-bouteille"> </div>
                           <p class="bouteille-nom"><?php echo $nom_champagne1; ?> </p>
                           <p class="bouteille-sousnom"> <?php echo $sousnom_champagne1; ?></p> 
                        </div>
					<?php 
                      endwhile;
                      wp_reset_postdata(); 	
                    ?>
                    </div> <!--fin bouteilles-contentleft -->
         


Le javascript qui fait passer le chemin vers l'image à ouvrir dans le popup:

<script type="text/javascript">

jQuery(function($){
						   		   
	//Lorsque vous cliquez sur un lien de la classe poplight
	$('a.poplight').on('click', function() {
		var popID = $(this).data('rel'); //Trouver la pop-up correspondante
		var popWidth = $(this).data('width'); //Trouver la largeur

		// passage de l'id de l'évènement dans le popup pour inscription en ligne
		 $("#inscriptionenligneform").append("<input type=\"hidden\" name=\"idEvenement\" value=\"" + $(this).data("idEvenement") + "\"/>");
		 $(".nomEvenementFormulaire").replaceWith("<div class=\"nomEvenementFormulaire\">" + $(this).data("nomEvenement") + "</div>");
		 
		 $("#inscriptionenligneformmob").append("<input type=\"hidden\" name=\"idEvenement\" value=\"" + $(this).data("idEvenement") + "\"/>");
		 $(".nomEvenementFormulairemob").replaceWith("<div class=\"nomEvenementFormulairemob\">" + $(this).data("nomEvenement") + "</div>");
		 
		 //$(".dataJpgPopup").replaceWith(" <img src=\"  " + $(this).data("nomImage") + " \" >");
		 $(".dataJpgPopup").replaceWith("<img src="+$(this).data("nomImage")+" \ >");

		//Faire apparaitre la pop-up et ajouter le bouton de fermeture
		$('#' + popID).fadeIn().css({ 'width': popWidth}).prepend('<a href="#" class="close"><img src="http://champagner-pierre-trichet.de/wp-content/themes/pierretrichet/images/close-popup.png" class="btn_close" title="Close Window" alt="Close" /></a>');
		
		//Récupération du margin, qui permettra de centrer la fenêtre - on ajuste de 80px en conformité avec le CSS
		var popMargTop = ($('#' + popID).height() + 80) / 2;
		var popMargLeft = ($('#' + popID).width() + 80) / 2;
		
		//Apply Margin to Popup
		$('#' + popID).css({ 
			'margin-top' : -popMargTop,
			'margin-left' : -popMargLeft
		});
		
		//Apparition du fond - .css({'filter' : 'alpha(opacity=80)'}) pour corriger les bogues d'anciennes versions de IE
		$('body').append('<div id="fade"></div>');
		$('#fade').css({'filter' : 'alpha(opacity=80)'}).fadeIn();
		$('#content').css({'position' : 'fixed'}).fadeIn();
		
		return false;
	});
	
	
	//Close Popups and Fade Layer
	$('body').on('click', 'a.close, #fade', function() { //Au clic sur le body...
		$('#fade , .popup_block').fadeOut(function() {
			$('#fade, a.close').remove();
			$('#content').css({'position' : 'relative'}).fadeIn();
	}); //...ils disparaissent ensemble
		
		return false;
	});

	
});
</script>


et le popup


<div id="fichesbouteilles" class="popup_block"> 
       <div class="dataJpgPopup"></div>   
</div>


au cas où, un lien vers le site :
http://champagner-pierre-trichet.de/

C'est bizarre car j'utilise la même technique dans ce site pour un formulaire d'inscription.
Et cela fonctionne bien.

Si quelqu'un à une remarque, un conseil merci beaucoup !

Timama (je cherche toujours et encore)
Modérateur
Hello,

Le soucis vient de cette ligne :
$(".dataJpgPopup").replaceWith("...")


En fait, tu as bien dans ton DOM au chargement le div.dataJpgPopup et à l'ouverture tu le remplace par ton image. Ce qui fait que la seconde fois, il ne trouve plus ton div...

Une solution serait de faire un .html() à la place de replaceWith() et avant de charger ton image, tu supprimes les éléments enfants de ce div.

Une autre serait d'injecter l'image comme tu le fais mais seulement si elle n'existe pas, et dans le cas contraire, de remplacer uniquement son attr('src')...
Modifié par Yordi (14 Jul 2016 - 13:11)
alors j'ai testé .... oui je sais je suis lente..

mais ça à l'air de fonctionner Yordi !
avec le .html parce que j'ai pas compris le coup d'injecter l'image mais seulement si elle n'existe pas Smiley eek


bon, j'ai juste l'image qui sort écrasée mais ça doit pas être bien difficile à modifier...
en tout cas, j'ai les bonnes fiches de bouteilles qui sortent !

et j'ai juste changé

$(".dataJpgPopup").replaceWith("<img src="+$(this).data("nomImage")+" \ >");


avec


(".dataJpgPopup").html("<img src="+$(this).data("nomImage")+" \ >");


Donc un grand merci Yordi !!! Smiley cligne
bon, je dis pas que je ne reviendrais pas dans ce sujet mais pour le moment, c'est résolu !