
Удобно взять расширение zxbodya/yii2-gallery-manager
Вот это расширение того же автора для Yii1 было описано и немного мной модифицировано, если кому нужна галерея для yii1 - http://loco.ru/materials/428-yii-fotogalereya-cher...
Устанавливаем yii2-gallery-manager как описано в описании.
Дальше в вашей форме просто вставляете
<?php ... use zxbodya\yii2\galleryManager\GalleryManager; ?> ... <div class="row"> <div class="col-xs-12 text-center"> <div class="panel panel-default"> <div class="panel-heading">Галерея "Фото"</div> <div class="panel-body"> <?php if ($model->isNewRecord) { echo 'Can not upload images for new record'; } else { echo GalleryManager::widget( [ 'model' => $model, 'behaviorName' => 'galleryBehavior', 'apiRoute' => 'portfolio/galleryApi' ] ); }?> </div> </div> </div> </div>
Потом в модели подключаем поведение, указав свои пути к папкам для сохранения галерей и настройки размеров изображений для сохранения.
use zxbodya\yii2\galleryManager\GalleryBehavior; ... public function behaviors() { return [ ... 'galleryBehavior' => [ 'class' => GalleryBehavior::className(), 'type' => 'portfolio', 'extension' => 'jpg', 'directory' => Yii::getAlias('@webroot') . '/images/portfolio/gallery', 'url' => Yii::getAlias('@web') . '/images/portfolio/gallery', 'versions' => [ 'small' => function ($img) { /** @var \Imagine\Image\ImageInterface $img */ return $img ->copy() ->thumbnail(new \Imagine\Image\Box(200, 200)); }, 'medium' => function ($img) { /** @var Imagine\Image\ImageInterface $img */ $dstSize = $img->getSize(); $maxWidth = 800; if ($dstSize->getWidth() > $maxWidth) { $dstSize = $dstSize->widen($maxWidth); } return $img ->copy() ->resize($dstSize); }, ] ], ]; }
И в контроллере указать в действиях galleryApi
use zxbodya\yii2\galleryManager\GalleryManagerAction; ... public function actions() { return [ 'galleryApi' => [ 'class' => GalleryManagerAction::className(), // mappings between type names and model classes (should be the same as in behaviour) 'types' => [ 'portfolio' => Portfolio::className(), 'portfolio_reviews' => Portfolio::className() ] ], 'error' => [ 'class' => 'yii\web\ErrorAction', ], ]; } ...
Выводить же галерею или изображения можно в виде так
<span class="pl-s1"><span class="pl-k">foreach</span>(<span class="pl-smi">$model</span><span class="pl-k">-></span>getBehavior(<span class="pl-s"><span class="pl-pds">'</span>galleryBehavior<span class="pl-pds">'</span></span>)<span class="pl-k">-></span>getImages() <span class="pl-k">as</span> <span class="pl-smi">$image</span>) {</span> <span class="pl-s1"> <span class="pl-c1">echo</span> <span class="pl-c1">Html</span><span class="pl-k">::</span>img(<span class="pl-smi">$image</span><span class="pl-k">-></span>getUrl(<span class="pl-s"><span class="pl-pds">'</span>medium<span class="pl-pds">'</span></span>));</span> <span class="pl-s1">}</span>
это выведет все изображения. Вывод можете настраивать как вам нужно, уже работая с массивом в php.
8 марта 2016, Программирование, веб-кодинг, Расширения, виджеты / Метки: gallery фотогалерея
16 января 2023

Yii2-user сменить текущего пользователя или переход на другого пользователя (SwitchIdentity)
Impersonate User / Become another user
12 декабря 2022

Yii2: uclead MultipleInput + kartik DepDrop
Настраиваем множественные поля с выпадающим списком