Commit 998611ceb89c5c8ae1c994f424d8b848fe8bd750
1 parent
5860e30d
add Vitaliy's widgets
Showing
6 changed files
with
114 additions
and
51 deletions
Show diff stats
| 1 | +<?php | |
| 2 | + | |
| 3 | +namespace common\models; | |
| 4 | + | |
| 5 | +use Yii; | |
| 6 | + | |
| 7 | +/** | |
| 8 | + * This is the model class for table "cities". | |
| 9 | + * | |
| 10 | + * @property integer $id | |
| 11 | + * @property string $name | |
| 12 | + * @property integer $is_active | |
| 13 | + * @property integer $parent | |
| 14 | + */ | |
| 15 | +class Cities extends \yii\db\ActiveRecord | |
| 16 | +{ | |
| 17 | + /** | |
| 18 | + * @inheritdoc | |
| 19 | + */ | |
| 20 | + public static function tableName() | |
| 21 | + { | |
| 22 | + return 'cities'; | |
| 23 | + } | |
| 24 | + | |
| 25 | + /** | |
| 26 | + * @inheritdoc | |
| 27 | + */ | |
| 28 | + public function rules() | |
| 29 | + { | |
| 30 | + return [ | |
| 31 | + [['is_active', 'parent'], 'integer'], | |
| 32 | + [['name'], 'string', 'max' => 255], | |
| 33 | + ]; | |
| 34 | + } | |
| 35 | + | |
| 36 | + /** | |
| 37 | + * @inheritdoc | |
| 38 | + */ | |
| 39 | + public function attributeLabels() | |
| 40 | + { | |
| 41 | + return [ | |
| 42 | + 'id' => 'ID', | |
| 43 | + 'name' => 'Name', | |
| 44 | + 'is_active' => 'Is Active', | |
| 45 | + 'parent' => 'Parent', | |
| 46 | + ]; | |
| 47 | + } | |
| 48 | +} | ... | ... |
frontend/assets/AppAsset.php
frontend/config/main.php
frontend/controllers/SiteController.php
| 1 | 1 | <?php |
| 2 | 2 | namespace frontend\controllers; |
| 3 | 3 | |
| 4 | +use common\models\Cities; | |
| 4 | 5 | use common\models\Specialization; |
| 5 | 6 | use common\models\UserInfo; |
| 6 | 7 | use Yii; |
| ... | ... | @@ -49,21 +50,23 @@ class SiteController extends Controller |
| 49 | 50 | |
| 50 | 51 | |
| 51 | 52 | |
| 52 | - public function actionCity($query){ | |
| 53 | - \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; | |
| 54 | - $out = ['results' => ['id' => '', 'text' => '']]; | |
| 55 | - if (!is_null($query)) { | |
| 56 | - $query = new Query(); | |
| 57 | - $query->select('id, name AS text') | |
| 58 | - ->from('city') | |
| 59 | - ->where(['like', 'name', $query]) | |
| 60 | - ->limit(20); | |
| 61 | - $command = $query->createCommand(); | |
| 62 | - $data = $command->queryAll(); | |
| 63 | - $out['results'] = array_values($data); | |
| 64 | - } | |
| 65 | - | |
| 66 | - return $out; | |
| 53 | + public function actionCity($q = null, $id = null) { | |
| 54 | + \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; | |
| 55 | + $out = ['results' => ['id' => '', 'text' => '']]; | |
| 56 | + if (!is_null($q)) { | |
| 57 | + $query = new Query; | |
| 58 | + $query->select('id, name AS text') | |
| 59 | + ->from('cities') | |
| 60 | + ->where(['like', 'name', $q]) | |
| 61 | + ->limit(20); | |
| 62 | + $command = $query->createCommand(); | |
| 63 | + $data = $command->queryAll(); | |
| 64 | + $out['results'] = array_values($data); | |
| 65 | + } | |
| 66 | + elseif ($id > 0) { | |
| 67 | + $out['results'] = ['id' => $id, 'text' => Cities::find($id)->name]; | |
| 68 | + } | |
| 69 | + return $out; | |
| 67 | 70 | } |
| 68 | 71 | |
| 69 | 72 | ... | ... |
frontend/models/SignupForm.php
| ... | ... | @@ -17,6 +17,7 @@ class SignupForm extends Model |
| 17 | 17 | public $lastname; |
| 18 | 18 | public $verifyCode; |
| 19 | 19 | public $location; |
| 20 | + public $type; | |
| 20 | 21 | |
| 21 | 22 | /** |
| 22 | 23 | * @inheritdoc |
| ... | ... | @@ -39,6 +40,8 @@ class SignupForm extends Model |
| 39 | 40 | |
| 40 | 41 | ['verifyCode', 'captcha'], |
| 41 | 42 | |
| 43 | + ['type', 'integer'], | |
| 44 | + | |
| 42 | 45 | ['password', 'required'], |
| 43 | 46 | ['password', 'string', 'min' => 6], |
| 44 | 47 | ]; | ... | ... |
frontend/views/site/registration.php
| ... | ... | @@ -5,7 +5,9 @@ |
| 5 | 5 | */ |
| 6 | 6 | use yii\captcha\Captcha; |
| 7 | 7 | use yii\widgets\ActiveForm; |
| 8 | - $this->registerJsFile('/js/selectize.js'); | |
| 8 | + use kartik\select2\Select2; | |
| 9 | + use yii\web\JsExpression; | |
| 10 | + | |
| 9 | 11 | ?> |
| 10 | 12 | <div class="section-box content"> |
| 11 | 13 | <div class="section-box registration"> |
| ... | ... | @@ -48,18 +50,26 @@ |
| 48 | 50 | <div class="who-you-are-title style">Кто Вы</div> |
| 49 | 51 | <div class="who-you-are-form-wr style"> |
| 50 | 52 | <div class="who-you-are-form"> |
| 51 | - <div class="check-radio-wr"> | |
| 52 | 53 | |
| 53 | - <div class="custom-form-buttons"> | |
| 54 | - <input class="custom-radio" id="custom-radio-1" name="group-1" checked="checked" type="radio"> | |
| 55 | - <label for="custom-radio-1"><span></span>Частное лицо copy</label> | |
| 56 | - </div> | |
| 57 | 54 | |
| 58 | - <div class="custom-form-buttons"> | |
| 59 | - <input class="custom-radio" id="custom-radio-2" name="group-1" type="radio"> | |
| 60 | - <label for="custom-radio-2"><span></span>Компания</label> | |
| 61 | - </div> | |
| 62 | - </div> | |
| 55 | + | |
| 56 | + <?= $form->field ($model, 'type',['options'=> ['class'=>'check-radio-wr']]) | |
| 57 | + ->label (false) | |
| 58 | + ->radioList ( | |
| 59 | + [1 => 'Частное лицо', 2 => 'Компания'], | |
| 60 | + [ | |
| 61 | + 'item' => function($index, $label, $name, $checked, $value) { | |
| 62 | + $return = '<div class="custom-form-buttons">'; | |
| 63 | + $return .= '<input class="custom-radio" id="custom-radio-'.$value.'" type="radio" name="' . $name . '" value="' . $value . '" >'; | |
| 64 | + $return .= '<label for="custom-radio-'.$value.'" ><span></span>' . $label .'</label>'; | |
| 65 | + $return .= '</div>'; | |
| 66 | + return $return; | |
| 67 | + } | |
| 68 | + ] | |
| 69 | + ); | |
| 70 | + ?> | |
| 71 | + | |
| 72 | + | |
| 63 | 73 | <div class="check-radio-wr"> |
| 64 | 74 | <div class="custom-form-buttons"> |
| 65 | 75 | <input class="custom-check" id="custom-check-1" type="checkbox" checked> |
| ... | ... | @@ -75,36 +85,36 @@ |
| 75 | 85 | |
| 76 | 86 | <div class="input-blocks-wrapper"> |
| 77 | 87 | <div class="input-blocks"> |
| 78 | - <label for="input-txt-4">Имя</label> | |
| 79 | - <input class="custom-input-2" id="input-txt-4" type="text"> | |
| 88 | + <?= $form->field($model, 'firstname')->textInput(['class'=>'custom-input-2'])?> | |
| 80 | 89 | </div> |
| 81 | 90 | </div> |
| 82 | 91 | <div class="input-blocks-wrapper"> |
| 83 | 92 | <div class="input-blocks"> |
| 84 | - <label for="input-txt-5">Фамилия</label> | |
| 85 | - <input class="custom-input-2" id="input-txt-5" type="text"> | |
| 86 | - </div> | |
| 87 | - </div> | |
| 88 | - <div class="input-blocks-wrapper city" > | |
| 89 | - | |
| 90 | - <div class="control-group"> | |
| 91 | - <div id="btnClear" style=""></div> | |
| 92 | - | |
| 93 | - <label for="select-beast-w">Город</label> | |
| 94 | - <select id="select-beast-w" placeholder=""> | |
| 95 | - <option value="">Выберите город</option> | |
| 96 | - <option value="4">Киев</option> | |
| 97 | - <option value="1">Одесса</option> | |
| 98 | - <option value="3">Харьков</option> | |
| 99 | - <option value="2">Днепр</option> | |
| 100 | - <option value="6">Чернигов</option> | |
| 101 | - <option value="8">Черкасы</option> | |
| 102 | - <option value="9">Черкасы</option> | |
| 103 | - <option value="5">Черкасы</option> | |
| 104 | - </select> | |
| 93 | + <?= $form->field($model, 'lastname')->textInput(['class'=>'custom-input-2'])?> | |
| 105 | 94 | </div> |
| 106 | 95 | </div> |
| 107 | 96 | |
| 97 | + <?= | |
| 98 | + $form->field($model, 'location')->widget(Select2::classname(), [ | |
| 99 | + 'options' => ['placeholder' => 'Search for a city ...'], | |
| 100 | + 'pluginOptions' => [ | |
| 101 | + 'allowClear' => true, | |
| 102 | + 'minimumInputLength' => 3, | |
| 103 | + 'ajax' => [ | |
| 104 | + 'url' => \yii\helpers\Url::to(['site/city']), | |
| 105 | + 'dataType' => 'json', | |
| 106 | + 'data' => new JsExpression('function(params) { return {q:params.term}; }') | |
| 107 | + ], | |
| 108 | + 'escapeMarkup' => new JsExpression('function (markup) { return markup; }'), | |
| 109 | + 'templateResult' => new JsExpression('function(city) { return city.text; }'), | |
| 110 | + 'templateSelection' => new JsExpression('function (city) { return city.text; }'), | |
| 111 | + ], | |
| 112 | + ]); | |
| 113 | + ?> | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 108 | 118 | <div class="input-blocks-wrapper city-two"> |
| 109 | 119 | <div class="input-blocks"> |
| 110 | 120 | <label for="input-txt-7">Город не в списке</label> | ... | ... |