Commit 9afd152fa7be8ca629a1a8d7e0428eaceeb2ba20
1 parent
6a07bb2b
- support from main
- bug fix in mobile
Showing
8 changed files
with
285 additions
and
78 deletions
Show diff stats
frontend/config/main.php
... | ... | @@ -253,6 +253,18 @@ |
253 | 253 | ], |
254 | 254 | ], |
255 | 255 | 'components' => [ |
256 | + 'assetManager' => [ | |
257 | + 'bundles' => [ | |
258 | + // new version gentenella | |
259 | +// 'kartik\select2\Select2Asset' => [ | |
260 | +// 'css' => [], | |
261 | +// ], | |
262 | +// 'kartik\select2\ThemeKrajeeAsset' => [ | |
263 | +// 'css' => [] | |
264 | +// ] | |
265 | + ], | |
266 | + 'appendTimestamp' => true, | |
267 | + ], | |
256 | 268 | 'user' => [ |
257 | 269 | 'identityClass' => 'common\models\Author', |
258 | 270 | 'enableAutoLogin' => true, | ... | ... |
frontend/controllers/BookController.php
... | ... | @@ -12,6 +12,7 @@ |
12 | 12 | use common\models\Support; |
13 | 13 | use yii\data\ActiveDataProvider; |
14 | 14 | use yii\web\Controller; |
15 | + use yii\web\Response; | |
15 | 16 | use yii\web\UploadedFile; |
16 | 17 | |
17 | 18 | class BookController extends Controller |
... | ... | @@ -130,4 +131,41 @@ |
130 | 131 | public function actionSuccess(){ |
131 | 132 | return $this->render('success'); |
132 | 133 | } |
134 | + | |
135 | + public function actionList($q = null){ | |
136 | + \Yii::$app->response->format = Response::FORMAT_JSON; | |
137 | + $out = [ | |
138 | + 'results' => [ | |
139 | + [ | |
140 | + 'id' => '', | |
141 | + 'text' => '', | |
142 | + ], | |
143 | + ], | |
144 | + ]; | |
145 | + if (!is_null($q)) { | |
146 | + $books = Book::find() | |
147 | + ->select( | |
148 | + [ | |
149 | + 'id' => 'book.id', | |
150 | + 'text' => 'book.title', | |
151 | + ] | |
152 | + ) | |
153 | + ->andFilterWhere( | |
154 | + [ | |
155 | + 'ilike', | |
156 | + 'title', | |
157 | + $q, | |
158 | + ] | |
159 | + ) | |
160 | + ->limit(20) | |
161 | + ->asArray() | |
162 | + ->all(); | |
163 | + | |
164 | + if (!empty($books)) { | |
165 | + $out[ 'results' ] = $books; | |
166 | + } | |
167 | + } | |
168 | + | |
169 | + return $out; | |
170 | + } | |
133 | 171 | } |
134 | 172 | \ No newline at end of file | ... | ... |
frontend/controllers/SupportController.php
... | ... | @@ -10,6 +10,9 @@ |
10 | 10 | |
11 | 11 | use common\models\Book; |
12 | 12 | use common\models\Support; |
13 | + use frontend\helpers\Url; | |
14 | + use frontend\models\SearchModel; | |
15 | + use yii\data\ActiveDataProvider; | |
13 | 16 | use yii\web\Controller; |
14 | 17 | |
15 | 18 | class SupportController extends Controller |
... | ... | @@ -29,9 +32,40 @@ |
29 | 32 | 'book' => $book |
30 | 33 | ]); |
31 | 34 | } |
32 | - | |
33 | - public function actionSearch() | |
34 | - { | |
35 | + public function actionSearch(){ | |
35 | 36 | return $this->render('search'); |
36 | 37 | } |
38 | + | |
39 | + public function actionSearchResult() | |
40 | + { | |
41 | + $model = new SearchModel(); | |
42 | + if ($model->load(\Yii::$app->request->post())){ | |
43 | + $booksIds = $model->search(); | |
44 | + if (count($booksIds) == 1){ | |
45 | + return $this->redirect(Url::to(['support/index', 'book_id' => $booksIds[0]['id']])); | |
46 | + }else{ | |
47 | + $dataProvider = new ActiveDataProvider( | |
48 | + [ | |
49 | + 'query' => Book::find() | |
50 | + ->with( | |
51 | + [ | |
52 | + 'author', | |
53 | + 'alias', | |
54 | + ] | |
55 | + ) | |
56 | + ->where([ 'status' => Book::STATUS_ACTIVE ])->andWhere(['book.id' => $booksIds]), | |
57 | + 'pagination' => [ | |
58 | + 'pageSize' => 10, | |
59 | + ], | |
60 | + ] | |
61 | + ); | |
62 | + return $this->render( | |
63 | + 'search-result', | |
64 | + [ | |
65 | + 'dataProvider' => $dataProvider, | |
66 | + ] | |
67 | + ); | |
68 | + } | |
69 | + } | |
70 | + } | |
37 | 71 | } |
38 | 72 | \ No newline at end of file | ... | ... |
1 | +<?php | |
2 | + /** | |
3 | + * Created by PhpStorm. | |
4 | + * User: stes | |
5 | + * Date: 22.06.18 | |
6 | + * Time: 12:40 | |
7 | + */ | |
8 | + | |
9 | + namespace frontend\models; | |
10 | + | |
11 | + use yii\base\Model; | |
12 | + use yii\db\Expression; | |
13 | + use yii\db\Query; | |
14 | + use yii\web\JsExpression; | |
15 | + | |
16 | + class SearchModel extends Model | |
17 | + { | |
18 | + public $text; | |
19 | + | |
20 | + public $author; | |
21 | + | |
22 | + public $bookTitle; | |
23 | + | |
24 | + public function rules() | |
25 | + { | |
26 | + return [ | |
27 | + [ | |
28 | + 'text', | |
29 | + 'required', | |
30 | + 'whenClient' => new JsExpression('function (attribute, value) { | |
31 | + return $("#next").data("id") == ""; | |
32 | + }'), | |
33 | + ], | |
34 | + [ | |
35 | + ['author', 'bookTitle'], | |
36 | + 'boolean' | |
37 | + ], | |
38 | + [ | |
39 | + 'text', 'string' | |
40 | + ] | |
41 | + ]; | |
42 | + } | |
43 | + | |
44 | + public function search(){ | |
45 | + $query = (new Query())->select('book.id')->from('book')->join('INNER JOIN', 'author', 'book.author_id = author.id'); | |
46 | + if ($this->author){ | |
47 | + $query->where(['ilike', 'book.title', $this->text]); | |
48 | + } | |
49 | + if ($this->bookTitle){ | |
50 | + $query->orWhere(['ilike', 'secondname', $this->text])->orWhere(['ilike', new Expression('concat(name,\' \',secondname)'), $this->text]); | |
51 | + } | |
52 | + return $query->column(); | |
53 | + } | |
54 | + } | |
0 | 55 | \ No newline at end of file | ... | ... |
frontend/views/layouts/main.php
... | ... | @@ -15,18 +15,11 @@ |
15 | 15 | use artbox\core\models\PageCategory; |
16 | 16 | use artbox\core\models\User; |
17 | 17 | use artbox\core\seo\widgets\SeoBreadcrumbs; |
18 | - use common\models\page\Category; | |
19 | 18 | use common\models\Settings; |
20 | 19 | use frontend\assets\AppAsset; |
21 | - use artbox\core\components\imagemanager\models\ImageManager; | |
22 | - use frontend\widgets\ArtboxModalWidget; | |
23 | - use frontend\widgets\LanguageWidget; | |
24 | - use yii\bootstrap\Nav; | |
25 | 20 | use yii\bootstrap\Html; |
26 | - use yii\db\ActiveQuery; | |
27 | 21 | use artbox\core\helpers\Url; |
28 | 22 | use yii\web\View; |
29 | - use yii\widgets\Breadcrumbs; | |
30 | 23 | |
31 | 24 | |
32 | 25 | AppAsset::register($this); |
... | ... | @@ -102,7 +95,7 @@ JS; |
102 | 95 | |
103 | 96 | <div class="col-xs-12 hidden-xs hidden-sm col-sm-4 col-md-5 col-lg-4 btns_header"> |
104 | 97 | <a href="<?=\Yii::$app->user->isGuest ? Url::to(['site/register']) : Url::to(['book/add'])?>" class="btn_ add-book"><span>Додати книгу</span></a> |
105 | - <a href="#" class="btn_ to-support">Підтримати</a> | |
98 | + <a href="<?=Url::to(['support/search'])?>" class="btn_ to-support">Підтримати</a> | |
106 | 99 | </div> |
107 | 100 | <?php if (\Yii::$app->user->isGuest){?> |
108 | 101 | <div class="col-xs-12 hidden-xs hidden-sm col-sm-2 col-md-2"> |
... | ... | @@ -161,7 +154,7 @@ JS; |
161 | 154 | </ul> |
162 | 155 | </nav> |
163 | 156 | <div class="footer-btn"> |
164 | - <a href="#" class="btn_">Підтримати</a> | |
157 | + <a href="<?=Url::to(['support/search'])?>" class="btn_">Підтримати</a> | |
165 | 158 | </div> |
166 | 159 | </div> |
167 | 160 | </div> |
... | ... | @@ -175,7 +168,7 @@ JS; |
175 | 168 | <div class="style mob-list"> |
176 | 169 | <ul> |
177 | 170 | <li><a href="<?=Url::to(['site/about'])?>">Про проект</a></li> |
178 | - <li><a href="<?=Url::to(['books/all'])?>">Книги</a></li> | |
171 | + <li><a href="<?=Url::to(['book/index'])?>">Книги</a></li> | |
179 | 172 | <li><a href="#">Партнери</a></li> |
180 | 173 | <li><a href="<?=Url::to(['site/contacts'])?>">Контакти</a></li> |
181 | 174 | <li><a href="<?=Url::to(['blog/index'])?>">Блог</a></li> |
... | ... | @@ -183,8 +176,8 @@ JS; |
183 | 176 | </ul> |
184 | 177 | </div> |
185 | 178 | <div class="style btns-menu-mob"> |
186 | - <div class="style"><a href="#" class="btn_ add-book"><span>Додати книгу</span></a></div> | |
187 | - <div class="style"><a href="#" class="btn_ to-support">Підтримати</a></div> | |
179 | + <div class="style"><a href="<?=Url::to(['book/add'])?>" class="btn_ add-book"><span>Додати книгу</span></a></div> | |
180 | + <div class="style"><a href="<?=Url::to(['support/search'])?>" class="btn_ to-support">Підтримати</a></div> | |
188 | 181 | </div> |
189 | 182 | </div> |
190 | 183 | ... | ... |
1 | +<?php | |
2 | + /** | |
3 | + * @var \yii\data\ActiveDataProvider $dataProvider | |
4 | + * @var \yii\web\View $this; | |
5 | + */ | |
6 | + use yii\widgets\ListView; | |
7 | + $this->params['breadcrumbs'][] = 'Результат пошуку'; | |
8 | + | |
9 | +?> | |
10 | +<section class="section-books-catalog"> | |
11 | + <div class="container"> | |
12 | + <div class="row"> | |
13 | + <div class="col-xs-12"> | |
14 | + <div class="title-blocks">Книги</div> | |
15 | + </div> | |
16 | + </div> | |
17 | + <?= ListView::widget( | |
18 | + [ | |
19 | + 'dataProvider' => $dataProvider, | |
20 | + 'itemView' => '@frontend/views/book/_book', | |
21 | + 'options' => [ | |
22 | + 'class' => 'row', | |
23 | + | |
24 | + ], | |
25 | + 'itemOptions' => [ | |
26 | + 'class' => 'col-xs-12 col-sm-12 col-md-6 books-wrapp', | |
27 | + ], | |
28 | + 'layout' => '{items}', | |
29 | + ] | |
30 | + ); ?> | |
31 | + | |
32 | + <div class="col-xs-12 col-sm-12"> | |
33 | + <?php echo \frontend\widgets\FrontendPager::widget( | |
34 | + [ | |
35 | + 'pagination' => $dataProvider->pagination, | |
36 | + 'maxButtonCount' => 5, | |
37 | + ] | |
38 | + ); ?> | |
39 | + </div> | |
40 | + </div> | |
41 | +</section> | ... | ... |
frontend/views/support/search.php
1 | -<section class="section-breadcrumb"> | |
2 | - <div class="container"> | |
3 | - <div class="row"> | |
4 | - <div class="col-xs-12 col-sm-12 breadcrumb-wrapp"> | |
5 | - <ul class="breadcrumb" itemscope="" itemtype=" http://schema.org/BreadcrumbList"><li itemprop="itemListElement" itemscope="" itemtype="http://schema.org/ListItem"><a href="/" itemprop="item"><span itemprop="name">Головна</span></a><meta itemprop="position" content="1"></li> | |
6 | - <li class="active" itemprop="itemListElement" itemscope="" itemtype="http://schema.org/ListItem"><span itemprop="name">Підтримати</span><link itemprop="item" content="#"><meta itemprop="position" content="2"></li></ul> | |
7 | - </div> | |
8 | - </div> | |
9 | - </div> | |
10 | -</section> | |
11 | - | |
12 | - | |
1 | +<?php | |
2 | + use frontend\models\SearchModel; | |
3 | + use kartik\select2\Select2; | |
4 | + use yii\helpers\Url; | |
5 | + use yii\web\JsExpression; | |
6 | + use yii\widgets\ActiveForm; | |
7 | + | |
8 | + \artbox\core\admin\assets\Select2::register($this); | |
9 | + $model = new SearchModel([ | |
10 | + 'author' => true, | |
11 | + 'bookTitle' => true | |
12 | + ]); | |
13 | + $this->params['breadcrumbs'][] = 'Підтримати' | |
14 | +?> | |
13 | 15 | <section class="section-books-support"> |
14 | 16 | <div class="container"> |
15 | 17 | <div class="row"> |
... | ... | @@ -21,34 +23,91 @@ |
21 | 23 | <div class="hidden-xs col-sm-4"></div> |
22 | 24 | <div class="col-xs-12 col-sm-4 support-form-col"> |
23 | 25 | <div class="style support-form-wr"> |
24 | - <form action="#"> | |
25 | - <div class="style title-support-form">Нова українська артилерія</div> | |
26 | - <div class="style autor-support-form"> Автор: Генадій Харченко</div> | |
26 | + <?php $form = ActiveForm::begin(['id' => 'search-form', 'action' => '/support/search-result'])?> | |
27 | 27 | <div class="input-wr select-support"> |
28 | 28 | <label for="q1">Вибрати</label> |
29 | - <select name="" id=""> | |
30 | - <option value="" selected disabled></option> | |
31 | - <option value="">селект1</option> | |
32 | - <option value="">селект2</option> | |
33 | - <option value="">селект3</option> | |
34 | - <option value="">селект4</option> | |
35 | - <option value="">селект5</option> | |
36 | - </select> | |
29 | + <?php echo Select2::widget( | |
30 | + [ | |
31 | + 'name' => 'bookId', | |
32 | + 'options' => [ | |
33 | + 'placeholder' => \Yii::t('app', 'Почніть вводити назву книги'), | |
34 | + 'multiple' => false, | |
35 | + | |
36 | + ], | |
37 | + 'toggleAllSettings' => [ | |
38 | + 'selectLabel' => false, | |
39 | + ], | |
40 | + 'pluginOptions' => [ | |
41 | + 'allowClear' => true, | |
42 | + 'minimumInputLength' => 3, | |
43 | + 'language' => [ | |
44 | + 'errorLoading' => new JsExpression( | |
45 | + "function () { return 'Зачекайте...'; }" | |
46 | + ), | |
47 | + ], | |
48 | + 'ajax' => [ | |
49 | + 'url' => Url::to([ '/book/list' ]), | |
50 | + 'dataType' => 'json', | |
51 | + 'data' => new JsExpression( | |
52 | + 'function(params) { | |
53 | + return { | |
54 | + q:params.term | |
55 | + }; | |
56 | + }' | |
57 | + ), | |
58 | + ], | |
59 | + 'escapeMarkup' => new JsExpression( | |
60 | + 'function (markup) { | |
61 | + return markup; | |
62 | + }' | |
63 | + ), | |
64 | + 'templateResult' => new JsExpression( | |
65 | + 'function (book) { | |
66 | + return book.text; | |
67 | + }' | |
68 | + ), | |
69 | + 'templateSelection' => new JsExpression( | |
70 | + 'function (book) { | |
71 | + console.log(book.id); | |
72 | + $("#next").attr("data-id", book.id) | |
73 | + return book.text; | |
74 | + }' | |
75 | + ), | |
76 | + ], | |
77 | + ] | |
78 | + ); ?> | |
37 | 79 | </div> |
38 | 80 | <div class="input-wr search-support"> |
39 | - <label for="q2">Пошук</label> | |
40 | - <input id="q2" type="text"> | |
81 | + <?=$form->field($model, 'text')->textInput()->label('Пошук')?> | |
41 | 82 | </div> |
42 | 83 | |
43 | 84 | |
44 | 85 | <div class="input-wr sidebar_checks support-shecks" style="text-align: center;"> |
45 | 86 | <div style="display: inline-block"> |
46 | - <input type="checkbox" id="q6" name="" value="" checked=""> | |
47 | - <label class="control-label" for="q6">Автор</label> | |
87 | + <?= $form->field( | |
88 | + $model, | |
89 | + 'author', | |
90 | + [ | |
91 | + 'template' => '{input}{label}', | |
92 | + ] | |
93 | + ) | |
94 | + ->checkbox([], false) | |
95 | + ->label(\Yii::t('app', \Yii::t('app', 'Автор'))); ?> | |
96 | +<!-- <input type="checkbox" id="q6" name="" value="" checked="">--> | |
97 | +<!-- <label class="control-label" for="q6">Автор</label>--> | |
48 | 98 | </div> |
49 | 99 | <div style="display: inline-block; padding-left: 24px;"> |
50 | - <input type="checkbox" id="q7" name="" value="" checked=""> | |
51 | - <label class="control-label" for="q7">Назва</label> | |
100 | + <?= $form->field( | |
101 | + $model, | |
102 | + 'bookTitle', | |
103 | + [ | |
104 | + 'template' => '{input}{label}', | |
105 | + ] | |
106 | + ) | |
107 | + ->checkbox([], false) | |
108 | + ->label(\Yii::t('app', \Yii::t('app', 'Назва'))); ?> | |
109 | +<!-- <input type="checkbox" id="q7" name="" value="" checked="">--> | |
110 | +<!-- <label class="control-label" for="q7">Назва</label>--> | |
52 | 111 | </div> |
53 | 112 | </div> |
54 | 113 | |
... | ... | @@ -57,13 +116,13 @@ |
57 | 116 | </div> |
58 | 117 | |
59 | 118 | <div class="support-link"> |
60 | - <a href="#"><span>вибрати з каталогу</span></a> | |
119 | + <a href="<?=Url::to(['/book/index'])?>"><span>вибрати з каталогу</span></a> | |
61 | 120 | </div> |
62 | 121 | |
63 | 122 | <div class="button-wr"> |
64 | - <button type="submit">Продовжити</button> | |
123 | + <button id="next" type="submit" data-id="">Продовжити</button> | |
65 | 124 | </div> |
66 | - </form> | |
125 | + <?php ActiveForm::end()?> | |
67 | 126 | </div> |
68 | 127 | </div> |
69 | 128 | </div> | ... | ... |
frontend/web/js/script.js
... | ... | @@ -148,36 +148,6 @@ $(document).ready(function() { |
148 | 148 | } |
149 | 149 | } |
150 | 150 | |
151 | - | |
152 | - | |
153 | - | |
154 | - | |
155 | - | |
156 | - | |
157 | - | |
158 | - | |
159 | - | |
160 | - | |
161 | - | |
162 | - | |
163 | - | |
164 | - | |
165 | - | |
166 | - | |
167 | - | |
168 | - | |
169 | - | |
170 | - | |
171 | - | |
172 | - | |
173 | - | |
174 | - | |
175 | - | |
176 | - | |
177 | - | |
178 | - | |
179 | - | |
180 | - | |
181 | 151 | $(window).resize(function () { |
182 | 152 | // heightSliderCol(); |
183 | 153 | footerBottom(); |
... | ... | @@ -264,7 +234,13 @@ $(document).ready(function() { |
264 | 234 | // },400) |
265 | 235 | // } |
266 | 236 | |
267 | - | |
237 | + $(document).on('beforeSubmit', '#search-form', function(e) { | |
238 | + if ($("#next").data('id') != ''){ | |
239 | + console.log('ololo'); | |
240 | + window.location.replace('/support/index?book_id='+$("#next").data('id')); | |
241 | + return false; | |
242 | + } | |
243 | + }); | |
268 | 244 | |
269 | 245 | }); |
270 | 246 | function success(message) { | ... | ... |