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) { | ... | ... |