Отредактировано: отладка части кода, но проблема не устранена:
Проблема со следующим кодом заключается в том, что ссылка всегда приводит меня к последнему изображению в наборе. Я пытался изменить массив фотографий, но это не имело никакого эффекта. Любая помощь будет оценена.
Благодарю.
<?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>';
}?>
хммм попробуйте вспять скандир
$photos = array_diff(scandir($albumdir,1),array('..', '.', 'thumbs'));
Не очень элегантное решение, но оно работает:
<?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++;
}
}?>
Так что я решил эту проблему с помощью простого оператора if countphotos == 0 в цикле foreach ($ photos as $ photo), если 0, он отображал бы миниатюру, иначе он просто выводил бы привязки к другим imgs.
Я также покончил со случайным уменьшенным изображением в качестве обложки, и просто вытащил первый эскиз набора.
У меня сейчас другая проблема, но я сделаю для этого отдельную ветку.
Спасибо!