Commit 7669648aa43164c59dfc732bbe3d4c4e950e9498

Authored by Administrator
1 parent 87f6f705

06.04.16 finish slider

.gitignore
... ... @@ -40,6 +40,7 @@ phpunit.phar
40 40 /backend/web/assets/
41 41 /frontend/web/assets/
42 42 /frontend/web/css/node_modules/
  43 +/frontend/views/вертска
43 44 composer.lock
44 45  
45 46 tests/_output/*
46 47 \ No newline at end of file
... ...
backend/controllers/SliderImageController.php 0 → 100755
  1 +<?php
  2 +
  3 +namespace backend\controllers;
  4 +
  5 +use common\models\Slider;
  6 +use Yii;
  7 +use common\models\SliderImage;
  8 +use common\models\SliderImageSearch;
  9 +use yii\web\Controller;
  10 +use yii\web\NotFoundHttpException;
  11 +use yii\filters\VerbFilter;
  12 +
  13 +/**
  14 + * SliderImageController implements the CRUD actions for SliderImage model.
  15 + */
  16 +class SliderImageController extends Controller
  17 +{
  18 + /**
  19 + * @inheritdoc
  20 + */
  21 + public function behaviors()
  22 + {
  23 + return [
  24 + 'verbs' => [
  25 + 'class' => VerbFilter::className(),
  26 + 'actions' => [
  27 + 'delete' => ['POST'],
  28 + ],
  29 + ],
  30 + ];
  31 + }
  32 +
  33 + /**
  34 + * Lists all SliderImage models.
  35 + * @param $slider_id Slider id
  36 + * @return mixed
  37 + */
  38 + public function actionIndex($slider_id)
  39 + {
  40 + $searchModel = new SliderImageSearch();
  41 + $dataProvider = $searchModel->search($slider_id, Yii::$app->request->queryParams);
  42 +
  43 + return $this->render('index', [
  44 + 'slider_id' => $slider_id,
  45 + 'searchModel' => $searchModel,
  46 + 'dataProvider' => $dataProvider,
  47 + ]);
  48 + }
  49 +
  50 + /**
  51 + * Displays a single SliderImage model.
  52 + * @param integer $id
  53 + * @param $slider_id Slider id
  54 + * @return mixed
  55 + */
  56 + public function actionView($slider_id, $id)
  57 + {
  58 + return $this->render('view', [
  59 + 'slider_id' => $slider_id,
  60 + 'model' => $this->findModel($slider_id, $id),
  61 + ]);
  62 + }
  63 +
  64 + /**
  65 + * Creates a new SliderImage model.
  66 + * If creation is successful, the browser will be redirected to the 'view' page.
  67 + * @param $slider_id Slider id
  68 + * @return mixed
  69 + */
  70 + public function actionCreate($slider_id)
  71 + {
  72 + $model = new SliderImage();
  73 +
  74 + if ($model->load(Yii::$app->request->post())) {
  75 + $model->slider_id = $slider_id;
  76 + $model->save();
  77 + return $this->redirect(['view', 'slider_id'=>$slider_id, 'id' => $model->slider_image_id]);
  78 + } else {
  79 +
  80 + $slider = Slider::findOne($slider_id);
  81 +
  82 + return $this->render('create', [
  83 + 'slider_id' => $slider_id,
  84 + 'model' => $model,
  85 + 'slider' => $slider,
  86 + ]);
  87 + }
  88 + }
  89 +
  90 + /**
  91 + * Updates an existing SliderImage model.
  92 + * If update is successful, the browser will be redirected to the 'view' page.
  93 + * @param $slider_id Slider id
  94 + * @param integer $id
  95 + * @return mixed
  96 + */
  97 + public function actionUpdate($slider_id, $id)
  98 + {
  99 + $model = $this->findModel($slider_id, $id);
  100 +
  101 + if ($model->load(Yii::$app->request->post()) && $model->save()) {
  102 + return $this->redirect(['view', 'slider_id'=>$slider_id, 'id' => $model->slider_image_id]);
  103 + } else {
  104 +
  105 + $slider = Slider::findOne($slider_id);
  106 + return $this->render('update', [
  107 + 'model' => $model,
  108 + 'slider_id' => $slider_id,
  109 + 'slider' => $slider,
  110 + ]);
  111 + }
  112 + }
  113 +
  114 + /**
  115 + * Deletes an existing SliderImage model.
  116 + * If deletion is successful, the browser will be redirected to the 'index' page.
  117 + * @param $slider_id Slider id
  118 + * @param integer $id
  119 + * @return mixed
  120 + */
  121 + public function actionDelete($slider_id, $id)
  122 + {
  123 + $this->findModel($slider_id, $id)->delete();
  124 +
  125 + return $this->redirect(['index','slider_id'=>$slider_id]);
  126 + }
  127 +
  128 + /**
  129 + * Finds the SliderImage model based on its primary key value.
  130 + * If the model is not found, a 404 HTTP exception will be thrown.
  131 + * @param $slider_id Slider id
  132 + * @param integer $id
  133 + * @return SliderImage the loaded model
  134 + * @throws NotFoundHttpException if the model cannot be found
  135 + */
  136 + protected function findModel($slider_id,$id)
  137 + {
  138 + if (($model = SliderImage::find()->where(['slider_image_id'=> $id, 'slider_id'=>$slider_id])->one()) !== null) {
  139 + return $model;
  140 + } else {
  141 + throw new NotFoundHttpException('The requested page does not exist.');
  142 + }
  143 + }
  144 +}
... ...
backend/views/slider-image/_form.php 0 → 100755
  1 +<?php
  2 +
  3 +use common\models\Slider;
  4 +use common\modules\file\widgets\ImageUploader;
  5 +use kartik\select2\Select2;
  6 +use yii\helpers\Html;
  7 +use yii\widgets\ActiveForm;
  8 +
  9 +/* @var $this yii\web\View */
  10 +/* @var $slider Slider*/
  11 +/* @var $model common\models\SliderImage */
  12 +/* @var $form yii\widgets\ActiveForm */
  13 +?>
  14 +
  15 +<div class="slider-image-form">
  16 +
  17 + <?php $form = ActiveForm::begin(); ?>
  18 + <?= ImageUploader::widget([
  19 + 'model'=> $model,
  20 + 'field'=>'image',
  21 + 'size' => [
  22 + [
  23 + 'width'=>$slider->width,
  24 + 'height'=>$slider->height,
  25 + ],
  26 + ],
  27 + 'gallery' =>$model->image,
  28 + 'name' => 'Загрузить миниатюру статьи'
  29 + ]);
  30 + ?>
  31 +
  32 + <?= $form->field($model, 'alt')->textInput(['maxlength' => true]) ?>
  33 +
  34 + <?= $form->field($model, 'title')->textInput(['maxlength' => true]) ?>
  35 +
  36 + <?= $form->field($model, 'url')->textInput(['maxlength' => true]) ?>
  37 +
  38 + <?= $form->field($model, 'price')->textInput(['maxlength' => true]) ?>
  39 +
  40 + <?= $form->field($model, 'status')->widget(Select2::className(),([
  41 + 'name' => 'status',
  42 + 'hideSearch' => true,
  43 + 'data' => [1 => 'Active', 2 => 'Inactive'],
  44 + 'options' => ['placeholder' => 'Select status...'],
  45 + 'pluginOptions' => [
  46 + 'allowClear' => true
  47 + ]
  48 + ])) ?>
  49 +
  50 + <?= $form->field($model, 'sort')->textInput() ?>
  51 +
  52 + <div class="form-group">
  53 + <?= Html::submitButton($model->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
  54 + </div>
  55 +
  56 + <?php ActiveForm::end(); ?>
  57 +
  58 +</div>
... ...
backend/views/slider-image/_search.php 0 → 100755
  1 +<?php
  2 +
  3 +use yii\helpers\Html;
  4 +use yii\widgets\ActiveForm;
  5 +
  6 +/* @var $this yii\web\View */
  7 +/* @var $model common\models\SliderImageSearch */
  8 +/* @var $form yii\widgets\ActiveForm */
  9 +?>
  10 +
  11 +<div class="slider-image-search">
  12 +
  13 + <?php $form = ActiveForm::begin([
  14 + 'action' => ['index'],
  15 + 'method' => 'get',
  16 + ]); ?>
  17 +
  18 + <?= $form->field($model, 'slider_image_id') ?>
  19 +
  20 + <?= $form->field($model, 'slider_id') ?>
  21 +
  22 + <?= $form->field($model, 'image') ?>
  23 +
  24 + <?= $form->field($model, 'alt') ?>
  25 +
  26 + <?= $form->field($model, 'title') ?>
  27 +
  28 + <?php // echo $form->field($model, 'url') ?>
  29 +
  30 + <?php // echo $form->field($model, 'status') ?>
  31 +
  32 + <?php // echo $form->field($model, 'sort') ?>
  33 +
  34 + <div class="form-group">
  35 + <?= Html::submitButton(Yii::t('app', 'Search'), ['class' => 'btn btn-primary']) ?>
  36 + <?= Html::resetButton(Yii::t('app', 'Reset'), ['class' => 'btn btn-default']) ?>
  37 + </div>
  38 +
  39 + <?php ActiveForm::end(); ?>
  40 +
  41 +</div>
... ...
backend/views/slider-image/create.php 0 → 100755
  1 +<?php
  2 +
  3 +use common\models\Slider;
  4 +use yii\helpers\Html;
  5 +use yii\helpers\Url;
  6 +
  7 +
  8 +/* @var $this yii\web\View */
  9 +/* @var $slider Slider*/
  10 +/* @var $model common\models\SliderImage */
  11 +
  12 +$this->title = Yii::t('app', 'Create Slider Image');
  13 +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Slider Images'), 'url' => Url::toRoute(['index','slider_id'=>$slider_id])];
  14 +$this->params['breadcrumbs'][] = $this->title;
  15 +?>
  16 +<div class="slider-image-create">
  17 +
  18 + <h1><?= Html::encode($this->title) ?></h1>
  19 +
  20 + <?= $this->render('_form', [
  21 + 'model' => $model,
  22 + 'slider' => $slider,
  23 + ]) ?>
  24 +
  25 +</div>
... ...
backend/views/slider-image/index.php 0 → 100755
  1 +<?php
  2 +
  3 +use yii\helpers\Html;
  4 +use yii\grid\GridView;
  5 +use yii\helpers\Url;
  6 +
  7 +/* @var $this yii\web\View */
  8 +/* @var $searchModel common\models\SliderImageSearch */
  9 +/* @var $dataProvider yii\data\ActiveDataProvider */
  10 +
  11 +$this->title = Yii::t('app', 'Slider Images');
  12 +$this->params['breadcrumbs'][] = $this->title;
  13 +?>
  14 +<div class="slider-image-index">
  15 +
  16 + <h1><?= Html::encode($this->title) ?></h1>
  17 + <?php // echo $this->render('_search', ['model' => $searchModel]); ?>
  18 +
  19 + <p>
  20 + <?= Html::a(Yii::t('app', 'Create Slider Image'), Url::toRoute(['create','slider_id'=>$slider_id]), ['class' => 'btn btn-success']) ?>
  21 + </p>
  22 + <?= GridView::widget([
  23 + 'dataProvider' => $dataProvider,
  24 + 'filterModel' => $searchModel,
  25 + 'columns' => [
  26 + ['class' => 'yii\grid\SerialColumn'],
  27 +
  28 + 'slider_image_id',
  29 + 'slider_id',
  30 + 'image',
  31 + 'alt',
  32 + 'title',
  33 + // 'url:url',
  34 + // 'status',
  35 + // 'sort',
  36 +
  37 + [
  38 + 'class' => 'yii\grid\ActionColumn',
  39 + 'buttons' => [
  40 + 'view' => function ($url, $model)
  41 + {
  42 + return Html::a (
  43 + '<span class="glyphicon glyphicon-eye-open"></span>',
  44 + Url::toRoute(['view','slider_id'=> $model->slider_id, 'id' => $model->slider_image_id]),
  45 + [
  46 + 'title' => "Просмотр",
  47 + ]
  48 + );
  49 + },
  50 + 'update' => function ($url, $model)
  51 + {
  52 + return Html::a (
  53 + '<span class="glyphicon glyphicon-pencil"></span>',
  54 + Url::toRoute(['update','slider_id'=> $model->slider_id, 'id' => $model->slider_image_id]),
  55 + [
  56 + 'title' => "Редактировать",
  57 + ]
  58 + );
  59 + },
  60 + 'delete' => function ($url, $model)
  61 + {
  62 +
  63 + return Html::a('<span class="glyphicon glyphicon-trash"></span>', Url::toRoute(['delete','slider_id'=> $model->slider_id, 'id' => $model->slider_image_id]), [
  64 + 'title' => Yii::t('yii', 'Delete'),
  65 + 'data-confirm' => Yii::t('yii', 'Are you sure to delete this item?'),
  66 + 'data-method' => 'post',
  67 + ]);
  68 +
  69 + },
  70 + ],
  71 + ],
  72 + ],
  73 + ]); ?>
  74 +</div>
... ...
backend/views/slider-image/update.php 0 → 100755
  1 +<?php
  2 +
  3 +use yii\helpers\Html;
  4 +use common\models\Slider;
  5 +use yii\helpers\Url;
  6 +
  7 +/* @var $this yii\web\View */
  8 +/* @var $slider Slider*/
  9 +/* @var $model common\models\SliderImage */
  10 +
  11 +$this->title = Yii::t('app', 'Update {modelClass}: ', [
  12 + 'modelClass' => 'Slider Image',
  13 +]) . $model->title;
  14 +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Slider Images'), 'url' => Url::toRoute(['index','slider_id'=>$slider_id])];
  15 +$this->params['breadcrumbs'][] = ['label' => $model->title, 'url' => Url::toRoute(['view', 'slider_id'=>$slider_id, 'id' => $model->slider_image_id])];
  16 +$this->params['breadcrumbs'][] = Yii::t('app', 'Update');
  17 +?>
  18 +<div class="slider-image-update">
  19 +
  20 + <h1><?= Html::encode($this->title) ?></h1>
  21 +
  22 + <?= $this->render('_form', [
  23 + 'model' => $model,
  24 + 'slider' => $slider,
  25 + ]) ?>
  26 +
  27 +</div>
... ...
backend/views/slider-image/view.php 0 → 100755
  1 +<?php
  2 +
  3 +use yii\helpers\Html;
  4 +use yii\helpers\Url;
  5 +use yii\widgets\DetailView;
  6 +
  7 +/* @var $this yii\web\View */
  8 +/* @var $model common\models\SliderImage */
  9 +
  10 +$this->title = $model->title;
  11 +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Slider Images'), 'url' => Url::toRoute(['index','slider_id'=>$slider_id])];
  12 +$this->params['breadcrumbs'][] = $this->title;
  13 +?>
  14 +<div class="slider-image-view">
  15 +
  16 + <h1><?= Html::encode($this->title) ?></h1>
  17 +
  18 + <p>
  19 + <?= Html::a(Yii::t('app', 'Update'), ['update', 'slider_id'=>$slider_id, 'id' => $model->slider_image_id], ['class' => 'btn btn-primary']) ?>
  20 + <?= Html::a(Yii::t('app', 'Delete'), ['delete', 'slider_id'=>$slider_id , 'id' => $model->slider_image_id], [
  21 + 'class' => 'btn btn-danger',
  22 + 'data' => [
  23 + 'confirm' => Yii::t('app', 'Are you sure you want to delete this item?'),
  24 + 'method' => 'post',
  25 + ],
  26 + ]) ?>
  27 + </p>
  28 +
  29 + <?= DetailView::widget([
  30 + 'model' => $model,
  31 + 'attributes' => [
  32 + 'slider_image_id',
  33 + 'slider_id',
  34 + 'image',
  35 + 'alt',
  36 + 'title',
  37 + 'url:url',
  38 + 'status',
  39 + 'sort',
  40 + ],
  41 + ]) ?>
  42 +
  43 +</div>
... ...
common/models/SliderImage.php 0 → 100644
  1 +<?php
  2 +
  3 +namespace common\models;
  4 +
  5 +use Yii;
  6 +
  7 +/**
  8 + * This is the model class for table "slider_image".
  9 + *
  10 + * @property integer $slider_image_id
  11 + * @property integer $slider_id
  12 + * @property string $image
  13 + * @property string $alt
  14 + * @property string $title
  15 + * @property string $url
  16 + * @property integer $status
  17 + * @property integer $sort
  18 + * @property double $price
  19 + *
  20 + * @property Slider $slider
  21 + */
  22 +class SliderImage extends \yii\db\ActiveRecord
  23 +{
  24 + /**
  25 + * @inheritdoc
  26 + */
  27 + public static function tableName()
  28 + {
  29 + return 'slider_image';
  30 + }
  31 +
  32 + /**
  33 + * @inheritdoc
  34 + */
  35 + public function rules()
  36 + {
  37 + return [
  38 + [['slider_id', 'status', 'sort'], 'integer'],
  39 + [['price'], 'number'],
  40 + [['image', 'alt', 'title', 'url'], 'string', 'max' => 255],
  41 + [['slider_id'], 'exist', 'skipOnError' => true, 'targetClass' => Slider::className(), 'targetAttribute' => ['slider_id' => 'slider_id']],
  42 + ];
  43 + }
  44 +
  45 + /**
  46 + * @inheritdoc
  47 + */
  48 + public function attributeLabels()
  49 + {
  50 + return [
  51 + 'slider_image_id' => Yii::t('app', 'Slider Image ID'),
  52 + 'slider_id' => Yii::t('app', 'Slider ID'),
  53 + 'image' => Yii::t('app', 'Image'),
  54 + 'alt' => Yii::t('app', 'Alt'),
  55 + 'title' => Yii::t('app', 'Title'),
  56 + 'url' => Yii::t('app', 'Url'),
  57 + 'status' => Yii::t('app', 'Status'),
  58 + 'sort' => Yii::t('app', 'Sort'),
  59 + 'price' => Yii::t('app', 'Price'),
  60 + ];
  61 + }
  62 +
  63 + /**
  64 + * @return \yii\db\ActiveQuery
  65 + */
  66 + public function getSlider()
  67 + {
  68 + return $this->hasOne(Slider::className(), ['slider_id' => 'slider_id']);
  69 + }
  70 +}
... ...
common/models/SliderImageSearch.php 0 → 100755
  1 +<?php
  2 +
  3 +namespace common\models;
  4 +
  5 +use Yii;
  6 +use yii\base\Model;
  7 +use yii\data\ActiveDataProvider;
  8 +use common\models\SliderImage;
  9 +
  10 +/**
  11 + * SliderImageSearch represents the model behind the search form about `common\models\SliderImage`.
  12 + */
  13 +class SliderImageSearch extends SliderImage
  14 +{
  15 + /**
  16 + * @inheritdoc
  17 + */
  18 + public function rules()
  19 + {
  20 + return [
  21 + [['slider_image_id', 'slider_id', 'status', 'sort'], 'integer'],
  22 + [['image', 'alt', 'title', 'url'], 'safe'],
  23 + ];
  24 + }
  25 +
  26 + /**
  27 + * @inheritdoc
  28 + */
  29 + public function scenarios()
  30 + {
  31 + // bypass scenarios() implementation in the parent class
  32 + return Model::scenarios();
  33 + }
  34 +
  35 + /**
  36 + * Creates data provider instance with search query applied
  37 + *
  38 + * @param array $params
  39 + *
  40 + * @param $slider_id Slider id
  41 + *
  42 + * @return ActiveDataProvider
  43 + */
  44 + public function search($slider_id, $params)
  45 + {
  46 + $query = SliderImage::find();
  47 +
  48 + // add conditions that should always apply here
  49 +
  50 + $dataProvider = new ActiveDataProvider([
  51 + 'query' => $query,
  52 + ]);
  53 +
  54 + $this->load($params);
  55 +
  56 + if (!$this->validate()) {
  57 + // uncomment the following line if you do not want to return any records when validation fails
  58 + // $query->where('0=1');
  59 + return $dataProvider;
  60 + }
  61 +
  62 + // grid filtering conditions
  63 + $query->andFilterWhere([
  64 + 'slider_image_id' => $this->slider_image_id,
  65 + 'slider_id' => $slider_id,
  66 + 'status' => $this->status,
  67 + 'sort' => $this->sort,
  68 + ]);
  69 +
  70 + $query->andFilterWhere(['like', 'image', $this->image])
  71 + ->andFilterWhere(['like', 'alt', $this->alt])
  72 + ->andFilterWhere(['like', 'title', $this->title])
  73 + ->andFilterWhere(['like', 'url', $this->url]);
  74 +
  75 + return $dataProvider;
  76 + }
  77 +}
... ...
console/migrations/m160405_101056_create_slider_images.php
... ... @@ -21,6 +21,7 @@ class m160405_101056_create_slider_images extends Migration
21 21 'url' => $this->string(255),
22 22 'status' => $this->smallInteger(1),
23 23 'sort' => $this->integer(6),
  24 + 'price' => $this->float(),
24 25 ]);
25 26 $this->addForeignKey('slider_slider_image_fk', 'slider_image', 'slider_id', 'slider', 'slider_id', 'CASCADE', 'CASCADE');
26 27 }
... ...
frontend/widgets/views/slider.php
... ... @@ -7,44 +7,43 @@ use yii\helpers\Url;
7 7 ?>
8 8 <div class="carousel">
9 9 <?php foreach($slider->sliderImage as $image):
  10 + $htm = <<<HTML
10 11  
11   - ?>
12   - <div class="slide">
13   - <div style="background:url(<?= $image->image ?>) center center no-repeat;width:100%;height:480px;position:absolute;">
14   - </div>
15   - <div class="content">
16   - <div class="title">
17   - <span>Фанера влагостойкая ФСФ (slide1)</span>
18   - <div>повышенной влагостойкости
19   - <div>2500х1250х12мм(лист) сорт СР/С</div>
20   - </div>
  12 + <div style="background:url($image->image ) center center no-repeat;width:100%;height:480px;position:absolute;">
21 13 </div>
  14 + <div class="content">
  15 +
  16 +HTML;
  17 +
  18 + if(!empty($image->price)) {
  19 + $htm .= <<<HTML
  20 + <div class="price_round_border">
  21 + <div class="price_round">
  22 + <div class="title">Супер цена</div>
  23 + <div class="desc">$image->price
  24 + <div>грн.</div>
  25 + </div>
  26 + </div>
  27 + </div>
  28 +HTML;
  29 + }
22 30  
23   - <div class="list">
24   - <div class="item">шлифованные внешние слои фанерного листа</div>
25   - <div class="item">высокая устойчивость к влаге</div>
26   - <div class="item">повышенная плотность</div>
27   - <div class="item">стабильность толщины по всему периметру фанеры</div>
  31 + $htm .= <<<HTML
28 32 </div>
29 33  
30   - <?= Html::a('подробнее', Url::toRoute($image->url))?>
31   - <a href="#" class="slide_about">подробнее</a>
  34 +HTML;
  35 + ?>
32 36  
33   - <div class="price_round_border">
34   - <div class="price_round">
35   - <div class="title">Супер цена</div>
36   - <div class="desc">345,90
37   - <div>грн./лист</div>
38   - </div>
39   - </div>
40   - </div>
41   - </div>
  37 + <div class="slide">
  38 + <?= Html::a($htm, Url::toRoute($image->url)); ?>
42 39 </div>
43   - <?php endforeach; ?>
  40 +<?php endforeach; ?>
44 41 </div>
45 42  
46 43 <div style="clear:both;"></div>
47 44 <?php
  45 +$dur = $slider->duration ? $slider->duration : 5000;
  46 +$speed = $slider->speed ? $slider->speed : 500;
48 47 $js=" $(\".carousel\").owlCarousel({
49 48 items: 1,
50 49 loop: true,
... ... @@ -53,7 +52,8 @@ $js=&quot; $(\&quot;.carousel\&quot;).owlCarousel({
53 52 mouseDrag: false,
54 53 navSpeed: 800,
55 54 autoplay:true,
56   - autoplaySpeed: 800,
  55 + autoplayTimeout: $dur,
  56 + autoplaySpeed: $speed,
57 57 autoplayHoverPause:true,
58 58 navText: ['<a class=\"prev\"></a>', '<a class=\"next\"></a>']
59 59 });";
... ...