Commit cda2c1c964dfe19fba7ddffe90f03161e1801818
1 parent
dafc9daf
add yii jquery
Showing
10 changed files
with
310 additions
and
80 deletions
Show diff stats
1 | +<?php | ||
2 | + | ||
3 | +namespace backend\controllers; | ||
4 | + | ||
5 | +use yii\base\Controller; | ||
6 | +use yii\filters\VerbFilter; | ||
7 | + | ||
8 | +class CurrencyController extends Controller{ | ||
9 | + /** | ||
10 | + * @inheritdoc | ||
11 | + */ | ||
12 | + public function behaviors() | ||
13 | + { | ||
14 | + return [ | ||
15 | + 'verbs' => [ | ||
16 | + 'class' => VerbFilter::className(), | ||
17 | + 'actions' => [ | ||
18 | + 'delete' => ['POST'], | ||
19 | + ], | ||
20 | + ], | ||
21 | + ]; | ||
22 | + } | ||
23 | + | ||
24 | + /** | ||
25 | + * Lists all Specialization models. | ||
26 | + * @return mixed | ||
27 | + */ | ||
28 | + public function actionIndex() | ||
29 | + { | ||
30 | + return $this->render('index', [ | ||
31 | + | ||
32 | + ]); | ||
33 | + } | ||
34 | + | ||
35 | + | ||
36 | +} | ||
0 | \ No newline at end of file | 37 | \ No newline at end of file |
1 | +<?php | ||
2 | + | ||
3 | +namespace common\models; | ||
4 | + | ||
5 | +use Yii; | ||
6 | + | ||
7 | +/** | ||
8 | + * This is the model class for table "vacancy_specialization". | ||
9 | + * | ||
10 | + * @property integer $vacancy_specialization_id | ||
11 | + * @property integer $vacancy_id | ||
12 | + * @property integer $specialization_id | ||
13 | + * | ||
14 | + * @property Specialization $specialization | ||
15 | + * @property Vacancy $vacancy | ||
16 | + */ | ||
17 | +class VacancySpecialization extends \yii\db\ActiveRecord | ||
18 | +{ | ||
19 | + /** | ||
20 | + * @inheritdoc | ||
21 | + */ | ||
22 | + public static function tableName() | ||
23 | + { | ||
24 | + return 'vacancy_specialization'; | ||
25 | + } | ||
26 | + | ||
27 | + /** | ||
28 | + * @inheritdoc | ||
29 | + */ | ||
30 | + public function rules() | ||
31 | + { | ||
32 | + return [ | ||
33 | + [['vacancy_id', 'specialization_id'], 'integer'], | ||
34 | + [['specialization_id'], 'exist', 'skipOnError' => true, 'targetClass' => Specialization::className(), 'targetAttribute' => ['specialization_id' => 'specialization_id']], | ||
35 | + [['vacancy_id'], 'exist', 'skipOnError' => true, 'targetClass' => Vacancy::className(), 'targetAttribute' => ['vacancy_id' => 'vacancy_id']], | ||
36 | + ]; | ||
37 | + } | ||
38 | + | ||
39 | + /** | ||
40 | + * @inheritdoc | ||
41 | + */ | ||
42 | + public function attributeLabels() | ||
43 | + { | ||
44 | + return [ | ||
45 | + 'vacancy_specialization_id' => 'Vacancy Specialization ID', | ||
46 | + 'vacancy_id' => 'Vacancy ID', | ||
47 | + 'specialization_id' => 'Specialization ID', | ||
48 | + ]; | ||
49 | + } | ||
50 | + | ||
51 | + /** | ||
52 | + * @return \yii\db\ActiveQuery | ||
53 | + */ | ||
54 | + public function getSpecialization() | ||
55 | + { | ||
56 | + return $this->hasOne(Specialization::className(), ['specialization_id' => 'specialization_id']); | ||
57 | + } | ||
58 | + | ||
59 | + /** | ||
60 | + * @return \yii\db\ActiveQuery | ||
61 | + */ | ||
62 | + public function getVacancy() | ||
63 | + { | ||
64 | + return $this->hasOne(Vacancy::className(), ['vacancy_id' => 'vacancy_id']); | ||
65 | + } | ||
66 | +} |
console/migrations/m160312_143616_project_add_field_total_budget.php
0 → 100644
1 | +<?php | ||
2 | + | ||
3 | +use yii\db\Migration; | ||
4 | + | ||
5 | +class m160312_143616_project_add_field_total_budget extends Migration | ||
6 | +{ | ||
7 | + public function up() | ||
8 | + { | ||
9 | + $this->addColumn('{{%project}}', 'total_budget', $this->integer()); | ||
10 | + } | ||
11 | + | ||
12 | + public function down() | ||
13 | + { | ||
14 | + $this->dropColumn('{{%project}}', 'total_budget'); | ||
15 | + | ||
16 | + } | ||
17 | +} |
frontend/controllers/CompanyController.php
@@ -8,6 +8,8 @@ use common\models\Gallery; | @@ -8,6 +8,8 @@ use common\models\Gallery; | ||
8 | use common\models\Portfolio; | 8 | use common\models\Portfolio; |
9 | use common\models\PortfolioSpecialization; | 9 | use common\models\PortfolioSpecialization; |
10 | use common\models\Team; | 10 | use common\models\Team; |
11 | +use common\models\Vacancy; | ||
12 | +use common\models\VacancySpecialization; | ||
11 | use Yii; | 13 | use Yii; |
12 | use yii\data\ActiveDataProvider; | 14 | use yii\data\ActiveDataProvider; |
13 | use yii\data\ArrayDataProvider; | 15 | use yii\data\ArrayDataProvider; |
@@ -285,9 +287,28 @@ class CompanyController extends Controller | @@ -285,9 +287,28 @@ class CompanyController extends Controller | ||
285 | $company = User::findOne($company_id); | 287 | $company = User::findOne($company_id); |
286 | $vacancy = $company->getVacancies()->where(['link' => $link])->with(['employments'])->one(); | 288 | $vacancy = $company->getVacancies()->where(['link' => $link])->with(['employments'])->one(); |
287 | 289 | ||
290 | + | ||
291 | + $specialization_id = $vacancy->getSpecializations()->select('specialization_id')->column(); | ||
292 | + | ||
293 | + $vacancy_id = VacancySpecialization::find()->where(['specialization_id'=>$specialization_id])->select('vacancy_id')->column(); | ||
294 | + | ||
295 | + | ||
296 | + $similar_vacancies = Vacancy::find() | ||
297 | + ->where([ | ||
298 | + 'city' => $vacancy->city, | ||
299 | + 'vacancy_id' => $vacancy_id | ||
300 | + ]) | ||
301 | + ->andFilterWhere([ | ||
302 | + '<>', | ||
303 | + 'vacancy_id', | ||
304 | + $vacancy->vacancy_id | ||
305 | + ])->limit(3) | ||
306 | + ->all(); | ||
307 | + | ||
288 | return $this->render('vacancy-view',[ | 308 | return $this->render('vacancy-view',[ |
289 | 'company' => $company, | 309 | 'company' => $company, |
290 | 'vacancy' => $vacancy, | 310 | 'vacancy' => $vacancy, |
311 | + 'similar_vacancies' => $similar_vacancies | ||
291 | ]); | 312 | ]); |
292 | } | 313 | } |
293 | 314 |
frontend/controllers/SearchController.php
@@ -7,6 +7,7 @@ use common\models\Specialization; | @@ -7,6 +7,7 @@ use common\models\Specialization; | ||
7 | use common\models\UserInfo; | 7 | use common\models\UserInfo; |
8 | use common\models\Vacancy; | 8 | use common\models\Vacancy; |
9 | use frontend\models\SearchPerformerForm; | 9 | use frontend\models\SearchPerformerForm; |
10 | +use frontend\models\SearchVacancyForm; | ||
10 | use Yii; | 11 | use Yii; |
11 | use common\models\LoginForm; | 12 | use common\models\LoginForm; |
12 | use frontend\models\PasswordResetRequestForm; | 13 | use frontend\models\PasswordResetRequestForm; |
@@ -84,31 +85,30 @@ use common\models\Social; | @@ -84,31 +85,30 @@ use common\models\Social; | ||
84 | 85 | ||
85 | 86 | ||
86 | 87 | ||
87 | - public function actionPerformer() | ||
88 | - { | ||
89 | - | ||
90 | - | ||
91 | - $specializationArray = Specialization::specializationsList(); | ||
92 | - | 88 | + public function actionPerformer() |
89 | + { | ||
90 | + $specialization = Specialization::specializationsList(); | ||
93 | 91 | ||
92 | + $searchModel = new SearchPerformerForm(); | ||
94 | 93 | ||
94 | + return $this->render('performer',[ | ||
95 | + 'dataProvider' => $searchModel->search(Yii::$app->request->queryParams), | ||
96 | + 'specialization' => $specialization, | ||
97 | + 'model'=> $searchModel | ||
98 | + ]); | ||
99 | + } | ||
95 | 100 | ||
96 | - $searchModel = new SearchPerformerForm(); | 101 | + public function actionVacancy() |
102 | + { | ||
97 | 103 | ||
98 | 104 | ||
99 | - return $this->render('performer',[ | ||
100 | - 'dataProvider' => $searchModel->search(Yii::$app->request->queryParams), | ||
101 | - 'specialization' => $specializationArray, | ||
102 | - 'model'=> $searchModel | ||
103 | - ]); | ||
104 | - } | 105 | + $searchModel = new SearchVacancyForm(); |
105 | 106 | ||
106 | - public function actionVacancy() | ||
107 | - { | 107 | + $specialization = Specialization::specializationsList(); |
108 | 108 | ||
109 | - $query = Vacancy::find(); | 109 | + $query = $searchModel->search(Yii::$app->request->queryParams); |
110 | 110 | ||
111 | - $countQuery = clone $query; | 111 | + $countQuery = clone $query; |
112 | 112 | ||
113 | $pagination = new Pagination([ | 113 | $pagination = new Pagination([ |
114 | 'totalCount' => $countQuery->count(), | 114 | 'totalCount' => $countQuery->count(), |
@@ -116,9 +116,9 @@ use common\models\Social; | @@ -116,9 +116,9 @@ use common\models\Social; | ||
116 | ]); | 116 | ]); |
117 | 117 | ||
118 | $vacancy = $query->offset($pagination->offset) | 118 | $vacancy = $query->offset($pagination->offset) |
119 | - ->limit($pagination->limit); | 119 | + ->limit($pagination->limit); |
120 | 120 | ||
121 | - $provider = new ActiveDataProvider([ | 121 | + $dataProvider = new ActiveDataProvider([ |
122 | 'query' => $vacancy, | 122 | 'query' => $vacancy, |
123 | 'pagination' => false, | 123 | 'pagination' => false, |
124 | 'sort' => [ | 124 | 'sort' => [ |
@@ -129,10 +129,13 @@ use common\models\Social; | @@ -129,10 +129,13 @@ use common\models\Social; | ||
129 | ], | 129 | ], |
130 | ]); | 130 | ]); |
131 | 131 | ||
132 | - return $this->render('vacancy', [ | ||
133 | - 'provider' => $provider, | ||
134 | - 'pagination' => $pagination, | 132 | + return $this->render('vacancy',[ |
133 | + 'dataProvider' => $dataProvider, | ||
134 | + 'specialization' => $specialization, | ||
135 | + 'model'=> $searchModel, | ||
136 | + 'pagination'=> $pagination | ||
135 | ]); | 137 | ]); |
138 | + | ||
136 | } | 139 | } |
137 | 140 | ||
138 | } | 141 | } |
frontend/models/SearchPerformerForm.php
@@ -58,21 +58,6 @@ class SearchPerformerForm extends Model | @@ -58,21 +58,6 @@ class SearchPerformerForm extends Model | ||
58 | } | 58 | } |
59 | 59 | ||
60 | /** | 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 | 61 | * Creates data provider instance with search query applied |
77 | * | 62 | * |
78 | * @param array $params | 63 | * @param array $params |
@@ -92,10 +77,7 @@ class SearchPerformerForm extends Model | @@ -92,10 +77,7 @@ class SearchPerformerForm extends Model | ||
92 | 77 | ||
93 | 78 | ||
94 | $dataProvider = new ActiveDataProvider([ | 79 | $dataProvider = new ActiveDataProvider([ |
95 | - 'query' => $query, | ||
96 | - 'pagination' => [ | ||
97 | - 'pageSize' => 3, | ||
98 | - ], | 80 | + 'query' => $query |
99 | ]); | 81 | ]); |
100 | 82 | ||
101 | $dataProvider->setSort([ | 83 | $dataProvider->setSort([ |
1 | +<?php | ||
2 | + | ||
3 | +namespace frontend\models; | ||
4 | + | ||
5 | +use common\models\Portfolio; | ||
6 | +use common\models\User; | ||
7 | +use common\models\Vacancy; | ||
8 | +use Yii; | ||
9 | +use yii\base\Model; | ||
10 | +use yii\data\ActiveDataProvider; | ||
11 | +use yii\helpers\ArrayHelper; | ||
12 | + | ||
13 | +/** | ||
14 | + * ContactForm is the model behind the contact form. | ||
15 | + */ | ||
16 | +class SearchVacancyForm extends Model | ||
17 | +{ | ||
18 | + public $city; | ||
19 | + public $specialization; | ||
20 | + | ||
21 | + | ||
22 | + | ||
23 | + /** | ||
24 | + * @inheritdoc | ||
25 | + */ | ||
26 | + public function rules() | ||
27 | + { | ||
28 | + return [ | ||
29 | + [['specialization','city'], 'safe'], | ||
30 | + | ||
31 | + ]; | ||
32 | + } | ||
33 | + | ||
34 | + /** | ||
35 | + * @inheritdoc | ||
36 | + */ | ||
37 | + public function attributeLabels() | ||
38 | + { | ||
39 | + return [ | ||
40 | + 'city' => 'Город', | ||
41 | + 'specialization' => 'Специализация' | ||
42 | + ]; | ||
43 | + } | ||
44 | + | ||
45 | + /** | ||
46 | + * Creates data provider instance with search query applied | ||
47 | + * | ||
48 | + * @param array $params | ||
49 | + * | ||
50 | + * @return ActiveDataProvider | ||
51 | + */ | ||
52 | + public function search($params) | ||
53 | + { | ||
54 | + | ||
55 | + $this->load($params); | ||
56 | + | ||
57 | + $query = Vacancy::find() | ||
58 | + ->distinct(true) | ||
59 | + ->joinWith(['specializations']); | ||
60 | + | ||
61 | + | ||
62 | + | ||
63 | + | ||
64 | + | ||
65 | + | ||
66 | + if (!$this->validate()) { | ||
67 | + | ||
68 | + | ||
69 | + // uncomment the following line if you do not want to any records when validation fails | ||
70 | + // $query->where('0=1'); | ||
71 | + return $query; | ||
72 | + } | ||
73 | + | ||
74 | + $query->andFilterWhere([ | ||
75 | + 'vacancy.city' => $this->city, | ||
76 | + 'specialization.specialization_id' => $this->specialization, | ||
77 | + ]); | ||
78 | + | ||
79 | + | ||
80 | + | ||
81 | + | ||
82 | + | ||
83 | + return $query; | ||
84 | + } | ||
85 | +} | ||
86 | + |
frontend/views/company/vacancy-view.php
@@ -9,8 +9,9 @@ | @@ -9,8 +9,9 @@ | ||
9 | use common\models\Vacancy; | 9 | use common\models\Vacancy; |
10 | use yii\helpers\ArrayHelper; | 10 | use yii\helpers\ArrayHelper; |
11 | use yii\helpers\Html; | 11 | use yii\helpers\Html; |
12 | +use yii\helpers\Url; | ||
12 | 13 | ||
13 | - $this->params[ 'company' ] = $company; | 14 | +$this->params[ 'company' ] = $company; |
14 | $this->title = 'My Yii Application'; | 15 | $this->title = 'My Yii Application'; |
15 | ?> | 16 | ?> |
16 | <div class="performer-vacancy-list style"> | 17 | <div class="performer-vacancy-list style"> |
@@ -65,20 +66,27 @@ | @@ -65,20 +66,27 @@ | ||
65 | <div class="performance-vacancy-similar-title style">Похожие вакансии</div> | 66 | <div class="performance-vacancy-similar-title style">Похожие вакансии</div> |
66 | <div class="style"> | 67 | <div class="style"> |
67 | 68 | ||
69 | + <?php foreach($similar_vacancies as $similar_vacancy):?> | ||
68 | <div class="performance-vacancy-similar-blocks-wr style"> | 70 | <div class="performance-vacancy-similar-blocks-wr style"> |
69 | - <a href="#" class="performer-vacant-reclam-bl-title">Инженер-технолог строитель</a> | ||
70 | - <div class="performer-vacant-reclam-bl-title-two">Бровары, ищем в Киеве. 21 декабря 2015. 8000 грн.</div> | ||
71 | - </div> | ||
72 | 71 | ||
73 | - <div class="performance-vacancy-similar-blocks-wr style"> | ||
74 | - <a href="#" class="performer-vacant-reclam-bl-title">Разнорабочий (в Бровары)</a> | ||
75 | - <div class="performer-vacant-reclam-bl-title-two">Наш Дом. Киев.</div> | ||
76 | - </div> | 72 | + <?= Html::a($similar_vacancy->name, Url::toRoute([ |
73 | + 'company/vacancy-view', | ||
74 | + 'company_id' => $similar_vacancy->user_id, | ||
75 | + 'link' => $similar_vacancy->link, | ||
76 | + ]), [ 'class' => 'performer-vacant-reclam-bl-title' ]) ?> | ||
77 | 77 | ||
78 | - <div class="performance-vacancy-similar-blocks-wr style"> | ||
79 | - <a href="#" class="performer-vacant-reclam-bl-title">Замерщик по мебели (в Бровары)</a> | ||
80 | - <div class="performer-vacant-reclam-bl-title-two">Наш Дом. Киев. 5000 грн.</div> | 78 | + <div class="performer-vacant-reclam-bl-title-two"><?= $similar_vacancy->city ?>. <?= \Yii::$app->formatter->asDatetime($similar_vacancy->date_add, 'Y-MM-dd') ?>. |
79 | + <?php | ||
80 | + if(!empty( $similar_vacancy->salary )) { | ||
81 | + ?> | ||
82 | + <?= $similar_vacancy->salary ?> | ||
83 | + <?= $similar_vacancy->salaryCurrency->label ?> | ||
84 | + <?php | ||
85 | + } | ||
86 | + ?></div> | ||
81 | </div> | 87 | </div> |
88 | + <?php endforeach;?> | ||
89 | + | ||
82 | 90 | ||
83 | </div> | 91 | </div> |
84 | </div> | 92 | </div> |
85 | \ No newline at end of file | 93 | \ No newline at end of file |
frontend/views/search/vacancy.php
1 | <?php | 1 | <?php |
2 | 2 | ||
3 | +use kartik\select2\Select2; | ||
3 | use \yii\helpers\Html; | 4 | use \yii\helpers\Html; |
5 | +use yii\web\JsExpression; | ||
6 | +use yii\widgets\ActiveForm; | ||
4 | use yii\widgets\LinkPager; | 7 | use yii\widgets\LinkPager; |
5 | use yii\widgets\ListView; | 8 | use yii\widgets\ListView; |
6 | 9 | ||
@@ -15,36 +18,41 @@ $this->title = 'My Yii Application'; | @@ -15,36 +18,41 @@ $this->title = 'My Yii Application'; | ||
15 | <div class="box-all"> | 18 | <div class="box-all"> |
16 | <div class="performer-vacancy-sidebar-left-wr vacancy-general-sidebar-wr"> | 19 | <div class="performer-vacancy-sidebar-left-wr vacancy-general-sidebar-wr"> |
17 | <div class="left-search-work"> | 20 | <div class="left-search-work"> |
18 | - <form action="" class="search-work-form"> | ||
19 | - <div class="blocks-check-list-wrapp"> | ||
20 | - <div class="blocks-check-title"><label for="theme-1">Город</label></div> | ||
21 | - <select id="theme-1"> | ||
22 | - <option selected value="">Любой</option> | ||
23 | - <option value="">Киев</option> | ||
24 | - <option value="">Житомир</option> | ||
25 | - <option value="">Львов</option> | ||
26 | - <option value="">Киев</option> | ||
27 | - <option value="">Житомир</option> | ||
28 | - <option value="">Львов</option> | ||
29 | - </select> | ||
30 | - </div> | ||
31 | - <div class="blocks-check-list-wrapp"> | ||
32 | - <div class="blocks-check-title"><label for="theme-2">Специализация</label></div> | ||
33 | - <select id="theme-2"> | ||
34 | - <option selected 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 | - </select> | ||
42 | - </div> | 21 | + <?php |
22 | + $form = ActiveForm::begin(['options'=>['class'=>'search-work-form'],'action'=>[''], 'method'=>'get']); | ||
23 | + ?> | ||
24 | + | ||
25 | + <?= | ||
26 | + $form->field($model, 'city') | ||
27 | + ->widget(Select2::classname(), [ | ||
28 | + 'options' => [ 'placeholder' => 'Выбор города ...' ], | ||
29 | + 'pluginOptions' => [ | ||
30 | + 'allowClear' => true, | ||
31 | + 'minimumInputLength' => 3, | ||
32 | + 'ajax' => [ | ||
33 | + 'url' => \yii\helpers\Url::to([ 'site/city' ]), | ||
34 | + 'dataType' => 'json', | ||
35 | + 'data' => new JsExpression('function(params) { return {q:params.term}; }'), | ||
36 | + ], | ||
37 | + 'escapeMarkup' => new JsExpression('function (markup) { return markup; }'), | ||
38 | + 'templateResult' => new JsExpression('function(city) { return city.text; }'), | ||
39 | + 'templateSelection' => new JsExpression('function (city) { return city.text; }'), | ||
40 | + ], | ||
41 | + ]); | ||
42 | + ?> | ||
43 | + | ||
44 | + <?= | ||
45 | + $form->field($model, 'specialization') | ||
46 | + ->dropDownList($specialization, ['prompt' => 'Любая']); | ||
47 | + ?> | ||
48 | + | ||
43 | 49 | ||
44 | <div class="blocks-check-list-submit"> | 50 | <div class="blocks-check-list-submit"> |
45 | - <input type="submit" value="Найти"/> | 51 | + <?= Html::submitInput('Найти') ?> |
46 | </div> | 52 | </div> |
47 | - </form> | 53 | + <?php |
54 | + $form->end(); | ||
55 | + ?> | ||
48 | </div> | 56 | </div> |
49 | </div> | 57 | </div> |
50 | <div class="section-box performer-vacancy-vacant-wr"> | 58 | <div class="section-box performer-vacancy-vacant-wr"> |
@@ -53,7 +61,7 @@ $this->title = 'My Yii Application'; | @@ -53,7 +61,7 @@ $this->title = 'My Yii Application'; | ||
53 | 61 | ||
54 | <?= | 62 | <?= |
55 | ListView::widget([ | 63 | ListView::widget([ |
56 | - 'dataProvider' => $provider, | 64 | + 'dataProvider' => $dataProvider, |
57 | 'itemView' => '_vacancy_list_view', | 65 | 'itemView' => '_vacancy_list_view', |
58 | 'summary' => false, | 66 | 'summary' => false, |
59 | ]); | 67 | ]); |