Как правильно использовать behavior?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Как правильно использовать behavior?

Сообщение zelenin »

Nex-Otaku писал(а): 2018.02.20, 10:54 Ага. Это не проблема.

Мне нравится предложенный Зелениным вариант. Лишь бы там было достаточно функциональности в преобразованиях картинок. О да, и ещё нужно оптимизировать картинки после масштабирования, иначе просядет рейтинг Google PageSpeed.
там достаточно настроек.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Как правильно использовать behavior?

Сообщение zelenin »

proctoleha писал(а): 2018.02.20, 11:13
Wizard писал(а): 2018.02.20, 10:33 по истечению времени там могут накопится превьюшки которые не используются.
Продумайте организацию хранения и удаления файлов таким образом, чтобы мусора в вашей системе не было в принципе. Имхо, это самое первое с чего нужно начинать. И, когда, начинаешь двигаться в этом направлении, то понимаешь, что готовых решений нет.
я предложил готовое решение.
proctoleha писал(а): 2018.02.20, 11:13 Например, у меня алгоритм такой.

1. Есть дерево категорий, например, дерево категорий продуктов. В БД данные хранятся в виде дерева nested sets, в FS в виде плоского списка категорий продуктов по id категории. Например: uploads/products/1, uploads/products/2, ... uploads/products/n, где цифры - это id категории.

2. К каждой категории относятся несколько продуктов, например к категории с id ==1, относятся продукты с id == 1, id == 2, id == 3. Картинки для каждого продукта также хранятся в каталоге с именем == id продукта. На моем примере продукт с id == 1 хранится в каталоге uploads/products/1/1, c id == 2 в uploads/products/1/2 и т.д.

3. Предположим, что у продукта с id == 1 есть несколько картинок и превьюх (большие превью и маленькие с какими-то размерами). Например, есть большая картинка 1.jpg (uploads/products/1/1/1.jpg) и должны быть две превьюхи.
Например:
uploads/products/1/1/small_thumb/1.jpg
и
uploads/products/1/1/large_thumb/1.jpg.

Базовое имя файла не меняется, но это разные файлы, т.к. лежат по разным адресам, и у них разные размеры, сами файлы генерируются "на лету". И превьюхи всегда доступны! Если файла нет, он генерируется.

4. Для удаления я использую fileHelper, он находит все картинки с одинаковыми базовыми именами, и мусора не остается.

Код: Выделить всё

class DeleteImages
{
    public static function deleteImages(string $dir, string $image)
    {
        $webRoot = FileHelper::normalizePath(yii::getAlias('@webroot'));

        if ($images = FileHelper::findFiles($webRoot . $dir, ['only' => [$image]])) {
            foreach ($images as $img) {
                unlink($img);
            }
        }
    }
}
=====================
Я не утверждаю, что это идеальный алгоритм, но тем не менее мусора в виде превьюх у меня нет.
вот мой алгоритм - хранится оригинал, режется с помощью imgproxy https://github.com/DarthSim/imgproxy, кэшируется нджинксом.
Немного проще, правда?
Ответить