PHP& Lightbox(for循环中的href指向灯箱集的最后一个文件)

时间:2014-11-13 15:40:19

标签: php lightbox2

EDITED:调试了一些代码,但问题仍然存在:

我遇到以下代码的问题是链接总是将我带到集合中的最后一个图像。我试过翻转一系列照片,但没有效果。任何帮助将不胜感激。

感谢。

            <?php
                $dir = 'pic';
                $max_albums=9;
                $albums = array_diff(scandir($dir),array('..', '.', 'thumbs'));

                foreach ($albums as $album) {
                    $albumdir = $dir.'/'.$album;
                    $coverdir = $albumdir.'/thumbs';

                    $thumbs = array_diff(scandir($coverdir),array('..', '.'));

                    //re-index $thumbs
                    $thumbs = array_values($thumbs);

                    //1 random cover image from each album
                    $rnd_min = 0;
                    $rnd_max = count($thumbs)-1;
                    $rnd_i = mt_rand($rnd_min, $rnd_max);
                    $covers = $thumbs[$rnd_i];
                    //re-index $covers
                    echo $rnd_i.'<br>';

                    //populate hrefs
                    $photos = array_diff(scandir($albumdir),array('..', '.', 'thumbs'));

                    //re-index $photos
                    $photos = array_values($photos);

                    foreach ($photos as $photo) {
                        echo '<a href="'.$albumdir.'/'.$photo.'" data-lightbox="'.$album.'">';
                    }
                    //display cover images
                    echo '<img src="'.$coverdir.'/'.$covers.'" class="img-responsive"></a>';
                }


            ?>

3 个答案:

答案 0 :(得分:0)

嗯尝试倒转scandir

$photos = array_diff(scandir($albumdir,1),array('..', '.', 'thumbs'));

答案 1 :(得分:0)

不是一个非常优雅的解决方案,但似乎有效:

<?php
    $dir = 'pic';
    $max_albums=9;
    $albums = array_diff(scandir($dir),array('..', '.', 'thumbs'));

    foreach ($albums as $album) {
        $albumdir = $dir.'/'.$album;
        $coverdir = $albumdir.'/thumbs';

        $thumbs = array_diff(scandir($coverdir),array('..', '.'));

        //re-index $thumbs
        $thumbs = array_values($thumbs);

        //1 random cover image from each album
        $rnd_min = 0;
        $rnd_max = count($thumbs)-1;
        $rnd_i = mt_rand($rnd_min, $rnd_max);
        $covers = $thumbs[$rnd_i];

        //populate hrefs
        $photos = array_diff(scandir($albumdir),array('..', '.', 'thumbs'));

        //re-index $photos
        $photos = array_values($photos);

        $countphoto = 0;

        foreach ($photos as $photo) {
            if ($countphoto==0) {
                echo '<a href="'.$albumdir.'/'.$photo.'" data-lightbox="'.$album.'">'."\n";
                //display cover images
                echo '<img src="'.$coverdir.'/'.$covers.'" class="img-responsive"></a>';
            }
            else {
                echo '<a href="'.$albumdir.'/'.$photo.'" data-lightbox="'.$album.'"></a>'."\n";
            }
            $countphoto++;
        }

    }


?>

答案 2 :(得分:0)

所以我用一个简单的if $ countphotos == 0语句在foreach($ photos as $ photo)循环中解决了这个问题,如果为0,它会显示缩略图,否则它只会输出其他imgs的锚点。

我还取消了随机缩略图作为封面,只是拉出了该集的第一个缩略图。

我现在是另一个问题,但我会为此制作一个单独的帖子。

谢谢!