Страница 1 из 1

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

Добавлено: 2014.06.07, 22:37
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

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

Добавлено: 2014.06.07, 22:39
vova07
Вы должны использовать "assets".

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

Добавлено: 2014.06.07, 23:31
de1phi
vova07 писал(а):Вы должны использовать "assets".
ух ты, а если в будущем у меня будет больше тысячи изображений, которые каждый день будут редактироваться. Так все они будут перезаписываться в папку assets? Как то не комильфо, сейчас база изображений занимает больше 1гб...

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

Добавлено: 2014.06.08, 00:06
mihail_dev
вам нужно сделать отдельную папку типа path_to_webroot/files
далее

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

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

Добавлено: 2014.06.08, 09:26
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()); - прокатит?

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

Добавлено: 2014.06.08, 10:28
vova07
de1phi писал(а):ух ты, а если в будущем у меня будет больше тысячи изображений, которые каждый день будут редактироваться. Так все они будут перезаписываться в папку assets? Как то не комильфо, сейчас база изображений занимает больше 1гб...
Ваш сарказм неуместен. Вы задали конкретный вопрос, я написал конкретный ответ. "Asset" в случае с модулями единственное решение, а для того чтобы нагрузку уменьшить есть "symlink"-и. Если такой вариант не подходит, вам уже описали один менее затратный.

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

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

по поводу
echo Html::img($imageUrl . '?_=' . rand()); - прокатит?
непонятно какой кэш вы хотите обновлять!
но в данном случае будет только повторно делаться запрос на сервер!
и то правильнее сделать что то на подобие echo Html::img($imageUrl . '?_=' . time());

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

Добавлено: 2014.06.08, 18:59
zelenin
никакая папка модуля не должна смотреть в веб.

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

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

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

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

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

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

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

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

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

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

Я имею в виду файлы, заливающиеся через сайт - аватарки, личные документы итд. Не картинки, использующиеся в верстке страниц.

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

Добавлено: 2014.06.08, 22:59
zelenin
вообще не понятно какая у вас структура сайта - у вас и все приложение расшарено в веб?)

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

Добавлено: 2019.12.26, 18:37
NEIRON
Прошу прощения, что поднимаю старую тему, но как я понял вопрос так и не решен ещё.

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

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

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

Подскажите, как сделать правильно. Спасибо

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

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

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

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

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

$image = Yii::getAlias('@app/modules/news/uploads/') . 'image.jpg';
echo Html::img($image);

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

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

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

$image = Yii::getAlias('@app/modules/news/uploads/') . 'image.jpg';
echo Html::img($image);
Не будет работать. Эта папка не видна из веба.

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

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