Zend и phpThumb - загрузка изображений данного продукта или статьи - PullRequest
0 голосов
/ 19 апреля 2011

Допустим, я знаю, как загрузить изображение с помощью Zend.Допустим, я знаю, как сгенерировать превью этого изображения, используя класс phpThumb, интегрированный с Zend.

Где (контроллер, помощник?) должен затем связать это изображение с данной записью базы данных?Должна ли таблица базы данных продукта или статьи иметь поле с именем img path и другое с именем thumb path?Или мы должны хранить изображения в базе данных?

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

Большое спасибо

Ответы [ 2 ]

2 голосов
/ 19 апреля 2011

У нас обычно есть какой-то конкретный каталог для сохранения изображений (например, / public_html / images), и там мы храним оригиналы (обычно размер которых увеличивается до некоторого максимального размера - скажем, 1024 пикселя - после загрузки).Там также есть подкаталоги, которые называются средними и маленькими (для подробной информации о продукте и маленькой миниатюры для списка категорий).

Мы также храним изображения, используя первичный ключ продуктов (если products: images равен 1: 1) или используя PK + id (для 1: N).Затем мы легко собираем URL в помощнике вида img () следующим образом.

public function img($product, $imageId, $size = self::SMALL) {
    return sprintf('/images/%s/%s_%s.jpg', $size, $product->id, $imageId);
}

//in view - can also be wrapped in view helper - depends on your scenario
<a href="<?php echo $this->img($product, 1, 'big');?>"><img src="<?php echo $this->img($product, 1, 'small');?>" /></a>

Редактировать: Кстати: на самом деле мы никогда не используем оригиналы.Мы делаем изображения больших размеров.

Как правило, полезен помощник для изменения размера изображения.Но зависит от того, как вы загружаете свои изображения - если есть только одно действие и один контроллер - в этом нет необходимости AFAIK.Но вы можете загружать изображения также из импорта, используя FTP-загрузку и т. Д.

Связывание (если описанный выше процесс не работает для вас) изображений через БД делится на две категории - контентно-ориентированныеи изображение ориентировано.

Вы можете либо перейти к редактированию продукта, где есть кнопка, либо как «загрузить новое изображение» или «связать загруженное изображение».Другой вариант - иметь список изображений с надписью «подключиться к продукту».Очень зависит от рабочего процесса ваших пользователей.

Также есть несколько вариантов как построить свою БД.Вы можете иметь image_id в вашей таблице продуктов.Или вы можете иметь imalelink_id в своей таблице продуктов, которая ссылается на таблицу M: N, которая связывает изображения с продуктами.Также вы можете иметь product_id в вашей таблице изображений :) Все эти подходы действительны в некоторых случаях и неправильны в других.Все зависит от того, как конечные пользователи будут его использовать.

1 голос
/ 19 апреля 2011

Я обычно делаю это:

  1. Сохранить путь исходного изображения в поле mysql varchar
  2. Создание контроллера изменения размера
  3. Отключить вид и макет из контроллера
  4. Получить путь к изображению через $ this -> _ getParam ('img');
  5. Проверка
  6. Изменить размер изображения
  7. Показать изображение
  8. Внутри скрипта вида я вызываю img src = "/ resize? Img = image.jpg"

edit: Обычно в сочетании с этим я пишу собственный маршрут, чтобы избежать отображения уродливого URL в исходном коде страницы

...