2010-11-10 6 views
0

Je me demande si je pourrais le faire plus facilement. Il vérifie si $content a un lien YouTube à l'intérieur. Si elle le fait, il exécute un jQuery $.getJson pour obtenir la vignette de celui-ci et ainsi ...Est-ce que cela peut être/simplifié?

Mais je l'ai trouvé très bâclée faite par moi, mais comment devrait-il être codé:

$isY = preg_match("#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=[0-9]/)[^&\n]+|(?<=v=)[^&\n]+#", $content, $matches); 

if($isY) { 
    foreach(array_unique($matches) as $m) { 
    ?> 
    <script> 
     $.getJSON (
     'http://gdata.youtube.com/feeds/api/videos/<?php echo $m; ?>?v=2&alt=json-in-script&callback=?', 
     function(data) { 
      youtubeFetchDataCallback(data, <?php echo $show['id']; ?>); 
     } 
    ); 
    </script> 
    <?php 
    } 
} 

Ou est-ce correct?

+1

mise en forme est terrible – Andrey

Répondre

1

Je pense que la partie la plus désordonnée est la commutation de contexte. J'utiliser l'interpolation de chaîne, et d'ouvrir une seule étiquette <script>:

<?php 
if (preg_match("#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=[0-9]/)[^&\n]+|(?<=v=)[^&\n]+#", $content, $matches)) { 
    echo '<script type="text/javascript">'; 

    foreach(array_unique($matches) as $m) { 
    echo " 
     $.getJSON (
     'http://gdata.youtube.com/feeds/api/videos/$m?v=2&alt=json-in-script&callback=?', 
     function(data) { 
      youtubeFetchDataCallback(data, $show[id]); 
     } 
    ); 
    "; 
    } 

    echo '</script>'; 
} 
0

Pour avoir quelque chose de plus propre, vous pouvez écrire un tableau javascript dans votre code php, puis, en javascript, vous pouvez parcourir ce tableau et obtenir toutes les vignettes.

Si sera mieux que ces multiples <script>....</script>

Quelque chose comme (non testé):

<script type="text/javascript"> 
var Videos = new Array(
<? 
if($isY) 
    foreach(array_unique($matches) as $m) 
     echo '"'.$m.'",' 
?> 
); 
for (v in Videos) 
    $.getJSON('http://gdata.youtube.com/feeds/api/videos/'+v+'?v=2&alt=json-in-script&callback=?', function(data) { 
youtubeFetchDataCallback(data, <?php echo $show['id']; ?>); 
}); 
</script> 
0

Vous pouvez le faire à la place ... un peu plus propre:

$string = "#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=[0-9]/)[^&\n]+|(?<=v=)[^&\n]+#"; 
     if(preg_match($string, $content, $matches);): 
      foreach(array_unique($matches) as $m): 
      ?> 
      <script> 
$.getJSON('http://gdata.youtube.com/feeds/api/videos/<?php echo $m; ?>?v=2&alt=json-in-script&callback=?', function(data) { 
youtubeFetchDataCallback(data, <?php echo $show['id']; ?>); 
}); 
      </script> 
      <?php 
      endforeach; 
     endif; 
+0

je crois que cela fait bien pire ... – meagar

0

Il est déjà plus facile si vous le formatez bien:

if($isY){ 
    echo "<script>"; 

    foreach(array_unique($matches) as $m){ 
     echo "$.getJSON('http://gdata.youtube.com/feeds/api/videos/{$m}v=2&alt=json-in- script&callback=?', function(data) { 
youtubeFetchDataCallback(data,{$show['id']});"; 
     echo "});"; 
    } 

    echo "</script>"; 
} 

Vous avez raison de ne pas utiliser une regex pour cela. Le code est correct (pas besoin de répéter l'étiquette de script, cependant) - viser la maintenabilité.