2017-09-11 4 views
0

J'ai un fichier php qui est requis plusieurs fois, y compris un petit extrait jquery qui est censé fonctionner à chaque instance le php le fichier est inclus. Cependant, il semble que jquery s'exécute tout à la fois parce que j'obtiens des variables à la fois et non à chaque instance. Donc, mon fichier php qui comprend un autre nombre de fois fichier php est
base-features.phpY compris un fichier PHP muliple fois qui a script jquery à l'intérieur, le script ne s'exécute pas à chaque instance

<?php 

    $youtubelinks = array(
     '0' => 'https://www.youtube.com/embed/NilASeqRsjw' 
     '1' => 'https://www.youtube.com/embed/eXG8PbwmUJw' 
); 

    foreach($youtubelinks as $key => $val) { 
    $ytlink = $val; 
    require('youtubelink.php'); 

    } 

Sur mon youtubelink.php je peux voir la variable $ytlink

<div id="page-corporate-video-overlay" class="page-corporate-video-overlay"> 
    <div class="container"> 
     <div class="row block"> 
      <div class="col-md-12"> 
       <?php print $ytlink ?> 
       <p><span class="video-play-icon"></span><p> 
      </div> 
     </div> 
    </div> 
    </div> 
<div class="page-corporate-video"> 
    <div class="container"> 
     <div class="row"> 
      <div class="col-md-12"> 
       <div class="inner"> 
        <iframe id="corporate-video" class="page-corporate-video-iframe" width="100%" height="100%" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe> 
       </div> 
      </div> 
     </div> 
    </div> 
</div> 


<!--The jquery script I am having problem with--> 
<script type="text/javascript"> 
    jQuery(document).ready(function() { 
     var videoYoutube = "<?php print $ytlink; ?>" 

    $('.page-corporate-video-overlay').click(function() { 
     $('html, body').animate({ 
      scrollTop: $(this).closest("div.page-corporate-video-overlay").offset().top-15 
     }, 500); 

     $(this).hide(); 

     console.log(videoYoutube); 
     $(this).closest('div.base-feature').css({'background-image':'none','height':'auto'}); 
     $(this).next('div.page-corporate-video').find('.page-corporate-video-iframe').attr('src',videoYoutube+"?controls=0&rel=0&showinfo=0&enablejsapi=1&autoplay=1&modestbranding=1&theme=light"); 
     $(this).next('div.page-corporate-video').show(); 
    }); 
}); 

Alors, quand je clique sur .page-corporate-video-overlay', I get two values of the videoYoutube `variable. Cela me cause des problèmes pour intégrer la bonne vidéo sur l'iframe car seule la dernière valeur est incorporée au lieu que chaque iframe obtienne une valeur de variable youtube relative pendant l'instance de chaque boucle.

+0

Ce bit '$ ('. Page-corporate-video-overlay')' passe à travers * tous * les divs '.page-corporate-video-overlay' à chaque fois. Ainsi, seul le dernier restera, les précédents ayant été écrasés. –

+1

Considérons un refactor - placez '$ ytlink' en tant que' data-ytlink' sur la div '.page-corporate-video', puis ayez une seule méthode jquery doc ready (pas la même par lien) qui lit' videoYoutube' à partir de l'attribut de données. –

+0

@ freedomn-m Merci pour votre réponse rapide et suggestion de refactoring très utile. Je l'ai fait exactement comme tu l'as dit et je l'ai fait fonctionner. Je vais poster une réponse basée sur votre suggestion de refactoring. –

Répondre

0

Grâce au commentaire de @ freedomn-m j'ai refaçonné mon code selon sa suggestion.

refactorisé youtubelink.php

Tout est presque le même, sauf que j'ajouté un attribut supplémentaire sur le div.page-corporate-video-overlay de data-ytlink ="<?php print $ytlink;?>" et sur mon Jquery dans mon cas de fonction de clic j'ai ajouté

var videoYoutube = $(this).attr('data-ytlink'); 

Maintenant, je suis en mesure d'intégrer vidéos correctement.