Как устроена Совотека
У Совотеки все картинки-миниатюры генерируются и хранятся в отдельной папке по адресу:
sovoteka.ru/i/s/
Большие версии тех же картинок хранятся отдельно по адресу:
sovoteka.ru/i/
Всего в «Совотеке» сейчас 903 совы и для удобства каждая картинка подписывается автоматически.
Например, 100-я сова в миниатюрке имеет адрес: sovoteka.ru/i/s/sovoteka_100_s.jpg. У нее всегда размер 95×95 пикселей. Ее увеличенная копия имеет адрес: sovoteka.ru/i/sovoteka_100.jpg. Размер у нее непредсказуем.
Нужно написать такой скрипт на PHP, чтобы он смог проделать следующее:
- автоматом подсчитать, сколько сов уже есть на сайте (я это делал через переменную, которая считает количество файлов, например, в папке /i/s/. Сколько уменьшенных копий — столько сов на сайте);
- из множества сов выбрать 50 случайных и вывести их на экран (это можно через генерацию случайных чисел сделать, я их подставлял в имена файлов, ведь в них меняется только число — sovoteka_$chislo_s.jpg, к примеру). Важно, чтобы эти 50 сов не были повторяющимися — с этим проблемы. Случайные совы генерируются каждый раз при обновлении страницы — каждый раз разные картинки.
Результат выполнения PHP-скрипта — HTML-код вида:
<a href="/i/sovoteka_518.jpg"><img src="/i/s/sovoteka_518_s.jpg" width="95" height="95"></a>
<a href="/i/sovoteka_431.jpg"><img src="/i/s/sovoteka_431_s.jpg" width="95" height="95"></a>
Сейчас у меня такой код вышел:
$chislo = sizeof(glob('i/*.*'));
// Подсчитываю, сколько картинок в папке, следовательно столько сов на сайте
$arr = range(1, $chislo);
// Делаю случайное число от 1 до числа сов на сайте
shuffle($arr);
// Мешаю числа
for ($i=0; $i < count($arr); $i+=11) {
// Зацикливаю вывод
echo '<a class="imgs_group" rel="gal" href="/i/sovoteka_'.$arr[$i].'.jpg">
<img src="/i/s/sovoteka_'.$arr[$i].'_s.jpg" width="95" height="95" class="ingal"></a>';
// Подставляю созданные номера в HTML — костыль, в общем.
}
С наибольшей степенью вероятности могу утверждать, что этот код — костыль. Если у вас есть предложения по решению данной задачи, отпишитесь в комментариях.
Обновление
Спасибо Антону Сюваеву за помощь в коде. Теперь совы генерируются как надо — с выборкой из массива и проверкой на повторы.
$files = glob('i/s/*.jpg');
$rand_keys = array_rand($files, 50); // 50 случайных ключей из массива
foreach ($rand_keys as $pos) {
$thumb_name = $files[$pos];
$full_name = str_replace(array('/s','_s'),'',$thumb_name);
echo '{$thumb_name}\n'; // url мелкого файла
echo '{$full_name}\n\n'; // url крупного файла
}
примерно так можно сделать:
$files = glob(’i/s/*.jpg’);
$rand_keys = array_rand($files, 50); // 50 случайных ключей из массива
foreach ($rand_keys as $pos) {
$thumb_name = $files[$pos];
$full_name = str_replace(array(’/s’,’_s’),’’,$thumb_name);
echo «{$thumb_name}\n»; // url мелкого файла
echo «{$full_name}\n\n»; // url крупного файла
}
Антон, спасибо! Вы просто спаситель Совотеки.