1

probably a simple thing but I can't think of an easy and good solution …

I want to load one of three videos randomly on page load …

  <video loop autoplay class="StretchtoFit">
    <source src="assets/videos/cloud.mp4" type="video/mp4">
    <source src="assets/videos/cloud.ogg" type="video/ogg">
    <source src="assets/videos/cloud.webm" type="video/webm">
  </video>
  <video loop autoplay class="StretchtoFit">
    <source src="assets/videos/bath.mp4" type="video/mp4">
    <source src="assets/videos/bath.ogg" type="video/ogg">
    <source src="assets/videos/bath.webm" type="video/webm">
  </video>
  <video loop autoplay class="StretchtoFit">
    <source src="assets/videos/train.mp4" type="video/mp4">
    <source src="assets/videos/train.ogg" type="video/ogg">
    <source src="assets/videos/train.webm" type="video/webm">
  </video>

The webpage is php-based. Is there any easy way to use a one of the three tags on random and don't load the other two?

How would you do that?

mcont
  • 1,749
  • 1
  • 22
  • 33
matt
  • 42,713
  • 103
  • 264
  • 397

2 Answers2

5

PHP:

$videos = array('cloud', 'bath', 'train');
$i = rand(0, count($videos) - 1); // between 0 and $videos count minus 1

HTML:

<video loop autoplay class="StretchtoFit">
 <source src="assets/videos/<?= $videos[$i]; ?>.mp4" type="video/mp4">
 <source src="assets/videos/<?= $videos[$i]; ?>.ogg" type="video/ogg">
 <source src="assets/videos/<?= $videos[$i]; ?>.webm" type="video/webm">
</video>

I'm using the short hand tag for echoing (<?php echo), <?=. Please make sure short_open_tag is enabled in your php.ini. Of course, you'll find out soon enough if it doesn't work.

Mave
  • 2,413
  • 3
  • 28
  • 54
  • 1
    To make this extensible: `$i = rand(0, count( $videos = array('cloud', 'bath', 'train') ) - 1 );` and it should be `$videos[$i]` instead of `$i`. – Ismael Miguel Dec 12 '14 at 12:58
  • 1
    @Pankucins: http://programmers.stackexchange.com/questions/151661/is-it-bad-practice-to-use-tag-in-php - the benefits severely outweigh the consequences. But, of course, to each their own ;). – Mave Dec 12 '14 at 13:00
  • 2
    Don't worry, you still got my upvote. And you should point out what @Pankucins said. You should mention that this depends on the configuration `short_open_tag=1;` on php.ini and alternatively post a second block using echo. – Ismael Miguel Dec 12 '14 at 13:00
  • 1
    I don't agree with using echo, in this case. It's less readable, never heard of anyone actually having a problem with it, and even if you do, it will take you maybe 30 seconds of searching to solve it. – Ruan Mendes Dec 12 '14 at 13:41
1
<?php 
    $videos = ['cloud', 'bath', 'train'];
    $max    = count($videos);       // gives 3 
    $i      = rand(0, $max - 1);    // we need 0 to 2 
    $exts   = ['mp4','oog','webm']; // oog is not needed
?>

<video loop autoplay class="StretchtoFit">
<?php 
    foreach($exts as $ext):
        echo '<source src="assets/videos/'. $videos[$i].$ext. '" type="video/'. $ext .'">';
    endforeach; 
?>
</video>
aWebDeveloper
  • 36,687
  • 39
  • 170
  • 242