Commit 35b03e571c51398e6f5d8b2c6dc5ce44bfb44481

Authored by Administrator
1 parent 375f641b

add yii jquery

common/models/Specialization.php
... ... @@ -3,6 +3,7 @@
3 3 namespace common\models;
4 4  
5 5 use Yii;
  6 +use yii\helpers\ArrayHelper;
6 7  
7 8 /**
8 9 * This is the model class for table "specialization".
... ... @@ -63,4 +64,15 @@ class Specialization extends \yii\db\ActiveRecord
63 64 return $this->hasMany(self::className(), ['specialization_pid' => 'specialization_id']);
64 65 }
65 66  
  67 + public function hasChildrenInArray($array){
  68 + $array = ArrayHelper::map($array,'specialization_id', 'specialization_name','specialization_pid');
  69 +
  70 + if(isset($array[$this->specialization_id])){
  71 + return $array[$this->specialization_id];
  72 + } else {
  73 + return false;
  74 + }
  75 +
  76 + }
  77 +
66 78 }
... ...
common/models/User.php
... ... @@ -51,12 +51,17 @@
51 51 return '{{%user}}';
52 52 }
53 53  
  54 +
  55 +
54 56 /**
55 57 * @inheritdoc
56 58 */
57 59 public function behaviors()
58 60 {
59 61 return [
  62 + [
  63 + 'class' => 'common\behaviors\ShowImage',
  64 + ],
60 65 TimestampBehavior::className(),
61 66 ];
62 67 }
... ...
frontend/controllers/SearchController.php
1 1 <?php
2   - namespace frontend\controllers;
3   -
4   - use common\models\CustomerSearch;
5   - use common\models\Project;
6   - use common\models\UserInfo;
7   - use common\models\Vacancy;
8   - use Yii;
9   - use common\models\LoginForm;
10   - use frontend\models\PasswordResetRequestForm;
11   - use frontend\models\ResetPasswordForm;
12   - use frontend\models\SignupForm;
13   - use frontend\models\ContactForm;
14   - use frontend\models\Options;
15   - use frontend\models\OptionValues;
16   - use yii\base\InvalidParamException;
17   - use yii\data\ActiveDataProvider;
18   - use yii\data\Pagination;
19   - use yii\web\BadRequestHttpException;
20   - use yii\web\Controller;
21   - use yii\filters\VerbFilter;
22   - use yii\filters\AccessControl;
23   - use frontend\models\OptionsToValues;
24   - use yii\validators\EmailValidator;
25   - use common\models\User;
26   - use yii\helpers\VarDumper;
27   - use common\models\Page;
28   - use frontend\models\Option;
29   - use common\models\Social;
  2 +namespace frontend\controllers;
  3 +
  4 +use common\models\CustomerSearch;
  5 +use common\models\Project;
  6 +use common\models\Specialization;
  7 +use common\models\UserInfo;
  8 +use common\models\Vacancy;
  9 +use frontend\models\SearchPerformerForm;
  10 +use Yii;
  11 +use common\models\LoginForm;
  12 +use frontend\models\PasswordResetRequestForm;
  13 +use frontend\models\ResetPasswordForm;
  14 +use frontend\models\SignupForm;
  15 +use frontend\models\ContactForm;
  16 +use frontend\models\Options;
  17 +use frontend\models\OptionValues;
  18 +use yii\base\InvalidParamException;
  19 +use yii\data\ActiveDataProvider;
  20 +use yii\data\Pagination;
  21 +use yii\helpers\ArrayHelper;
  22 +use yii\web\BadRequestHttpException;
  23 +use yii\web\Controller;
  24 +use yii\filters\VerbFilter;
  25 +use yii\filters\AccessControl;
  26 +use frontend\models\OptionsToValues;
  27 +use yii\validators\EmailValidator;
  28 +use common\models\User;
  29 +use yii\helpers\VarDumper;
  30 +use common\models\Page;
  31 +use frontend\models\Option;
  32 +use common\models\Social;
30 33  
31 34 /**
32 35 * Site controller
... ... @@ -130,54 +133,43 @@
130 133 ]);
131 134 }
132 135  
133   - public function actionCompany()
134   - {
135   - $query = UserInfo::find()
136   - ->joinWith([ 'user' ])
137   - ->where([
138   - 'is_customer' => 1,
139   - 'user.type' => 2,
140   - ]);
141   -
142   - $companies = new ActiveDataProvider([
143   - 'query' => $query,
144   - 'pagination' => [
145   - 'pageSize' => 3,
146   - ],
147   - ]);
148 136  
149   - return $this->render('company', [
150   - 'companies' => $companies,
151   - ]);
152   - }
153 137  
154   - public function actionPerformer()
155   - {
156   - $query = UserInfo::find()
157   - ->joinWith([ 'user' ])
158   - ->where([
159   - 'is_customer' => 1,
160   - 'user.type' => 1,
161   - ]);
162   -
163   - $performer = new ActiveDataProvider([
164   - 'query' => $query,
165   - 'pagination' => [
166   - 'pageSize' => 3,
167   - ],
168   - ]);
  138 + public function actionPerformer()
  139 + {
169 140  
170   - return $this->render('performer', [
171   - 'performer' => $performer,
172   - ]);
  141 +
  142 + $specializationArray = [];
  143 +
  144 + $specialization = Specialization::find()->where(['specialization_id'=> Specialization::find()->select('specialization_id')
  145 + ->andWhere('specialization_pid != 0')
  146 + ->column()])
  147 + ->all();
  148 +
  149 + foreach(ArrayHelper::index($specialization,'specialization_id') as $spec){
  150 + $array = $spec->hasChildrenInArray($specialization);
  151 + if($array){
  152 + $specializationArray[$spec->specialization_name] = $array;
  153 + }
173 154 }
174 155  
  156 +
  157 + $searchModel = new SearchPerformerForm();
  158 +
  159 +
  160 + return $this->render('performer',[
  161 + 'dataProvider' => $searchModel->search(Yii::$app->request->queryParams),
  162 + 'specialization' => $specializationArray,
  163 + 'model'=> $searchModel
  164 + ]);
  165 + }
  166 +
175 167 public function actionVacancy()
176 168 {
177 169  
178 170 $query = Vacancy::find();
179 171  
180   - $countQuery = clone $query;
  172 + $countQuery = clone $query;
181 173  
182 174 $pagination = new Pagination([
183 175 'totalCount' => $countQuery->count(),
... ...
frontend/models/SearchPerformerForm.php 0 → 100644
  1 +<?php
  2 +
  3 +namespace frontend\models;
  4 +
  5 +use common\models\Portfolio;
  6 +use common\models\User;
  7 +use Yii;
  8 +use yii\base\Model;
  9 +use yii\data\ActiveDataProvider;
  10 +use yii\helpers\ArrayHelper;
  11 +
  12 +/**
  13 + * ContactForm is the model behind the contact form.
  14 + */
  15 +class SearchPerformerForm extends Model
  16 +{
  17 + public $city;
  18 + public $specialization;
  19 + public $working_conditions;
  20 + public $type;
  21 + public $additional_parameters;
  22 + public $rating;
  23 + public $online;
  24 + public $search;
  25 +
  26 +
  27 + /**
  28 + * @inheritdoc
  29 + */
  30 + public function rules()
  31 + {
  32 + return [
  33 + [['specialization','city', 'type','additional_parameters','working_conditions', 'rating','online','search'], 'safe'],
  34 + [
  35 + ['rating'],
  36 + 'default',
  37 + 'value' => 0,
  38 + ]
  39 +
  40 + ];
  41 + }
  42 +
  43 + /**
  44 + * @inheritdoc
  45 + */
  46 + public function attributeLabels()
  47 + {
  48 + return [
  49 + 'city' => 'Город',
  50 + 'specialization' => 'Специализация',
  51 + 'type' => 'Тип исполнителя',
  52 + 'additional_parameters' => 'Тип исполнителя',
  53 + 'working_conditions' => 'Условия работы',
  54 + 'rating' => 'Рейтинг',
  55 + 'online' => 'Статус',
  56 + 'search' => 'Найти'
  57 + ];
  58 + }
  59 +
  60 + /**
  61 + * Sends an email to the specified email address using the information collected by this model.
  62 + * @param string $email the target email address
  63 + * @return boolean whether the email was sent
  64 + */
  65 + public function sendEmail($email)
  66 + {
  67 + return Yii::$app->mailer->compose()
  68 + ->setTo($email)
  69 + ->setFrom([$this->email => $this->name])
  70 + ->setSubject($this->subject)
  71 + ->setTextBody($this->body)
  72 + ->send();
  73 + }
  74 +
  75 + /**
  76 + * Creates data provider instance with search query applied
  77 + *
  78 + * @param array $params
  79 + *
  80 + * @return ActiveDataProvider
  81 + */
  82 + public function search($params)
  83 + {
  84 +
  85 + $this->load($params);
  86 +
  87 + $query = User::find()
  88 + ->select(['user.*', 'company_info.*','user_info.*'])
  89 + ->distinct(true)
  90 + ->joinWith(['userInfo','specializations','companyInfo'])
  91 + ->where(['user_info.is_freelancer' => 1]);
  92 +
  93 +
  94 + $dataProvider = new ActiveDataProvider([
  95 + 'query' => $query,
  96 + 'pagination' => [
  97 + 'pageSize' => 3,
  98 + ],
  99 + ]);
  100 +
  101 + $dataProvider->setSort([
  102 + 'defaultOrder' => [
  103 + 'name' => SORT_ASC,
  104 + ],
  105 + 'attributes' => [
  106 + 'name' => [
  107 + 'asc' => [
  108 + 'company_info.name' => SORT_ASC,
  109 + 'firstname' => SORT_ASC,
  110 + 'lastname' => SORT_ASC,
  111 + ],
  112 + 'desc' => [
  113 + 'company_info.name' => SORT_DESC,
  114 + 'firstname' => SORT_DESC,
  115 + 'lastname' => SORT_DESC,
  116 + ],
  117 + 'default' => SORT_ASC,
  118 + 'label' => 'Название',
  119 + ],
  120 + 'visit' => [
  121 + 'asc' => [
  122 + 'user_info.date_visit' => SORT_ASC,
  123 + ],
  124 + 'desc' => [
  125 + 'user_info.date_visit' => SORT_DESC,
  126 + ],
  127 + 'default' => SORT_DESC,
  128 + 'label' => 'Последний визит',
  129 + ],
  130 + 'city' => [
  131 + 'asc' => [
  132 + 'user_info.city' => SORT_ASC,
  133 + ],
  134 + 'desc' => [
  135 + 'user_info.city' => SORT_DESC,
  136 + ],
  137 + 'default' => SORT_ASC,
  138 + 'label' => 'Город',
  139 + ],
  140 + ],
  141 + ]);
  142 +
  143 +
  144 + if (!$this->validate()) {
  145 +
  146 +
  147 + // uncomment the following line if you do not want to any records when validation fails
  148 + // $query->where('0=1');
  149 + return $dataProvider;
  150 + }
  151 +
  152 + $query->andFilterWhere([
  153 + 'user_info.city' => $this->city,
  154 + 'specialization.specialization_id' => $this->specialization,
  155 + 'user.type' => $this->type,
  156 +
  157 + ]);
  158 +
  159 + $query->andFilterWhere([
  160 + '>=', 'user_info.rating', $this->rating,
  161 + ]);
  162 +
  163 + if($this->online == 1) {
  164 + $query->andWhere([
  165 + '>=',
  166 + 'user_info.date_visit',
  167 + date('Y-m-d H:i:s.u', time() - 1800),
  168 + ]);
  169 + }
  170 +
  171 + foreach($this->working_conditions as $working_conditions){
  172 + if($working_conditions=='guarantee'){
  173 + $query->andWhere([
  174 + '<>',
  175 + 'user_info.guarantee',
  176 + ''
  177 + ]);
  178 + }else if($working_conditions=='prepayment'){
  179 + $query->andWhere([
  180 + 'user_info.prepayment'=>0,
  181 +
  182 + ]);
  183 + }else {
  184 + $query->andFilterWhere([
  185 + 'user_info.'.$working_conditions => 1,
  186 + ]);
  187 + }
  188 +
  189 + }
  190 +
  191 + foreach($this->additional_parameters as $additional_parameters){
  192 +
  193 + switch ($additional_parameters) {
  194 + case 'with_portfolio':
  195 + $query->andFilterWhere([
  196 + 'user.id'=>ArrayHelper::toArray(Portfolio::find()->select('user_id')->column()),
  197 + ]);
  198 + break;
  199 + case 'with_comments':
  200 + $query->andFilterWhere([
  201 + 'user.id'=>ArrayHelper::toArray(Portfolio::find()->select('user_id')->column()),
  202 + ]);
  203 + break;
  204 + case 'only_free':
  205 + $query->andFilterWhere([
  206 + 'user_info.busy'=>0,
  207 + ]);
  208 + break;
  209 + }
  210 + }
  211 +
  212 +
  213 + if(!empty( $this->search)){
  214 +
  215 + $query->andFilterWhere([
  216 + 'or',
  217 + ['like', 'user.firstname', $this->search],
  218 + ['like', 'user.lastname', $this->search],
  219 + ['like', 'company_info.name', $this->search]
  220 + ]);
  221 + }
  222 +
  223 +
  224 +
  225 +
  226 + return $dataProvider;
  227 + }
  228 +}
  229 +
... ...
frontend/views/accounts/general.php
... ... @@ -27,7 +27,7 @@
27 27 <div class="general-check">
28 28  
29 29 <div class="general-check-left">
30   - <?= $form->field($user, 'isPerformer', [ 'template' => "{input}\n{label}\n{error}" ])
  30 + <?= $form->field($user_info, 'is_freelancer', [ 'template' => "{input}\n{label}\n{error}" ])
31 31 ->label('<span></span>Я - исполнитель')
32 32 ->checkbox([
33 33 'class' => 'custom-check disabled admin-check',
... ... @@ -41,7 +41,7 @@
41 41  
42 42 <div class="general-check">
43 43 <div class="general-check-left">
44   - <?= $form->field($user, 'isCustomer', [ 'template' => "{input}\n{label}\n{error}" ])
  44 + <?= $form->field($user_info, 'is_customer', [ 'template' => "{input}\n{label}\n{error}" ])
45 45 ->label('<span></span>Я - заказчик')
46 46 ->checkbox([
47 47 'class' => 'custom-check disabled admin-check',
... ...
frontend/views/layouts/main.php
... ... @@ -89,7 +89,7 @@ AppAsset::register($this);
89 89 <ul>
90 90 <li><?= Html::a('Список проектов', ['search/project'])?></li>
91 91 <li><?= Html::a('Список вакансий', ['search/vacancy'])?></li>
92   - <li><?= Html::a('Список заказчиков', ['site/index'])?></li>
  92 + <li><?= Html::a('Список заказчиков', ['search/customer'])?></li>
93 93 </ul>
94 94 </div>
95 95 </li>
... ... @@ -103,8 +103,8 @@ AppAsset::register($this);
103 103 </ul>
104 104 <ul>
105 105  
106   - <li><?= Html::a('Список проектантов', ['search/performer'])?></li>
107   - <li><?= Html::a('Список проектных компаний', ['search/company'])?></li>
  106 + <li><?= Html::a('Список проектантов', ['search/performer','SearchPerformerForm[type]'=>'1'])?></li>
  107 + <li><?= Html::a('Список проектных компаний', ['search/performer','SearchPerformerForm[type]'=>'2'])?></li>
108 108 </ul>
109 109 </div>
110 110 </li>
... ... @@ -120,7 +120,7 @@ AppAsset::register($this);
120 120 <ul>
121 121 <li><?= Html::a('Список проектантов', ['search/performer'])?></li>
122 122 <li><?= Html::a('Список проектов', ['search/project'])?></li>
123   - <li><?= Html::a('Список заказчиков', ['site/index'])?></li>
  123 + <li><?= Html::a('Список заказчиков', ['search/customer'])?></li>
124 124 </ul>
125 125 </div>
126 126 </li>
... ...
frontend/views/search/_performer_list_view.php
... ... @@ -7,7 +7,7 @@ use yii\helpers\Url;
7 7 <div class="search-worker-blocks">
8 8 <div class="search-worker-blocks-foto-wr">
9 9 <div class="gallery-box-search gallery-box">
10   - <?php $portfolios = ArrayHelper::getColumn($model->user->getPortfolios()->limit(4)->all(), 'cover'); ?>
  10 + <?php $portfolios = ArrayHelper::getColumn($model->getPortfolios()->limit(4)->all(), 'cover'); ?>
11 11 <?php
12 12 for($i = 0; $i<count($portfolios); $i++ ) :?>
13 13 <?php if($i):?>
... ... @@ -34,16 +34,16 @@ use yii\helpers\Url;
34 34  
35 35 <div class="search-worker-blocks-text-wr">
36 36 <div class="search-worker-blocks-ico-wr">
37   - <?= Html::img($model->minImg($model->image, '48','48'))?>
  37 + <?= Html::img($model->minImg($model->userInfo->image, '48','48'))?>
38 38 </div>
39 39 <div class="search-worker-blocks-title-wr">
40   - <?php if($model->member):?>
  40 + <?php if($model->userInfo->member):?>
41 41 <div class="land-stars-pro">PRO</div>
42 42 <?php else: ?>
43 43 <div class="land-stars-new">NEW</div>
44 44 <?php endif; ?>
45 45  
46   - <div class="search-worker-blocks-title"><?= $model->user->name?></div>
  46 + <div class="search-worker-blocks-title"><?= $model->name?></div>
47 47 </div>
48 48 <div class="search-worker-blocks-title-wr">
49 49 <div class="rating-new">
... ... @@ -53,11 +53,11 @@ use yii\helpers\Url;
53 53 <!--<input type="hidden" class="votes" value="12"/>-->
54 54  
55 55 </div>
56   - <div class="search-worker-blocks-atr">30 отзывов, <?= $model->city?></div>
  56 + <div class="search-worker-blocks-atr">30 отзывов, <?= $model->userInfo->city?></div>
57 57 </div>
58 58 <div class="search-worker-blocks-title-wr">
59 59 <div class="search-worker-blocks-status">
60   - <?php if($model->busy):?>
  60 + <?php if($model->userInfo->busy):?>
61 61 <?= Html::img('/images/sidebar-ico/ico_work_01.png');?><span>занят</span>
62 62 <?php else:?>
63 63 <?= Html::img('/images/sidebar-ico/ico-9.png');?><span>свободен</span>
... ... @@ -68,15 +68,15 @@ use yii\helpers\Url;
68 68 <div class="search-worker-blocks-geographic style">
69 69  
70 70  
71   - <span>География работ: </span><?= implode(',',array_filter(ArrayHelper::getColumn($model->user->portfolios, 'city'))) ?>
  71 + <span>География работ: </span><?= implode(',',array_filter(ArrayHelper::getColumn($model->portfolios, 'city'))) ?>
72 72 </div>
73 73 <div class="search-worker-blocks-tags style">
74   - <?php foreach($model->user->specializations as $specialization):?>
  74 + <?php foreach($model->specializations as $specialization):?>
75 75 <a href="#"><?= $specialization->specialization_name ?></a>,
76 76 <?php endforeach;?>
77 77 </div>
78   - <div class="search-worker-blocks-visit style"><span>Последний визит: </span><?= $model->lastVisit ?></div>
79   - <?= Html::a(count($model->user->portfolios)." работа в портфолио",[Url::toRoute(['performer/portfolio','performer_id'=>$model->user_id])], ['class' => "search-worker-blocks-jobs-portfolio" ])?>
  78 + <div class="search-worker-blocks-visit style"><span>Последний визит: </span><?= $model->userInfo->lastVisit ?></div>
  79 + <?= Html::a(count($model->portfolios)." работа в портфолио",[Url::toRoute(['performer/portfolio','performer_id'=>$model->userInfo->user_id])], ['class' => "search-worker-blocks-jobs-portfolio" ])?>
80 80 <div class="search-worker-blocks-buttons style">
81 81 <a class="get-list" href="#">Добавить в закладки</a>
82 82 <a class="get-project" href="#">Предложить проект</a>
... ...
frontend/views/search/company.php deleted
1   -<?php
2   - use \yii\helpers\Html;
3   -use yii\widgets\ListView;
4   -
5   -/* @var $this yii\web\View */
6   - $this->title = 'My Yii Application';
7   -?>
8   -
9   -<div class="section-box content">
10   - <div class="section-box-22">
11   - <div class="box-wr">
12   - <div class="box-all">
13   - <div class="left-search-work">
14   - <form action="" class="search-work-form">
15   - <div class="blocks-check-list-wrapp">
16   - <div class="blocks-check-title"><label for="theme-1">Город</label></div>
17   - <select id="theme-1">
18   - <option selected value="">Любой</option>
19   - <option value="">Киев</option>
20   - <option value="">Житомир</option>
21   - <option value="">Львов</option>
22   - <option value="">Киев</option>
23   - <option value="">Житомир</option>
24   - <option value="">Львов</option>
25   - </select>
26   - </div>
27   - <div class="blocks-check-list-wrapp">
28   - <div class="blocks-check-title"><label for="theme-2">Специализация</label></div>
29   - <select id="theme-2">
30   - <option selected value="">Любая</option>
31   - <option value="">Киев</option>
32   - <option value="">Житомир</option>
33   - <option value="">Львов</option>
34   - <option value="">Киев</option>
35   - <option value="">Житомир</option>
36   - <option value="">Львов</option>
37   - </select>
38   - </div>
39   -
40   - <div class="blocks-check-list-wrapp">
41   - <div class="blocks-check-title"><label for="theme-3">Тип исполнителя</label></div>
42   - <select id="theme-3">
43   - <option selected value="">Любая</option>
44   - <option value="">Киев</option>
45   - <option value="">Житомир</option>
46   - <option value="">Львов</option>
47   - <option value="">Киев</option>
48   - <option value="">Житомир</option>
49   - <option value="">Львов</option>
50   - </select>
51   - </div>
52   -
53   - <div class="blocks-check-list-wrapp">
54   - <div class="blocks-check-title">Условия работы</div>
55   - <div class="blocks-check-list">
56   - <input type="checkbox" name="group2" class="check-search" id="theme-4"><label for="theme-4"><span></span>С гарантией</label>
57   - </div>
58   - <div class="blocks-check-list">
59   - <input type="checkbox" name="group2" class="check-search" id="theme-5"><label for="theme-5"><span></span>С договором</label>
60   - </div>
61   - <div class="blocks-check-list">
62   - <input type="checkbox" name="group2" class="check-search" id="theme-6"><label for="theme-6"><span></span>Со сметой</label>
63   - </div>
64   - <div class="blocks-check-list">
65   - <input type="checkbox" name="group2" class="check-search" id="theme-7"><label for="theme-7"><span></span>Без предоплаты</label>
66   - </div>
67   - </div>
68   -
69   - <div class="blocks-check-list-wrapp">
70   - <div class="blocks-check-title">Рейтинг</div>
71   - <div class="rating">
72   - <!--оценка-->
73   - <input type="hidden" class="val" value="0"/>
74   - </div>
75   - </div>
76   -
77   - <div class="blocks-check-list-wrapp">
78   - <div class="blocks-check-title">Статус</div>
79   - <div class="blocks-check-list">
80   - <input type="radio" name="group3" class="check-search" id="theme-8"><label for="theme-8"><span></span>Онлайн</label>
81   - </div>
82   - <div class="blocks-check-list">
83   - <input type="radio" name="group3" class="check-search" id="theme-9" checked><label for="theme-9"><span></span>Все</label>
84   - </div>
85   - </div>
86   -
87   - <div class="blocks-check-list-wrapp">
88   - <div class="blocks-check-title">Дополнительно</div>
89   - <div class="blocks-check-list">
90   - <input type="checkbox" name="group4" class="check-search" id="theme-10"><label for="theme-10"><span></span>Только с портфолио</label>
91   - </div>
92   - <div class="blocks-check-list">
93   - <input type="checkbox" name="group4" class="check-search" id="theme-11"><label for="theme-11"><span></span>Только с отзывами</label>
94   - </div>
95   - <div class="blocks-check-list">
96   - <input type="checkbox" name="group4" class="check-search" id="theme-12"><label for="theme-12"><span></span>Только свободные</label>
97   - </div>
98   - </div>
99   - <div class="blocks-check-list-submit">
100   - <input type="submit" value="Найти"/>
101   - </div>
102   - </form>
103   - <script>
104   - $('div.rating').rating({
105   - fx: 'full',
106   - url: 'rating.php'
107   - });
108   - </script>
109   - </div>
110   - <div class="right-search-work">
111   - <div class="search-worker-title style">Найти исполнителя</div>
112   - <div class="search-worker-title-two style">Компании готовые приступить к работе <span>145</span></div>
113   - <div class="search-worker-search-wr style">
114   - <form action="" class="search-worker-form">
115   - <input id="srch-wrk-text" type="text" placeholder="Любая информация о проектанте" required=""/>
116   - <input id="srch-wrk-sub" type="submit" value="Найти"/>
117   - </form>
118   - <a href="#" class="add-to-catalog-search-worker">Добавить себя в каталог</a>
119   - <div class="search-worker-sort-wr style">
120   - <div class="search-worker-sort">Сортировать:&nbsp;</div>
121   - <ul>
122   - <li class="activejob">
123   - <a href="#">рейтинг</a>
124   - <div class="sidebar-droped-wr style">
125   - <ul>
126   - <li><a href="#">1заказчик</a></li>
127   - <li><a href="#">2заказчик</a></li>
128   - <li><a href="#">3заказчик</a></li>
129   - <li><a href="#">4заказчик</a></li>
130   - <li style="display: none"><a href="#">рейтинг</a></li>
131   - </ul>
132   - </div>
133   - </li>
134   - </ul>
135   - </div>
136   - </div>
137   -
138   - <div class="search-company-blocks-wr style">
139   -
140   - <?=
141   - ListView::widget( [
142   - 'dataProvider' => $companies,
143   - 'itemView'=>'_company_list_view',
144   - 'layout' => "{items}\n<div class='navi-buttons-wr style'>{pager}</div>",
145   - 'itemOptions' =>[
146   - 'tag' => false
147   - ]
148   -
149   - ] );
150   - ?>
151   - </div>
152   -
153   - <script>
154   - $('div.rating-new').rating({
155   - fx: 'full',
156   - readOnly: 'true',
157   - url: 'rating.php'
158   - });
159   - </script>
160   -
161   - </div>
162   - </div>
163   - </div>
164   - </div>
165   -
166   -</div>
frontend/views/search/customer.php
... ... @@ -171,136 +171,6 @@
171 171 'itemView' => '_customer_list_view',
172 172 ]);
173 173 ?>
174   - <?php
175   - /* == Layout ==
176   - ?>
177   - <div class="search-worker-blocks-wr style">
178   -
179   - <div class="search-worker-blocks">
180   - <div class="search_perform_txt-wr">
181   - <div class="search_perform_title">ООО «Ортекс»</div>
182   - <div class="search_perform-stars-wr">
183   - <div class="rating_search_performer">
184   - <!--оценка-->
185   - <input type="hidden" class="val" value="4"/>
186   - </div>
187   - <div class="search_perform-stars-txt">30 отзывов, Киев</div>
188   - </div>
189   - <div class="search_perform_leng">
190   - <div>Сотрудники: более 40</div>
191   - </div>
192   - <div class="search_perform_visit">
193   - <span>Послелний визит:</span> 2 дня назад
194   - </div>
195   - <div class="search_perform_projets_nam">
196   - <a href="#">Заказано проектов: 21</a></div>
197   - </div>
198   -
199   - <div class="right_search_perform_block-wr">
200   - <div class="right_search_perform_foto-wr">
201   - <div><img src="/images/search_performer_img-1.jpg" alt=""/></div>
202   - </div>
203   - <a class="get-list" href="#">Добавить в закладки</a>
204   - </div>
205   - </div>
206   -
207   - <div class="search-worker-blocks">
208   - <div class="search_perform_txt-wr">
209   - <div class="search_perform_title">Петер Цумтор</div>
210   - <div class="search_perform-stars-wr">
211   - <div class="rating_search_performer">
212   - <!--оценка-->
213   - <input type="hidden" class="val" value="2"/>
214   - </div>
215   - <div class="search_perform-stars-txt">30 отзывов, Киев</div>
216   - </div>
217   - <div class="search_perform_leng">
218   - <!--<div>Сотрудники: более 40</div>-->
219   - </div>
220   - <div class="search_perform_visit">
221   - <span>Послелний визит:</span> 2 дня назад
222   - </div>
223   - <div class="search_perform_projets_nam">
224   - <a href="#">Заказано проектов: 21</a></div>
225   - </div>
226   -
227   - <div class="right_search_perform_block-wr">
228   - <div class="right_search_perform_foto-wr">
229   - <div><a href="#"><img src="/images/ded-ico.png" alt=""/></a></div>
230   - </div>
231   - <a class="get-list" href="#">Добавить в закладки</a>
232   - </div>
233   - </div>
234   -
235   - <div class="search-worker-blocks">
236   - <div class="search_perform_txt-wr">
237   - <div class="search_perform_title">ООО «Ортекс»</div>
238   - <div class="search_perform-stars-wr">
239   - <div class="rating_search_performer">
240   - <!--оценка-->
241   - <input type="hidden" class="val" value="1"/>
242   - </div>
243   - <div class="search_perform-stars-txt">30 отзывов, Киев</div>
244   - </div>
245   - <div class="search_perform_leng">
246   - <div>Сотрудники: более 40</div>
247   - </div>
248   - <div class="search_perform_visit">
249   - <span>Послелний визит:</span> 2 дня назад
250   - </div>
251   - <div class="search_perform_projets_nam">
252   - <a href="#">Заказано проектов: 21</a></div>
253   - </div>
254   -
255   - <div class="right_search_perform_block-wr">
256   - <div class="right_search_perform_foto-wr">
257   - <div><img src="/images/search_performer_img-1.jpg" alt=""/></div>
258   - </div>
259   - <a class="get-list" href="#">Добавить в закладки</a>
260   - </div>
261   - </div>
262   -
263   - <div class="search-worker-blocks">
264   - <div class="search_perform_txt-wr">
265   - <div class="search_perform_title">Петер Цумтор</div>
266   - <div class="search_perform-stars-wr">
267   - <div class="rating_search_performer">
268   - <!--оценка-->
269   - <input type="hidden" class="val" value="5"/>
270   - </div>
271   - <div class="search_perform-stars-txt">30 отзывов, Киев</div>
272   - </div>
273   - <div class="search_perform_leng">
274   - <!--<div>Сотрудники: более 40</div>-->
275   - </div>
276   - <div class="search_perform_visit">
277   - <span>Послелний визит:</span> 2 дня назад
278   - </div>
279   - <div class="search_perform_projets_nam">
280   - <a href="#">Заказано проектов: 21</a></div>
281   - </div>
282   -
283   - <div class="right_search_perform_block-wr">
284   - <div class="right_search_perform_foto-wr">
285   - <div><img src="/images/ded-ico.png" alt=""/></div>
286   - </div>
287   - <a class="get-list" href="#">Добавить в закладки</a>
288   - </div>
289   - </div>
290   - </div>
291   -
292   - <div class="navi-buttons-wr style">
293   - <ul class="pagination">
294   - <li class="prev disabled"><span>«</span></li>
295   - <li class="active"><a href="#">1</a></li>
296   - <li><a href="#">2</a></li>
297   - <li class="next"><a href="#">»</a></li>
298   - </ul>
299   - </div>
300   -
301   - <?php
302   - == End of layout == */
303   - ?>
304 174  
305 175 <script>
306 176 $('div.rating_search_performer').rating(
... ...
frontend/views/search/performer.php
1 1 <?php
2 2  
  3 +use common\models\Vacancy;
  4 +use kartik\select2\Select2;
  5 +use yii\helpers\ArrayHelper;
3 6 use \yii\helpers\Html;
  7 +use yii\helpers\Url;
  8 +use yii\jui\SliderInput;
  9 +use yii\web\JsExpression;
  10 +use yii\widgets\ActiveForm;
  11 +use yii\widgets\LinkSorter;
4 12 use yii\widgets\ListView;
5 13  
6 14 /* @var $this yii\web\View */
7 15  
  16 +$sort_array = $dataProvider->sort->getAttributeOrders();
  17 +$active_key = array_keys($sort_array)[0];
  18 +$active_value = $sort_array[$active_key];
  19 +$sort_name = (($active_value == 4)?'-':'').$active_key;
  20 +
8 21 $this->title = 'My Yii Application';
9 22 ?>
10 23  
... ... @@ -13,182 +26,169 @@ $this-&gt;title = &#39;My Yii Application&#39;;
13 26 <div class="box-wr">
14 27 <div class="box-all">
15 28 <div class="left-search-work">
16   - <form action="" class="search-work-form">
17   - <div class="blocks-check-list-wrapp">
18   - <div class="blocks-check-title"><label for="theme-1">Город</label></div>
19   - <select id="theme-1">
20   - <option selected value="">Любой</option>
21   - <option value="">Киев</option>
22   - <option value="">Житомир</option>
23   - <option value="">Львов</option>
24   - <option value="">Киев</option>
25   - <option value="">Житомир</option>
26   - <option value="">Львов</option>
27   -
28   - <option value="">Киев</option>
29   - <option value="">Житомир</option>
30   - <option value="">Львов</option>
31   - <option value="">Киев</option>
32   - <option value="">Житомир</option>
33   - <option value="">Львов</option>
34   - <option value="">Киев</option>
35   - <option value="">Житомир</option>
36   - <option value="">Львов</option>
37   - <option value="">Киев</option>
38   - <option value="">Житомир</option>
39   - <option value="">Львов</option>
40   - <option value="">Киев</option>
41   - <option value="">Житомир</option>
42   - <option value="">Львов</option>
43   - <option value="">Киев</option>
44   - <option value="">Житомир</option>
45   - <option value="">Львов</option>
46   - <option value="">Киев</option>
47   - <option value="">Житомир</option>
48   - <option value="">Львов</option>
49   - <option value="">Киев</option>
50   - <option value="">Житомир</option>
51   - <option value="">Львов</option>
52   - <option value="">Киев</option>
53   - <option value="">Житомир</option>
54   - <option value="">Львов</option>
55   - <option value="">Киев</option>
56   - <option value="">Житомир</option>
57   - <option value="">Львов</option>
58   - <option value="">Киев</option>
59   - <option value="">Житомир</option>
60   - <option value="">Львов</option>
61   - <option value="">Киев</option>
62   - <option value="">Житомир</option>
63   - <option value="">Львов</option>
64   - <option value="">Киев</option>
65   - <option value="">Житомир</option>
66   - <option value="">Львов</option>
67   - <option value="">Киев</option>
68   - <option value="">Житомир</option>
69   - <option value="">Львов</option>
70   - <option value="">Киев</option>
71   - <option value="">Житомир</option>
72   - <option value="">Львов</option>
73   - <option value="">Киев</option>
74   - <option value="">Житомир</option>
75   - <option value="">Львов</option>
76   - <option value="">Киев</option>
77   - <option value="">Житомир</option>
78   - <option value="">Львов</option>
79   - <option value="">Киев</option>
80   - <option value="">Житомир</option>
81   - <option value="">Львов</option>
82   - <option value="">Киев</option>
83   -
84   - </select>
85   - </div>
86   - <div class="blocks-check-list-wrapp">
87   - <div class="blocks-check-title"><label for="theme-2">Специализация</label></div>
88   - <select id="theme-2">
89   - <option selected value="">Любая</option>
90   - <option value="">Киев</option>
91   - <option value="">Житомир</option>
92   - <option value="">Львов</option>
93   - <option value="">Киев</option>
94   - <option value="">Житомир</option>
95   - <option value="">Львов</option>
96   - </select>
97   - </div>
  29 + <?php
  30 + $form = ActiveForm::begin(['options'=>['class'=>'search-work-form'],'action'=>[''], 'method'=>'get']);
  31 + ?>
  32 +
  33 +
  34 + <?= $form->field($model, 'city')
  35 + ->widget(Select2::classname(), [
  36 + 'options' => [ 'placeholder' => 'Выбор города ...' ],
  37 + 'pluginOptions' => [
  38 + 'allowClear' => true,
  39 + 'minimumInputLength' => 3,
  40 + 'ajax' => [
  41 + 'url' => \yii\helpers\Url::to([ 'site/city' ]),
  42 + 'dataType' => 'json',
  43 + 'data' => new JsExpression('function(params) { return {q:params.term}; }'),
  44 + ],
  45 + 'escapeMarkup' => new JsExpression('function (markup) { return markup; }'),
  46 + 'templateResult' => new JsExpression('function(city) { return city.text; }'),
  47 + 'templateSelection' => new JsExpression('function (city) { return city.text; }'),
  48 + ],
  49 + ]); ?>
98 50  
99   - <div class="blocks-check-list-wrapp">
100   - <div class="blocks-check-title"><label for="theme-3">Тип исполнителя</label></div>
101   - <select id="theme-3">
102   - <option selected value="">Любая</option>
103   - <option value="">Киев</option>
104   - <option value="">Житомир</option>
105   - <option value="">Львов</option>
106   - <option value="">Киев</option>
107   - <option value="">Житомир</option>
108   - <option value="">Львов</option>
109   - </select>
110   - </div>
111 51  
112   - <div class="blocks-check-list-wrapp">
113   - <div class="blocks-check-title">Условия работы</div>
114   - <div class="blocks-check-list">
115   - <input type="checkbox" name="group2" class="check-search" id="theme-4"><label for="theme-4"><span></span>С гарантией</label>
116   - </div>
117   - <div class="blocks-check-list">
118   - <input type="checkbox" name="group2" class="check-search" id="theme-5"><label for="theme-5"><span></span>С договором</label>
119   - </div>
120   - <div class="blocks-check-list">
121   - <input type="checkbox" name="group2" class="check-search" id="theme-6"><label for="theme-6"><span></span>Со сметой</label>
122   - </div>
123   - <div class="blocks-check-list">
124   - <input type="checkbox" name="group2" class="check-search" id="theme-7"><label for="theme-7"><span></span>Без предоплаты</label>
125   - </div>
126   - </div>
  52 + <?=
  53 + $form->field($model, 'specialization')
  54 + ->dropDownList($specialization, ['prompt' => 'Любая']);
  55 + ?>
127 56  
128   - <div class="blocks-check-list-wrapp">
129   - <div class="blocks-check-title">Рейтинг</div>
130   - <div class="rating">
131   - <!--оценка-->
132   - <input type="hidden" class="val" value="0"/>
133   - </div>
134   - </div>
135 57  
136   - <div class="blocks-check-list-wrapp">
137   - <div class="blocks-check-title">Статус</div>
138   - <div class="blocks-check-list">
139   - <input type="radio" name="group3" class="check-search" id="theme-8"><label for="theme-8"><span></span>Онлайн</label>
140   - </div>
141   - <div class="blocks-check-list">
142   - <input type="radio" name="group3" class="check-search" id="theme-9" checked><label for="theme-9"><span></span>Все</label>
143   - </div>
144   - </div>
  58 + <?=
  59 + $form->field($model, 'type')
  60 + ->dropDownList(['1'=>'Частное лицо','2'=>'Компания'], ['prompt' => 'Любой']);
  61 + ?>
145 62  
146   - <div class="blocks-check-list-wrapp">
147   - <div class="blocks-check-title">Дополнительно</div>
148   - <div class="blocks-check-list">
149   - <input type="checkbox" name="group4" class="check-search" id="theme-10"><label for="theme-10"><span></span>Только с портфолио</label>
150   - </div>
151   - <div class="blocks-check-list">
152   - <input type="checkbox" name="group4" class="check-search" id="theme-11"><label for="theme-11"><span></span>Только с отзывами</label>
153   - </div>
154   - <div class="blocks-check-list">
155   - <input type="checkbox" name="group4" class="check-search" id="theme-12"><label for="theme-12"><span></span>Только свободные</label>
156   - </div>
157   - </div>
158   - <div class="blocks-check-list-submit">
159   - <input type="submit" value="Найти"/>
160   - </div>
161   - </form>
162   - <script>
163   - $('div.rating').rating({
164   - fx: 'full',
165   - url: 'rating.php'
166   - });
167   - </script>
  63 +
  64 +
  65 + <?=
  66 +
  67 + $form->field ($model, 'working_conditions')
  68 + ->checkboxList (
  69 + [
  70 + 'guarantee' => 'С гарантией',
  71 + 'contract' => 'С договором',
  72 + 'estimate' => 'Со сметой',
  73 + 'prepayment' => 'Без предоплаты'
  74 + ],
  75 + [
  76 + 'item' => function($index, $label, $name, $checked, $value) {
  77 + $return = '<div class="blocks-check-list">';
  78 + $return .= '<input type="checkbox" '.($checked ? "checked" : "" ).' name="' . $name . '" class="check-search" value="' . $value . '" id="theme-'.$index.'">';
  79 + $return .= '<label for="theme-'.$index.'"><span></span>'.$label.'</label>';
  80 + $return .= '</div>';
  81 + return $return;
  82 + }
  83 + ]
  84 + );
  85 + ?>
  86 +
  87 + <div class="blocks-check-list-wrapp">
  88 + <div id="slider-value"></div>
  89 + <?php
  90 + echo $form->field($model, 'rating', [
  91 + 'template' => "{label}<br><div id='{$form->id}-rating'>{$model->rating}</div><br>{input}\n{hint}\n{error}",
  92 + 'labelOptions' => [
  93 + 'class' => 'blocks-check-title',
  94 + ],
  95 + ])
  96 + ->widget(SliderInput::className(), [
  97 + 'clientOptions' => [
  98 + 'min' => 0,
  99 + 'max' => 5,
  100 + 'step' => 0.5,
  101 + ],
  102 + 'clientEvents' => [
  103 + 'slide' => "function( event, ui ) {
  104 + $( '#{$form->id}-rating' ).text(ui.value);
  105 + $('input[name=\"{$model->formName()}[rating]\"]').val(ui.value);
  106 +
  107 + }",
  108 + ],
  109 + ]);
  110 + ?>
  111 + </div>
  112 +
  113 +
  114 +
  115 + <?=
  116 + $form->field($model, 'online', [
  117 + 'options' => [
  118 + 'class' => 'blocks-check-list-wrapp',
  119 + ],
  120 + 'template' => "<div class='blocks-check-title'>{label}</div>\n{input}\n{hint}\n{error}",
  121 + ])
  122 + ->radioList([
  123 + '' => 'Все',
  124 + 1 => 'Онлайн',
  125 + ], [
  126 + 'item' => function($index, $label, $name, $checked, $value) use ($model) {
  127 + return "<div class='blocks-check-list'><input type='radio' id='{$model->formName()}-{$index}' name='{$name}' class='check-search' value='{$value}' " . ($checked?'checked':'') . "><label for='{$model->formName()}-{$index}'><span></span>{$label}</label></div>";
  128 + },
  129 + 'unselect' => NULL,
  130 + ]);
  131 + ?>
  132 +
  133 +
  134 +
  135 + <?=
  136 + $form->field ($model, 'additional_parameters')
  137 + ->checkboxList (
  138 + [
  139 + 'with_portfolio' => 'Только с портфолио',
  140 + 'with_comments' => 'Только с отзывами',
  141 + 'only_free' => 'Только свободные',
  142 + ],
  143 + [
  144 + 'item' => function($index, $label, $name, $checked, $value) {
  145 + $return = '<div class="blocks-check-list">';
  146 + $return .= '<input type="checkbox" '.($checked ? "checked" : "" ).' name="' . $name . '" class="check-search" value="' . $value . '" id="theme2-'.$index.'">';
  147 + $return .= '<label for="theme2-'.$index.'"><span></span>'.$label.'</label>';
  148 + $return .= '</div>';
  149 + return $return;
  150 + }
  151 + ]
  152 + );
  153 + ?>
  154 + <div class="blocks-check-list-submit">
  155 + <?= Html::submitInput('Найти') ?>
  156 + </div>
  157 +
  158 + <?php
  159 + $form->end();
  160 + ?>
168 161 </div>
169 162 <div class="right-search-work">
170 163 <div class="search-worker-title style">Найти исполнителя</div>
171   - <div class="search-worker-title-two style">Проектанты готовые приступить к работе <span>145</span></div>
  164 + <div class="search-worker-title-two style">Проектанты готовые приступить к работе <span><?= $dataProvider->totalCount ?></span></div>
172 165 <div class="search-worker-search-wr style">
173   - <form action="" class="search-worker-form">
174   - <input id="srch-wrk-text" type="text" placeholder="Любая информация о проектанте" required=""/>
175   - <input id="srch-wrk-sub" type="submit" value="Найти"/>
176   - </form>
177   - <a href="#" class="add-to-catalog-search-worker">Добавить себя в каталог</a>
  166 + <?php
  167 + $form2 = ActiveForm::begin(['method' => 'get', 'action' => [''], 'options' => ['class' => 'search-worker-form']]);
  168 + ?>
  169 +
  170 + <?= $form2->field($model, 'search', ['options' => ['tag' => 'span']])->label(false)->textInput(['placeholder' => $model->getAttributeLabel('search')]);?>
  171 +
  172 + <?= Html::submitInput('Найти');?>
  173 +
  174 + <?php
  175 + $form2->end();
  176 + ?>
  177 +
  178 +
  179 + <?= Html::a('Добавить себя в каталог',Url::toRoute('accounts/service'),['class'=>'add-to-catalog-search-worker'])?>
  180 +
178 181 <div class="search-worker-sort-wr style">
179 182 <div class="search-worker-sort">Сортировать:&nbsp;</div>
180 183 <ul>
181 184 <li class="activejob">
182   - <a href="#">рейтинг</a>
  185 + <a href="#" data-sort-name="<?=$sort_name?>"></a>
183 186 <div class="sidebar-droped-wr style">
184   - <ul>
185   - <li><a href="#">рейтинг</a></li>
186   - <li><a href="#">1заказчик</a></li>
187   - <li><a href="#">2заказчик</a></li>
188   - <li><a href="#">3заказчик</a></li>
189   - <li><a href="#">4заказчик</a></li>
190   -
191   - </ul>
  187 + <?php
  188 + echo LinkSorter::widget([
  189 + 'sort' => $dataProvider->sort,
  190 + ]);
  191 + ?>
192 192 </div>
193 193 </li>
194 194 </ul>
... ... @@ -198,8 +198,9 @@ $this-&gt;title = &#39;My Yii Application&#39;;
198 198 <div class="search-worker-blocks-wr style">
199 199  
200 200 <?=
  201 +
201 202 ListView::widget( [
202   - 'dataProvider' => $performer,
  203 + 'dataProvider' => $dataProvider,
203 204 'itemView'=>'_performer_list_view',
204 205 'layout' => "{items}\n<div class='navi-buttons-wr style'>{pager}</div>"
205 206 ] );
... ... @@ -209,19 +210,9 @@ $this-&gt;title = &#39;My Yii Application&#39;;
209 210  
210 211  
211 212 </div>
212   -
213   - <script>
214   - $('div.rating-new').rating({
215   - fx: 'full',
216   - readOnly: 'true',
217   - url: 'rating.php'
218   - });
219   - </script>
220 213 </div>
221 214 </div>
222 215 </div>
223 216 </div>
224 217  
225 218 </div>
226   -
227   -
... ...
frontend/web/css/style.css
... ... @@ -6655,6 +6655,18 @@ input[disabled], select[disabled] {
6655 6655 }
6656 6656 .right_search_perform_foto-wr {vertical-align: middle}
6657 6657 .section-box-customer .search-worker-blocks {margin-top: 20px}
  6658 +
  6659 +.search-work-form .control-label{
  6660 + width: 100%;
  6661 + font-size: 13px;
  6662 + font-weight: 700;
  6663 + margin-bottom: 5px;
  6664 +}
  6665 +
  6666 +.search-work-form .form-group{
  6667 + margin-bottom: 16px;
  6668 +
  6669 +}
6658 6670 .form_site_logn-wr {
6659 6671 width: 240px;
6660 6672 margin: 0 auto;
... ...