Вставка изображения из модуля

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
de1phi
Сообщения: 145
Зарегистрирован: 2013.12.23, 20:02

Вставка изображения из модуля

Сообщение de1phi »

Я создал свой модуль News, в нем создал папку uploads, в которую загружаются фотографии. На главной странице сайта пытаюсь вывести изображение

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

$image = Yii::getAlias('modules/news/uploads/') . 'image.jpg';
echo Html::img(Yii::$app->request->baseUrl . $image); 
получаю 404 ошибку

в firebug src картинки выглядит вот так - /modules/news/uploads/image.jpg
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: Вставка изображения из модуля

Сообщение vova07 »

Вы должны использовать "assets".
de1phi
Сообщения: 145
Зарегистрирован: 2013.12.23, 20:02

Re: Вставка изображения из модуля

Сообщение de1phi »

vova07 писал(а):Вы должны использовать "assets".
ух ты, а если в будущем у меня будет больше тысячи изображений, которые каждый день будут редактироваться. Так все они будут перезаписываться в папку assets? Как то не комильфо, сейчас база изображений занимает больше 1гб...
Аватара пользователя
mihail_dev
Сообщения: 243
Зарегистрирован: 2013.07.17, 00:51
Откуда: Молдова
Контактная информация:

Re: Вставка изображения из модуля

Сообщение mihail_dev »

вам нужно сделать отдельную папку типа path_to_webroot/files
далее

/*$imageFullPath = Yii::getAlias('@webroot/files') . '/image.jpg'; - навсяк может пригодится*/
$imageUrl = Yii::getAlias('@web/files') . '/image.jpg';
echo Html::img($imageUrl);
Изображение
de1phi
Сообщения: 145
Зарегистрирован: 2013.12.23, 20:02

Re: Вставка изображения из модуля

Сообщение de1phi »

mihail_dev писал(а):вам нужно сделать отдельную папку типа path_to_webroot/files
далее

/*$imageFullPath = Yii::getAlias('@webroot/files') . '/image.jpg'; - навсяк может пригодится*/
$imageUrl = Yii::getAlias('@web/files') . '/image.jpg';
echo Html::img($imageUrl);
так работает, но ведь нарушается логическая структура папок( хотелось бы, чтобы все что относилось к модулю, находилось в его папке.

При использовании assets как избежать кеширования изображений?
echo Html::img($imageUrl . '?_=' . rand()); - прокатит?
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: Вставка изображения из модуля

Сообщение vova07 »

de1phi писал(а):ух ты, а если в будущем у меня будет больше тысячи изображений, которые каждый день будут редактироваться. Так все они будут перезаписываться в папку assets? Как то не комильфо, сейчас база изображений занимает больше 1гб...
Ваш сарказм неуместен. Вы задали конкретный вопрос, я написал конкретный ответ. "Asset" в случае с модулями единственное решение, а для того чтобы нагрузку уменьшить есть "symlink"-и. Если такой вариант не подходит, вам уже описали один менее затратный.
Аватара пользователя
mihail_dev
Сообщения: 243
Зарегистрирован: 2013.07.17, 00:51
Откуда: Молдова
Контактная информация:

Re: Вставка изображения из модуля

Сообщение mihail_dev »

Вообще AssetManager предназначен для работы с вёрсткой публикация стилей скриптов и тому подобной всякой всячины.
Для других целей этот инструмент мало подходит!

по поводу
echo Html::img($imageUrl . '?_=' . rand()); - прокатит?
непонятно какой кэш вы хотите обновлять!
но в данном случае будет только повторно делаться запрос на сервер!
и то правильнее сделать что то на подобие echo Html::img($imageUrl . '?_=' . time());
Изображение
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Вставка изображения из модуля

Сообщение zelenin »

никакая папка модуля не должна смотреть в веб.
de1phi
Сообщения: 145
Зарегистрирован: 2013.12.23, 20:02

Re: Вставка изображения из модуля

Сообщение de1phi »

mihail_dev писал(а):Вообще AssetManager предназначен для работы с вёрсткой публикация стилей скриптов и тому подобной всякой всячины.
Для других целей этот инструмент мало подходит!

по поводу
echo Html::img($imageUrl . '?_=' . rand()); - прокатит?
непонятно какой кэш вы хотите обновлять!
но в данном случае будет только повторно делаться запрос на сервер!
и то правильнее сделать что то на подобие echo Html::img($imageUrl . '?_=' . time());
кеш браузера, потому что изображения изменяются практически постоянно и чтобы при обновлении страницы браузер запрашивал последнюю версию изображения, а не загружал из кеша.
de1phi
Сообщения: 145
Зарегистрирован: 2013.12.23, 20:02

Re: Вставка изображения из модуля

Сообщение de1phi »

zelenin писал(а):никакая папка модуля не должна смотреть в веб.
а я другого мнения, у меня 5 модулей и в каждом есть свои файлы доступные для пользователя. И хранить их отдельно от модуля? Тогда нарушается скелет папки модуля. Модуль должен быть самодостаточен, а тут получается зависимость от общей папки для файлов. Как вариант, от vova07, это использовать symlink, но опять же велосипед. В yii 1 подобной проблемы не было.
Последний раз редактировалось de1phi 2014.06.08, 22:54, всего редактировалось 1 раз.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Вставка изображения из модуля

Сообщение zelenin »

de1phi писал(а):
mihail_dev писал(а):Вообще AssetManager предназначен для работы с вёрсткой публикация стилей скриптов и тому подобной всякой всячины.
Для других целей этот инструмент мало подходит!

по поводу
echo Html::img($imageUrl . '?_=' . rand()); - прокатит?
непонятно какой кэш вы хотите обновлять!
но в данном случае будет только повторно делаться запрос на сервер!
и то правильнее сделать что то на подобие echo Html::img($imageUrl . '?_=' . time());
кеш браузера, потому что изображения изменяются практически постоянно и чтобы при обновлении страницы браузер запрашивал последнюю версию изображения, а не загружал из кеша.
то есть у вас по одному урлу будут разные картинки?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Вставка изображения из модуля

Сообщение zelenin »

de1phi писал(а):
zelenin писал(а):никакая папка модуля не должна смотреть в веб.
а я другого мнения, у меня 5 модулей и в каждом есть свои файлы доступные для пользователя. И хранить их отдельно от модуля? Тогда нарушается скелет папки модуля. Модуль должен быть самодостаточен, а тут получается зависимость от общей папки для файлов
Вы абсолютно не правы.
Модуль это отдельный блок сайта, который вы можете установить через composer или перенести вручную. Он является частью приложения, а все приложение должно быть закрыто от доступа извне. В веб смотрит только папка web.

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

Re: Вставка изображения из модуля

Сообщение zelenin »

вообще не понятно какая у вас структура сайта - у вас и все приложение расшарено в веб?)
Аватара пользователя
NEIRON
Сообщения: 102
Зарегистрирован: 2013.10.23, 07:18

Re: Вставка изображения из модуля

Сообщение NEIRON »

Прошу прощения, что поднимаю старую тему, но как я понял вопрос так и не решен ещё.

У меня схожая ситуацию, стараюсь сделать модули максимально независимыми.
Допустим есть модуль USER, и при первой миграции хочу загрузить туда 10 пользователей вместе с их аватарками. Если аватарки положить в /web/img/avatars/ - ОК, вроде понятно и работает.

Или всё же лучше сделать для них отдельную директорию в рамках модуля:
/modules/user/web/img/avatars - то вот тут уже непонятно, как подгружать картинки, чтобы они были доступны из WEB

И соответственно планируется сделать так, чтобы могли добавляться новые пользователи и тоже грузили свои аватары, которые будут складываться либо в папку модуля, либо в папку в /web

Подскажите, как сделать правильно. Спасибо
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Вставка изображения из модуля

Сообщение yiiliveext »

AssetBundle создаете и публикуете, выше же написано.
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Вставка изображения из модуля

Сообщение unknownby »

Никто не запрещает делать как вам хочется.
Так пробовал?

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

$image = Yii::getAlias('@app/modules/news/uploads/') . 'image.jpg';
echo Html::img($image);
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Вставка изображения из модуля

Сообщение yiiliveext »

unknownby писал(а): 2019.12.27, 07:26 Никто не запрещает делать как вам хочется.
Так пробовал?

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

$image = Yii::getAlias('@app/modules/news/uploads/') . 'image.jpg';
echo Html::img($image);
Не будет работать. Эта папка не видна из веба.
Аватара пользователя
NEIRON
Сообщения: 102
Зарегистрирован: 2013.10.23, 07:18

Re: Вставка изображения из модуля

Сообщение NEIRON »

yiiliveext писал(а): 2019.12.26, 21:00 AssetBundle создаете и публикуете, выше же написано.
Ok, спасибо
Ответить