Commit f7089e23dfd1cede749bf5bae2a5eb7b641dd4f2

Authored by Administrator
1 parent 8e5fa1e8

15.02.16

common/models/PortfolioSpecialization.php
... ... @@ -16,6 +16,8 @@ use Yii;
16 16 */
17 17 class PortfolioSpecialization extends \yii\db\ActiveRecord
18 18 {
  19 +
  20 + public $count;
19 21 /**
20 22 * @inheritdoc
21 23 */
... ...
frontend/controllers/AccountsController.php
... ... @@ -466,8 +466,11 @@
466 466 if(!$portfolio instanceof ActiveRecord) {
467 467 throw new NotFoundHttpException('Запись не найдена');
468 468 }
  469 +
469 470 $specializations = Specialization::find()->where(['specialization_pid' => 0])->orderBy('specialization_id')->all();
  471 +
470 472 $post = \Yii::$app->request->post();
  473 +
471 474 if(!empty( $post )) {
472 475 $portfolio->load($post);
473 476 $portfolio->validate();
... ... @@ -483,6 +486,7 @@
483 486 return $this->redirect('portfolio');
484 487 }
485 488 }
  489 +
486 490 return $this->render('_portfolio_form', [
487 491 'portfolio' => $portfolio,
488 492 'specializations' => $specializations,
... ...
frontend/controllers/PerformerController.php
... ... @@ -4,6 +4,8 @@ namespace frontend\controllers;
4 4 use common\models\Blog;
5 5 use common\models\Fields;
6 6 use common\models\Gallery;
  7 +use common\models\Portfolio;
  8 +use common\models\PortfolioSpecialization;
7 9 use Yii;
8 10 use yii\data\ArrayDataProvider;
9 11 use yii\data\Pagination;
... ... @@ -80,10 +82,23 @@ class PerformerController extends Controller
80 82 if(!$user instanceof User){
81 83 throw new BadRequestHttpException('Пользователь не найден');
82 84 }
  85 + $projects = ArrayHelper::getColumn($user->portfolios,'portfolio_id');
83 86  
84 87  
  88 + $filters = PortfolioSpecialization::find()->select(["specialization_id","COUNT('specialization_id') AS count"])
  89 + ->where(["portfolio_id"=>$projects ])->groupBy("specialization_id")->all();
  90 +
  91 + $portfolio = new ArrayDataProvider([
  92 + 'allModels' => $user->portfolios,
  93 + 'pagination' => [
  94 + 'pageSize' => 9,
  95 + ],
  96 + ]);
  97 +
85 98 return $this->render('portfolio',[
86   - 'user' => $user
  99 + 'user' => $user,
  100 + 'filters' => $filters,
  101 + 'portfolio' => $portfolio
87 102 ]);
88 103  
89 104 }
... ...
frontend/views/accounts/_portfolio_form.php
... ... @@ -7,7 +7,8 @@
7 7 use common\models\Specialization;
8 8 use common\widgets\ImageUploader;
9 9 use mihaildev\ckeditor\CKEditor;
10   - use yii\helpers\Html;
  10 +use yii\helpers\ArrayHelper;
  11 +use yii\helpers\Html;
11 12 use yii\widgets\ActiveForm;
12 13 use \common\widgets\MultiLangForm;
13 14 use kartik\select2\Select2;
... ... @@ -56,7 +57,7 @@ use yii\web\JsExpression;
56 57 <ul>
57 58 <?php foreach($child_first->children as $child_second):?>
58 59 <?php if($child_first instanceof Specialization): ?>
59   - <li><a href="#"><?= $form->field($portfolio, 'specializationInput[]')->checkbox(['value' => $child_second->specialization_id, 'label' =>$child_second->specialization_name])?></a></li>
  60 + <li><a href="#"><?= Html::checkbox('Portfolio[specializationInput][]', in_array($child_second->specialization_id, ArrayHelper::getColumn($portfolio->specializations,'specialization_id')),['value' => $child_second->specialization_id, 'label' =>$child_second->specialization_name])?></a></li>
60 61 <?php endif;?>
61 62 <?php endforeach; ?>
62 63 </ul>
... ... @@ -78,8 +79,8 @@ use yii\web\JsExpression;
78 79 <?= ImageUploader::widget([
79 80 'model'=> $portfolio,
80 81 'field'=>'cover',
81   - 'width'=>100,
82   - 'height'=>100,
  82 + 'width'=>210,
  83 + 'height'=>150,
83 84 'multi'=>false,
84 85 'gallery' =>$portfolio->cover,
85 86 'name' => 'Загрузить'
... ... @@ -166,4 +167,4 @@ use yii\web\JsExpression;
166 167 $(document).ready(function(){
167 168  
168 169 })
169   -</script>
170 170 \ No newline at end of file
  171 +</script>
... ...
frontend/views/performer/portfolio.php
1 1 <?php
2 2  
  3 +use yii\helpers\ArrayHelper;
3 4 use \yii\helpers\Html;
  5 +use yii\widgets\ListView;
4 6  
5   -/* @var $this yii\web\View */
  7 +
  8 +/* @var $this yii\web\View
  9 +* @var $portfolio yii\data\ArrayDataProvider
  10 + */
6 11 $this->params['user'] = $user;
7 12 $this->title = 'My Yii Application';
8 13 ?>
9 14 <div class="performer-vacancy-vacant-title-reclam-wr style">
10 15 <div class="portfolio-project-wr style">
11   - <div class="workplace-title style"><p>Проектов: 1054</p></div>
  16 + <div class="workplace-title style"><p>Проектов: <?= $portfolio->totalCount ?></p></div>
12 17 <div class="portfolio-project-tags style">
13   - <a href="#" class="active-tag">Все</a><a href="#">Дизайн интерьера (340)</a><a href="#">Архитектурное проектирование (15)</a><a href="#">3D-визуализация (155)</a><a href="#">Изготовление мебели (5)</a><a href="#">Декорирование стекол и зеркал (14)</a>
14   - <a href="#">Ремонт квартиры под ключ (7)</a><a href="#">Строительство домов под ключ (12)</a><a href="#">Декорирование интерьера (30)</a><a href="#">Декорирование стен (5)</a>
  18 + <a href="#" class="active-tag">Все (<?= $portfolio->totalCount ?>)</a>
  19 + <?php foreach($filters as $filter): ?>
  20 + <a href="#"><?= $filter->specialization->specialization_name ?> (<?= $filter->count ?>)</a>
  21 + <?php endforeach; ?>
  22 +
15 23 </div>
16 24 </div>
17 25 <div class="style">
18 26 <div class="portfolio-project-blocks-wrapper">
19   - <div class="portfolio-project-blocks-wr">
20   - <div class="portfolio-project-blocks-img-title">
21   - <div class="portfolio-project-blocks-img"><a href="#"><img src="/images/portfolio-project/portfolio-img-1.jpg" alt=""/></a></div>
22   - <div class="portfolio-project-blocks-title-wr">
23   - <div class="portfolio-project-blocks-title">
24   - <a href="#">Отделка дома из бруса</a>
25   - </div>
26   - </div>
27   - </div>
28   - <div class="portfolio-project-views-wr">
29   - <div class="portfolio-project-views ico-views-bl">
30   - <div class="portfolio-project-views-img-wr">
31   - <div class="portfolio-project-views-img"><img src="/images/portfolio-project/ico-1.png"/></div>
32   - </div>
33   - <div class="portfolio-project-views-txt">127</div>
34   - </div>
35   - <div class="portfolio-project-rati ico-views-bl">
36   - <div class="portfolio-project-views-img-wr">
37   - <div class="portfolio-project-views-img"><img src="/images/portfolio-project/ico-2.png"/></div>
38   - </div>
39   - <div class="portfolio-project-views-txt">10.0</div>
40   - </div>
41   - <div class="ico-views-bl">
42   - <div class="portfolio-project-views-img-wr">
43   - <div class="portfolio-project-views-img"><img src="/images/portfolio-project/ico-3.png"/></div>
44   - </div>
45   - <div class="portfolio-project-views-txt">14</div>
46   - </div>
47   - </div>
48   - <div class="portfolio-project-blocks-tags"><a href="#">Деревянные дома</a></div>
49   - </div>
50   - <div class="portfolio-project-blocks-wr">
51   - <div class="portfolio-project-blocks-img-title">
52   - <div class="portfolio-project-blocks-img"><a href="#"><img src="/images/portfolio-project/portfolio-img-2.jpg" alt=""/></a></div>
53   - <div class="portfolio-project-blocks-title-wr">
54   - <div class="portfolio-project-blocks-title">
55   - <a href="#">Квартира - студия в современном стиле </a>
56   - </div>
57   - </div>
58   - </div>
59   - <div class="portfolio-project-views-wr">
60   - <div class="portfolio-project-views ico-views-bl">
61   - <div class="portfolio-project-views-img-wr">
62   - <div class="portfolio-project-views-img"><img src="/images/portfolio-project/ico-1.png"/></div>
63   - </div>
64   - <div class="portfolio-project-views-txt">127</div>
65   - </div>
66   - <div class="portfolio-project-rati ico-views-bl">
67   - <div class="portfolio-project-views-img-wr">
68   - <div class="portfolio-project-views-img"><img src="/images/portfolio-project/ico-2.png"/></div>
69   - </div>
70   - <div class="portfolio-project-views-txt">10.0</div>
71   - </div>
72   - <div class="ico-views-bl">
73   - <div class="portfolio-project-views-img-wr">
74   - <div class="portfolio-project-views-img"><img src="/images/portfolio-project/ico-3.png"/></div>
75   - </div>
76   - <div class="portfolio-project-views-txt">14</div>
77   - </div>
78   - </div>
79   - <div class="portfolio-project-blocks-tags"><a href="#">Дизайн интерьера</a></div>
80   - </div>
81   - <div class="portfolio-project-blocks-wr">
82   - <div class="portfolio-project-blocks-img-title">
83   - <div class="portfolio-project-blocks-img"><a href="#"><img src="/images/portfolio-project/portfolio-img-1.jpg" alt=""/></a></div>
84   - <div class="portfolio-project-blocks-title-wr">
85   - <div class="portfolio-project-blocks-title">
86   - <a href="#">Отделка дома из бруса</a>
87   - </div>
88   - </div>
89   - </div>
90   - <div class="portfolio-project-views-wr">
91   - <div class="portfolio-project-views ico-views-bl">
92   - <div class="portfolio-project-views-img-wr">
93   - <div class="portfolio-project-views-img"><img src="/images/portfolio-project/ico-1.png"/></div>
94   - </div>
95   - <div class="portfolio-project-views-txt">127</div>
96   - </div>
97   - <div class="portfolio-project-rati ico-views-bl">
98   - <div class="portfolio-project-views-img-wr">
99   - <div class="portfolio-project-views-img"><img src="/images/portfolio-project/ico-2.png"/></div>
100   - </div>
101   - <div class="portfolio-project-views-txt">10.0</div>
102   - </div>
103   - <div class="ico-views-bl">
104   - <div class="portfolio-project-views-img-wr">
105   - <div class="portfolio-project-views-img"><img src="/images/portfolio-project/ico-3.png"/></div>
106   - </div>
107   - <div class="portfolio-project-views-txt">14</div>
108   - </div>
109   - </div>
110   - <div class="portfolio-project-blocks-tags"><a href="#">Деревянные дома</a></div>
111   - </div>
112   - <div class="portfolio-project-blocks-wr">
113   - <div class="portfolio-project-blocks-img-title">
114   - <div class="portfolio-project-blocks-img"><a href="#"><img src="/images/portfolio-project/portfolio-img-2.jpg" alt=""/></a></div>
115   - <div class="portfolio-project-blocks-title-wr">
116   - <div class="portfolio-project-blocks-title">
117   - <a href="#">Квартира - студия в современном стиле </a>
118   - </div>
119   - </div>
120   - </div>
121   - <div class="portfolio-project-views-wr">
122   - <div class="portfolio-project-views ico-views-bl">
123   - <div class="portfolio-project-views-img-wr">
124   - <div class="portfolio-project-views-img"><img src="/images/portfolio-project/ico-1.png"/></div>
125   - </div>
126   - <div class="portfolio-project-views-txt">127</div>
127   - </div>
128   - <div class="portfolio-project-rati ico-views-bl">
129   - <div class="portfolio-project-views-img-wr">
130   - <div class="portfolio-project-views-img"><img src="/images/portfolio-project/ico-2.png"/></div>
131   - </div>
132   - <div class="portfolio-project-views-txt">10.0</div>
133   - </div>
134   - <div class="ico-views-bl">
135   - <div class="portfolio-project-views-img-wr">
136   - <div class="portfolio-project-views-img"><img src="/images/portfolio-project/ico-3.png"/></div>
137   - </div>
138   - <div class="portfolio-project-views-txt">14</div>
139   - </div>
140   - </div>
141   - <div class="portfolio-project-blocks-tags"><a href="#">Дизайн интерьера</a></div>
142   - </div>
143   - <div class="portfolio-project-blocks-wr">
144   - <div class="portfolio-project-blocks-img-title">
145   - <div class="portfolio-project-blocks-img"><a href="#"><img src="/images/portfolio-project/portfolio-img-1.jpg" alt=""/></a></div>
146   - <div class="portfolio-project-blocks-title-wr">
147   - <div class="portfolio-project-blocks-title">
148   - <a href="#">Отделка дома из бруса</a>
149   - </div>
150   - </div>
151   - </div>
152   - <div class="portfolio-project-views-wr">
153   - <div class="portfolio-project-views ico-views-bl">
154   - <div class="portfolio-project-views-img-wr">
155   - <div class="portfolio-project-views-img"><img src="/images/portfolio-project/ico-1.png"/></div>
156   - </div>
157   - <div class="portfolio-project-views-txt">127</div>
158   - </div>
159   - <div class="portfolio-project-rati ico-views-bl">
160   - <div class="portfolio-project-views-img-wr">
161   - <div class="portfolio-project-views-img"><img src="/images/portfolio-project/ico-2.png"/></div>
162   - </div>
163   - <div class="portfolio-project-views-txt">10.0</div>
164   - </div>
165   - <div class="ico-views-bl">
166   - <div class="portfolio-project-views-img-wr">
167   - <div class="portfolio-project-views-img"><img src="/images/portfolio-project/ico-3.png"/></div>
168   - </div>
169   - <div class="portfolio-project-views-txt">14</div>
170   - </div>
171   - </div>
172   - <div class="portfolio-project-blocks-tags"><a href="#">Деревянные дома</a></div>
173   - </div>
174   - <div class="portfolio-project-blocks-wr">
175   - <div class="portfolio-project-blocks-img-title">
176   - <div class="portfolio-project-blocks-img"><a href="#"><img src="/images/portfolio-project/portfolio-img-2.jpg" alt=""/></a></div>
177   - <div class="portfolio-project-blocks-title-wr">
178   - <div class="portfolio-project-blocks-title">
179   - <a href="#">Квартира - студия в современном стиле </a>
180   - </div>
181   - </div>
182   - </div>
183   - <div class="portfolio-project-views-wr">
184   - <div class="portfolio-project-views ico-views-bl">
185   - <div class="portfolio-project-views-img-wr">
186   - <div class="portfolio-project-views-img"><img src="/images/portfolio-project/ico-1.png"/></div>
187   - </div>
188   - <div class="portfolio-project-views-txt">127</div>
189   - </div>
190   - <div class="portfolio-project-rati ico-views-bl">
191   - <div class="portfolio-project-views-img-wr">
192   - <div class="portfolio-project-views-img"><img src="/images/portfolio-project/ico-2.png"/></div>
193   - </div>
194   - <div class="portfolio-project-views-txt">10.0</div>
195   - </div>
196   - <div class="ico-views-bl">
197   - <div class="portfolio-project-views-img-wr">
198   - <div class="portfolio-project-views-img"><img src="/images/portfolio-project/ico-3.png"/></div>
199   - </div>
200   - <div class="portfolio-project-views-txt">14</div>
201   - </div>
202   - </div>
203   - <div class="portfolio-project-blocks-tags"><a href="#">Дизайн интерьера</a></div>
204   - </div>
205   -
206   - <div class="navi-buttons-wr style">
207   - <ul class="pagination">
208   - <li><a href="#">1</a></li>
209   - <li><a href="#">2</a></li>
210   - <li><a href="#">3</a></li>
211   - <li><a href="#">4</a></li>
212   - <li><a href="#">5</a></li>
213   - <li class="dots-next"><a href="#">...</a></li>
214   - <li><a href="#">156</a></li>
215   - </ul>
216   - </div>
  27 + <?=
  28 + ListView::widget( [
  29 + 'dataProvider' => $portfolio,
  30 + 'itemView'=>'portfolio_list_view',
  31 + 'layout' => "{items}\n<div class='navi-buttons-wr style'>{pager}</div>"
  32 + ] );
  33 + ?>
217 34  
218 35 </div>
219 36 </div>
... ...
frontend/views/performer/portfolio_list_view.php 0 → 100644
  1 +<?php
  2 +use yii\helpers\ArrayHelper;
  3 +use yii\helpers\Html;
  4 +
  5 +
  6 +?>
  7 +<div class="portfolio-project-blocks-wr">
  8 + <div class="portfolio-project-blocks-img-title">
  9 + <div class="portfolio-project-blocks-img">
  10 + <?= Html::a(Html::img($model->cover), '#');?>
  11 + </div>
  12 + <div class="portfolio-project-blocks-title-wr">
  13 + <div class="portfolio-project-blocks-title">
  14 + <a href="#"><?= $model->name?></a>
  15 + </div>
  16 + </div>
  17 + </div>
  18 + <div class="portfolio-project-views-wr">
  19 + <div class="portfolio-project-views ico-views-bl">
  20 + <div class="portfolio-project-views-img-wr">
  21 + <div class="portfolio-project-views-img"><img src="/images/portfolio-project/ico-1.png"/></div>
  22 + </div>
  23 + <div class="portfolio-project-views-txt">127</div>
  24 + </div>
  25 + <div class="portfolio-project-rati ico-views-bl">
  26 + <div class="portfolio-project-views-img-wr">
  27 + <div class="portfolio-project-views-img"><img src="/images/portfolio-project/ico-2.png"/></div>
  28 + </div>
  29 + <div class="portfolio-project-views-txt">10.0</div>
  30 + </div>
  31 + <div class="ico-views-bl">
  32 + <div class="portfolio-project-views-img-wr">
  33 + <div class="portfolio-project-views-img"><img src="/images/portfolio-project/ico-3.png"/></div>
  34 + </div>
  35 + <div class="portfolio-project-views-txt">14</div>
  36 + </div>
  37 + </div>
  38 + <div class="portfolio-project-blocks-tags"><?= implode(',', ArrayHelper::getColumn($model->specializations,'specialization_name'))?></div>
  39 +</div>
0 40 \ No newline at end of file
... ...
frontend/widgets/MyListView.php 0 → 100644
  1 +<?php
  2 +/**
  3 + * @link http://www.yiiframework.com/
  4 + * @copyright Copyright (c) 2008 Yii Software LLC
  5 + * @license http://www.yiiframework.com/license/
  6 + */
  7 +
  8 +namespace frontend\widgets;
  9 +
  10 +use Yii;
  11 +use yii\helpers\ArrayHelper;
  12 +use yii\helpers\Html;
  13 +use yii\widgets\ListView;
  14 +
  15 +/**
  16 + * The ListView widget is used to display data from data
  17 + * provider. Each data model is rendered using the view
  18 + * specified.
  19 + *
  20 + * @author Qiang Xue <qiang.xue@gmail.com>
  21 + * @since 2.0
  22 + */
  23 +class MyListView extends ListView
  24 +{
  25 + /**
  26 + * @var array the HTML attributes for the container of the rendering result of each data model.
  27 + * The "tag" element specifies the tag name of the container element and defaults to "div".
  28 + * If "tag" is false, it means no container element will be rendered.
  29 + * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered.
  30 + */
  31 + public $itemOptions = [];
  32 + /**
  33 + * @var string|callable the name of the view for rendering each data item, or a callback (e.g. an anonymous function)
  34 + * for rendering each data item. If it specifies a view name, the following variables will
  35 + * be available in the view:
  36 + *
  37 + * - `$model`: mixed, the data model
  38 + * - `$key`: mixed, the key value associated with the data item
  39 + * - `$index`: integer, the zero-based index of the data item in the items array returned by [[dataProvider]].
  40 + * - `$widget`: ListView, this widget instance
  41 + *
  42 + * Note that the view name is resolved into the view file by the current context of the [[view]] object.
  43 + *
  44 + * If this property is specified as a callback, it should have the following signature:
  45 + *
  46 + * ~~~
  47 + * function ($model, $key, $index, $widget)
  48 + * ~~~
  49 + */
  50 + public $itemView;
  51 + /**
  52 + * @var array additional parameters to be passed to [[itemView]] when it is being rendered.
  53 + * This property is used only when [[itemView]] is a string representing a view name.
  54 + */
  55 + public $viewParams = [];
  56 + /**
  57 + * @var string the HTML code to be displayed between any two consecutive items.
  58 + */
  59 + public $separator = "\n";
  60 + /**
  61 + * @var array the HTML attributes for the container tag of the list view.
  62 + * The "tag" element specifies the tag name of the container element and defaults to "div".
  63 + * @see \yii\helpers\Html::renderTagAttributes() for details on how attributes are being rendered.
  64 + */
  65 + public $options = ['class' => 'list-view'];
  66 +
  67 +
  68 + /**
  69 + * Renders all data models.
  70 + * @return string the rendering result
  71 + */
  72 + public function renderItems()
  73 + {
  74 + $models = $this->dataProvider->getModels();
  75 + $keys = $this->dataProvider->getKeys();
  76 + $rows = [];
  77 + foreach (array_values($models) as $index => $model) {
  78 + $rows[] = $this->renderItem($model, $keys[$index], $index);
  79 + }
  80 +
  81 + return implode($this->separator, $rows);
  82 + }
  83 +
  84 + /**
  85 + * Renders a single data model.
  86 + * @param mixed $model the data model to be rendered
  87 + * @param mixed $key the key value associated with the data model
  88 + * @param integer $index the zero-based index of the data model in the model array returned by [[dataProvider]].
  89 + * @return string the rendering result
  90 + */
  91 + public function renderItem($model, $key, $index)
  92 + {
  93 + if ($this->itemView === null) {
  94 + $content = $key;
  95 + } elseif (is_string($this->itemView)) {
  96 + $content = $this->getView()->render($this->itemView, array_merge([
  97 + 'model' => $model,
  98 + 'key' => $key,
  99 + 'index' => $index,
  100 + 'widget' => $this,
  101 + ], $this->viewParams));
  102 + } else {
  103 + $content = call_user_func($this->itemView, $model, $key, $index, $this);
  104 + }
  105 +
  106 + return $content;
  107 +
  108 + }
  109 +}
... ...