diff --git a/backend/views/brand/_form.php b/backend/views/brand/_form.php index 3067cac..77186ff 100755 --- a/backend/views/brand/_form.php +++ b/backend/views/brand/_form.php @@ -24,11 +24,10 @@ use yii\widgets\ActiveForm; ], 'pluginOptions' => [ 'allowedFileExtensions' => ['jpg','gif','png'], - 'initialPreview' => function() use ($model) { - if (!empty($model->imageUrl)) - return Html::img($model->imageUrl); - }, - 'overwriteInitial' => false, + 'initialPreview' => $model->imageUrl ? Html::img($model->imageUrl) : '', + 'overwriteInitial' => true, + 'showRemove' => true, + 'showUpload' => false, ], ]); ?> diff --git a/backend/views/category/_form.php b/backend/views/category/_form.php index 6735b34..71bd64e 100755 --- a/backend/views/category/_form.php +++ b/backend/views/category/_form.php @@ -79,6 +79,10 @@ use kartik\select2\Select2; ], 'pluginOptions' => [ 'allowedFileExtensions' => ['jpg','gif','png'], + 'initialPreview' => $model->imageUrl ? Html::img($model->imageUrl) : '', + 'overwriteInitial' => true, + 'showRemove' => true, + 'showUpload' => false, ], ]); ?> diff --git a/common/modules/product/controllers/ManageController.php b/common/modules/product/controllers/ManageController.php index 9fb7ab7..1cd3662 100755 --- a/common/modules/product/controllers/ManageController.php +++ b/common/modules/product/controllers/ManageController.php @@ -4,6 +4,7 @@ namespace common\modules\product\controllers; use common\modules\product\helpers\ProductHelper; use common\modules\product\models\Category; +use common\modules\product\models\ProductImage; use common\modules\product\models\ProductVariant; use common\modules\product\models\RemoteProductsSearch; use Yii; @@ -15,6 +16,7 @@ use yii\filters\VerbFilter; use common\modules\product\models\Brand; use common\modules\product\models\BrandName; use common\modules\product\models\RemoteProducts; +use yii\web\UploadedFile; /** * ManageController implements the CRUD actions for Product model. @@ -122,8 +124,26 @@ class ManageController extends Controller { $model = new Product(); - if ($model->load(Yii::$app->request->post()) && $model->save()) { + if ($model->load(Yii::$app->request->post())) { + $model->imagesUpload = UploadedFile::getInstances($model, 'imagesUpload'); + + $model->save(); + + foreach($model->images as $image) { + $image->delete(); + } + + if ($model->imagesUpload) { + foreach ($model->imagesUpload as $image) { + $imageModel = new ProductImage(); + $imageModel->product_id = $model->product_id; + $imageModel->image = $image->name; + $imageModel->save(); + } + } + return $this->redirect(['view', 'id' => $model->product_id]); + } else { return $this->render('create', [ 'model' => $model, @@ -141,7 +161,24 @@ class ManageController extends Controller { $model = $this->findModel($id); - if ($model->load(Yii::$app->request->post()) && $model->save()) { + if ($model->load(Yii::$app->request->post())) { + $model->imagesUpload = UploadedFile::getInstances($model, 'imagesUpload'); + + $model->save(); + + foreach($model->images as $image) { + $image->delete(); + } + + if ($model->imagesUpload) { + foreach ($model->imagesUpload as $image) { + $imageModel = new ProductImage(); + $imageModel->product_id = $model->product_id; + $imageModel->image = $image->name; + $imageModel->save(); + } + } + return $this->redirect(['view', 'id' => $model->product_id]); } else { $groups = $model->category->getTaxGroups(); diff --git a/common/modules/product/models/Brand.php b/common/modules/product/models/Brand.php index 9eb3cac..9a1ff09 100755 --- a/common/modules/product/models/Brand.php +++ b/common/modules/product/models/Brand.php @@ -41,7 +41,7 @@ class Brand extends \yii\db\ActiveRecord 'valueKeyName' => 'value', 'slugKeyName' => 'alias', 'translit' => true - ] + ], ], ]; } @@ -119,6 +119,10 @@ class Brand extends \yii\db\ActiveRecord return empty($this->brand_name_id) ? null : $this->brandName->value; } + public function getImageFile() { + return empty($this->image) ? null : '/images/brand/'. $this->image; + } + public function getImageUrl() { return empty($this->image) ? null : '/images/brand/'. $this->image; } diff --git a/common/modules/product/models/Product.php b/common/modules/product/models/Product.php index 37f5f88..cc36f31 100755 --- a/common/modules/product/models/Product.php +++ b/common/modules/product/models/Product.php @@ -7,6 +7,8 @@ use common\modules\rubrication\models\TaxOption; use Yii; use common\modules\relation\relationBehavior; use yii\db\ActiveQuery; +use yii\helpers\Html; +use yii\web\UploadedFile; /** * This is the model class for table "{{%product}}". @@ -68,8 +70,8 @@ class Product extends \yii\db\ActiveRecord [['brand_id'], 'integer'], [['name'], 'string', 'max' => 150], [['alias'], 'string', 'max' => 250], - [['categories', 'variants', 'options'], 'safe'], -// [['imagesUpload'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg, gif'], + [['categories', 'variants', 'options', 'imagesUpload'], 'safe'], + [['imagesUpload'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg, gif', 'maxFiles' => 50], [['description', 'video'], 'safe'], [['is_top', 'is_new'], 'boolean'], // [['product_id'], 'exist', 'skipOnError' => true, 'targetClass' => Product::className(), 'targetAttribute' => ['product_id' => 'product_id']], @@ -187,8 +189,18 @@ class Product extends \yii\db\ActiveRecord { parent::afterSave($insert, $changedAttributes); -// foreach($this->imagesUpload as $image) { -// $image->saveAs('/images/items/' . $image->baseName .'_'. uniqid() . '.' . $image->extension); +// $images = UploadedFile::getInstance($this, 'imagesUpload'); +// var_dump($images);exit; + +// if (!empty($this->imagesUpload)) { +// if (!is_array($this->imagesUpload)) { +// $this->imagesUpload = [$this->imagesUpload]; +// } +// foreach($this->imagesUpload as $image) { +// $image->saveAs((Yii::getAlias('@frontend/web/images/products/original/' . $image->baseName .'_'. uniqid() . '.' . $image->extension))); +// } +// +// // } $todel = []; @@ -213,4 +225,26 @@ class Product extends \yii\db\ActiveRecord ProductVariant::deleteAll(['product_variant_id' => $todel]); } } + + public function imagesUpload() + { + if ($this->validate()) { + foreach ($this->imagesUpload as $image) { + $image->saveAs(Yii::getAlias('@frontend/web/images/products/original/' . $image->baseName . '.' . $image->extension)); + } + return true; + } else { + return false; + } + } + + public function getImagesHTML() { + $op = []; + if ($this->images) { + foreach ($this->images as $image) { + $op[] = Html::img($image->imageUrl); + } + } + return $op; + } } diff --git a/common/modules/product/models/ProductImage.php b/common/modules/product/models/ProductImage.php index 87ce4d9..97e558e 100755 --- a/common/modules/product/models/ProductImage.php +++ b/common/modules/product/models/ProductImage.php @@ -10,15 +10,16 @@ use yii\web\UploadedFile; * * @property integer $product_image_id * @property integer $product_id + * @property integer $product_variant_id * @property string $image * @property string $alt * @property string $title - * * @property Product $product + * @property ProductVariant $productVariant */ class ProductImage extends \yii\db\ActiveRecord { - public $image; + public $imageUpload; /** * @inheritdoc */ @@ -33,12 +34,13 @@ class ProductImage extends \yii\db\ActiveRecord public function rules() { return [ - [['product_image_id', 'product_id'], 'required'], - [['product_image_id', 'product_id'], 'integer'], - [['alt', 'title'], 'string', 'max' => 255], - [['image'], 'safe'], + [['product_id'], 'required'], + [['product_image_id', 'product_id', 'product_variant_id'], 'integer'], + [['alt', 'title', 'image'], 'string', 'max' => 255], [['product_id'], 'exist', 'skipOnError' => true, 'targetClass' => Product::className(), 'targetAttribute' => ['product_id' => 'product_id']], - [['image'], 'file', 'extensions'=>'jpg, gif, png'], + [['product_variant_id'], 'exist', 'skipOnError' => true, 'targetClass' => ProductVariant::className(), 'targetAttribute' => ['product_variant_id' => 'product_variant_id']], + [['imageUpload'], 'safe'], + [['imageUpload'], 'file', 'extensions' => 'jpg, gif, png'], ]; } @@ -50,6 +52,10 @@ class ProductImage extends \yii\db\ActiveRecord return [ 'product_image_id' => Yii::t('product', 'Product Image ID'), 'product_id' => Yii::t('product', 'Product ID'), + 'product_variant_id' => Yii::t('product', 'Product Variant ID'), + 'product' => Yii::t('product', 'Product'), + 'product' => Yii::t('product', 'Product'), + 'product_variant' => Yii::t('product', 'Product Variant'), 'image' => Yii::t('product', 'Image'), 'alt' => Yii::t('product', 'Alt'), 'title' => Yii::t('product', 'Title'), @@ -61,7 +67,19 @@ class ProductImage extends \yii\db\ActiveRecord */ public function getProduct() { - return $this->hasOne(Product::className(), ['product_id' => 'product_id']); + $return = $this->hasOne(Product::className(), ['product_id' => 'product_id']); + if (empty($return)) { + $return = $this->productVariant->product_id; + } + return $return; + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getProductVariant() + { + return $this->hasOne(Product::className(), ['product_variant_id' => 'product_variant_id']); } /** @@ -90,7 +108,7 @@ class ProductImage extends \yii\db\ActiveRecord { // return a default image placeholder if your source image is not found $image = isset($this->image) ? $this->image : 'default.jpg'; - return Yii::$app->params['uploadUrl'] . $image; + return Yii::getAlias('/images/products/original/' . $image); } /** @@ -102,7 +120,7 @@ class ProductImage extends \yii\db\ActiveRecord // get the uploaded file instance. for multiple file uploads // the following data will return an array (you may need to use // getInstances method) - $image = UploadedFile::getInstance($this, 'image'); + $image = UploadedFile::getInstance($this, 'imageUpload'); // if no image was uploaded abort the upload if (empty($image)) { diff --git a/common/modules/product/views/manage/_form.php b/common/modules/product/views/manage/_form.php index 356f572..9de7c8b 100755 --- a/common/modules/product/views/manage/_form.php +++ b/common/modules/product/views/manage/_form.php @@ -17,7 +17,9 @@ use kartik\select2\Select2;
- + ['enctype' => 'multipart/form-data'] + ]); ?> field($model, 'name')->textInput(['maxlength' => true]) ?> @@ -44,14 +46,22 @@ use kartik\select2\Select2; ] ) ?> - - - field($model, 'imagesUpload[]')->widget(FileInput::classname(), [ + field($model, 'imagesUpload[]')->widget(\kartik\file\FileInput::classname(), [ + 'language' => 'ru', 'options' => [ 'accept' => 'image/*', 'multiple' => true, ], - ]);*/?> + 'pluginOptions' => [ + 'allowedFileExtensions' => ['jpg', 'gif', 'png'], + 'initialPreview' => !empty($model->imagesHTML) ? $model->imagesHTML : [], + 'overwriteInitial' => false, + 'showRemove' => true, + 'showUpload' => false, + 'previewFileType' => 'image', +// 'uploadUrl' => \yii\helpers\Url::to(['/site/file-upload']) + ], + ]); ?> field($model, 'variants')->widget(MultipleInput::className(), [ 'columns' => [ diff --git a/common/modules/product/widgets/views/brandsCarousel.php b/common/modules/product/widgets/views/brandsCarousel.php index 6c0ad9b..9b4ef14 100755 --- a/common/modules/product/widgets/views/brandsCarousel.php +++ b/common/modules/product/widgets/views/brandsCarousel.php @@ -3,7 +3,7 @@ diff --git a/common/modules/product/widgets/views/submenu.php b/common/modules/product/widgets/views/submenu.php index c4cfca6..c3d8731 100755 --- a/common/modules/product/widgets/views/submenu.php +++ b/common/modules/product/widgets/views/submenu.php @@ -12,7 +12,7 @@ image)) :?> - + imageUrl ? Yii::$app->imageCache->thumb($_item->imageUrl, 'mainmenu') : ''?>
categoryName->value?>
@@ -34,7 +34,7 @@ image)) :?> - <?= $_item['item']->categoryName->value?> + imageUrl ? Yii::$app->imageCache->thumb($_item['item']->imageUrl, 'mainmenu') : ''?>
categoryName->value?>
diff --git a/frontend/config/main.php b/frontend/config/main.php index 3b80cdf..3173027 100755 --- a/frontend/config/main.php +++ b/frontend/config/main.php @@ -41,7 +41,19 @@ return [ 'errorHandler' => [ 'errorAction' => 'site/error', ], - + 'imageCache' => [ + 'class' => 'iutbay\yii2imagecache\ImageCache', + 'sourcePath' => '@app/web/images', + 'sourceUrl' => '@web/images', + 'sizes' => [ + 'brandlist' => [130, 70], + 'product_item' => [130, 70], + 'product_list' => [130, 70], + 'product_list2' => [130, 70], + 'mainmenu' => [160, 170], + 'large' => [600, 600], + ], + ], 'urlManager' => [ 'baseUrl' => '/', 'enablePrettyUrl' => true, @@ -58,6 +70,7 @@ return [ 'page/'=>'page/show', 'event/view/'=>'event/view', 'service/view/'=>'service/view', + 'thumbs/' => 'site/thumb', //// 'catalog' => 'catalog/category', // 'catalog/' => 'catalog/category', // 'catalog//' => 'catalog/category', diff --git a/frontend/controllers/SiteController.php b/frontend/controllers/SiteController.php index 94dde93..707415e 100755 --- a/frontend/controllers/SiteController.php +++ b/frontend/controllers/SiteController.php @@ -21,7 +21,6 @@ use yii\widgets\ActiveForm; */ class SiteController extends Controller { - /** * @inheritdoc */ @@ -78,6 +77,7 @@ class SiteController extends Controller 'class' => 'yii\captcha\CaptchaAction', 'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null, ], + 'thumb' => 'iutbay\yii2imagecache\ThumbAction', ]; } -- libgit2 0.21.4