5 заметок с тегом

совы

Всё, что связано с совами

1000 сов в «Совотеке»

На момент написания этой заметки в «Совотеке» уже 1010 сов.

Любой желающий по-прежнему может выбрать сову из всех, указать нужную или взять случайную. А еще можно поиграть с совами не отходя от кассы.

Пишите в комментариях свои предложения по совершенствованию «Совотеки». Будем развиваться и расти.

Все заметки о совах в блоге ищите по тегу.

2015   сайты   совы

Новый вопрос по поводу Совотеки

Не так давно я спрашивал совета по поводу кода для генерации 100 случайных сов из базы картинок Совотеки. Мне здорово помогли, всё заработало так, как надо. Теперь у меня возник еще один вопрос. На этот раз я не знаю, можно ли его решить при помощи одного лишь только CSS-кода или нужен PHP / JavaScript. Интересно любое возможное решение.

Сейчас на сайте выводится 100 случайных сов. Но при этом не учитывается размер окна браузера пользователя, и строка некрасиво заканчивается так, как показано на картинке:

Помогите, пожалуйста, сделать так, чтобы при загрузке страницы последняя незавершенная строчка с картинками скрывалась и не портила внешний вид. Если же такой строчки нет, то не делать ничего. Знаю, что такой же механизм работает, например, на главной странице сайта студии Артемия Лебедева. Как это можно сделать?

Обновление

Дмитрий Шишкин помог решить описанную проблему. Точнее, не помог, а решил ее за меня целиком и полностью. Спасибо!

2014   вопрос   сайты   совы

Счетчик просмотров в Совотеке

В Совотеке используется такой вот скрипт для склонения счетчика сов вверху страницы. Можно ли его как-то упростить? Напишите, пожалуйста.

<?php
function pluralForm($chislo, $form1, $form2, $form5)
{
    $chislo = abs($chislo) % 100;
    $chislo1 = $chislo % 10;
    if ($chislo > 10 && $chislo < 20) return $form5;
    if ($chislo1 > 1 && $chislo1 < 5) return $form2;
    if ($chislo1 == 1) return $form1;
    return $form5;
}
echo 'У&nbsp;нас уже '.$chislo.' <a href="/about">'.pluralForm($chislo, 'сова', 'совы', 'сов').'</a>.
Можно выбрать <a href="/" title="Все совы">из&nbsp;всех</a>, указать нужную
или&nbsp;взять <a href="/random" title="Случайная сова">случайную</a>.<br />
А еще можно <a href="/memory">поиграть</a> с совами или посмотреть <a href="/video">видео</a> с их участием.';
?>

Обновление

Z6a в комментариях подсказал правильную функцию. Спасибо. Теперь всё работает, кажется, даже быстрее. Привожу новый код здесь.

<?php
echo plural_form(42, array('арбуз', 'арбуза', 'арбузов'));
function plural_form($n, $forms) {
return $n%10==1&&$n%100!=11?$forms[0]:($n%10>=2&&$n%10<=4&&($n%100<10||$n%100>=20)?$forms[1]:$forms[2]);
}
?>

Кот и Сова

Первая Книга Бессмыслиц (1846) художника Э. Лира включала в себя стихотворение «Кот и Сова».

Кот и Сова,
Молодая вдова,
Отправились по морю в шлюпке,
Взяв меду в дорогу
И денег немного
(Чтоб за морем делать покупки).
Сова, поглядев на луну,
На волну,
Запела под звон гитары:
«Ах, милый мой Кот, ты хорош
И пригож.
Давай обручимся — нигде не найдешь
Такой восхитительной пары,
Такой, такой,
Такой, такой,
Такой восхитительной пары».
«Голубушка! — Кот
В ответ ей поет. —
Как ваше прекрасно лицо!
На вас, моя птица,
Хочу я жениться,
Но где бы найти нам кольцо?»
И ночи и дни
Скитались они,
Покуда в прибрежном лесу,
У края земли,
Свинью не нашли
С кольцом обручальным в носу,
В носу, в носу,
В носу, в носу,
С кольцом обручальным в носу.
— Продашь ли колечко иль дашь нам без денег?
Свинья отвечала: Продам!
— И этим кольцом обручил их священник —
Индюк, оказавшийся там.
В тот день они ели
Бисквит, карамели,
А вечером, счастья полны,
Рука в руке,
На прибрежном песке
Плясали при свете луны,
Луны, луны,
Луны, луны,
Плясали при свете
Луны...

Как устроена Совотека

О том, что у «Совотеки» под капотом перьями.

У Совотеки все картинки-миниатюры генерируются и хранятся в отдельной папке по адресу:

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 крупного файла
}