|
| 1 | +# AjaxSubmitButton для Yii 2 |
| 2 | +===================================== |
| 3 | + |
| 4 | +[](https://packagist.org/packages/demogorgorn/yii2-ajax-submit-button) |
| 5 | +[](https://packagist.org/packages/demogorgorn/yii2-ajax-submit-button) |
| 6 | +[](https://packagist.org/packages/demogorgorn/yii2-ajax-submit-button) |
| 7 | +[](https://packagist.org/packages/demogorgorn/yii2-ajax-submit-button) |
| 8 | +[](http://www.yiiframework.com/) |
| 9 | + |
| 10 | + |
| 11 | +AjaxSubmitButton это достаточно полезный и мощный виджет для создания ajax кнопки любой сложности, в т.ч. для работы с ActiveForm, обычной формой либо для использования в качестве самостоятельного элемента. Является аналогом ajaxSubmitButton в Yii1, но имеет ряд особенностей и полезных функций. |
| 12 | + |
| 13 | +### Базовый пример |
| 14 | + |
| 15 | +Использование с произвольным виджетом в обычной форме (в данном случае произвольный виджет - Select2). |
| 16 | + |
| 17 | +Представление (view): |
| 18 | +```php |
| 19 | +use demogorgorn\ajax\AjaxSubmitButton; |
| 20 | + |
| 21 | +<?php echo Html::beginForm('', 'post', ['class'=>'uk-width-medium-1-1 uk-form uk-form-horizontal']); ?> |
| 22 | + |
| 23 | +<?= Select2::widget([ |
| 24 | + 'name' => 'country_code', |
| 25 | + 'data' => Country::getAllCountries(), |
| 26 | + 'options' => [ |
| 27 | + 'id' => 'country_select', |
| 28 | + 'multiple' => false, |
| 29 | + 'placeholder' => 'Choose...', |
| 30 | + 'class' => 'uk-width-medium-7-10'] |
| 31 | + ]); |
| 32 | +?> |
| 33 | + |
| 34 | +<?php AjaxSubmitButton::begin([ |
| 35 | + 'label' => 'Check', |
| 36 | + 'ajaxOptions' => [ |
| 37 | + 'type'=>'POST', |
| 38 | + 'url'=>'country/getinfo', |
| 39 | + 'success' => new \yii\web\JsExpression('function(html){ |
| 40 | + $("#output").html(html); |
| 41 | + }'), |
| 42 | + ], |
| 43 | + 'options' => ['class' => 'customclass', 'type' => 'submit'], |
| 44 | + ]); |
| 45 | + AjaxSubmitButton::end(); |
| 46 | +?> |
| 47 | + |
| 48 | +<?php echo Html::endForm(); ?> |
| 49 | + |
| 50 | +<div id="output"></div> |
| 51 | +``` |
| 52 | + |
| 53 | +> Обратите внимание: элемент с id #output - это элемент, содержимое которого будет обновлено при удачном выполнении ajax запроса. |
| 54 | +
|
| 55 | +Контроллер (controller): |
| 56 | +```php |
| 57 | +public function actionGetinfo() |
| 58 | +{ |
| 59 | + if(!isset($_POST['country_code']) || empty($_POST['country_code'])) |
| 60 | + return; |
| 61 | + |
| 62 | + $code = $_POST['country_code']; |
| 63 | + |
| 64 | + return $this->renderAjax('resultwidget', ['code' => $code]); |
| 65 | +} |
| 66 | +``` |
| 67 | + |
| 68 | +### Пример использования с ActiveForm и включенной клиентской валидацией (client validation) |
| 69 | + |
| 70 | +Представление: |
| 71 | +```php |
| 72 | + $form = ActiveForm::begin([ |
| 73 | + 'id' => 'add-form', |
| 74 | + 'options' => ['class' => 'form-inline'], |
| 75 | + ]); |
| 76 | + |
| 77 | + ... |
| 78 | + |
| 79 | + AjaxSubmitButton::begin([ |
| 80 | + 'label' => 'Add', |
| 81 | + 'useWithActiveForm' => 'add-form', |
| 82 | + 'ajaxOptions' => [ |
| 83 | + 'type' => 'POST', |
| 84 | + 'success' => new \yii\web\JsExpression("function(data) { |
| 85 | + if (data.status == true) |
| 86 | + { |
| 87 | + closeTopbar(); |
| 88 | + } |
| 89 | + }"), |
| 90 | + ], |
| 91 | + 'options' => ['class' => 'btn btn-primary', 'type' => 'submit', 'id' =>'add-button'], |
| 92 | + ]); |
| 93 | + AjaxSubmitButton::end(); |
| 94 | + |
| 95 | + ActiveForm::end() |
| 96 | +``` |
| 97 | + |
| 98 | +> Как видите использовать виджет с ActiveForm очень легко и просто - достаточно задать параметр id у ActiveForm, а также в параметре 'useWithActiveForm' указать id данной формы. (В данном примере id равен 'add-form', без символа '#'!). |
| 99 | +
|
| 100 | + |
| 101 | +### Клинтская валидация (Client validation) |
| 102 | + |
| 103 | +Как я указал выше, виджет может быть использован с ActiveForm с включенной клиентской валидацией (см. пример выше). Если вы хотите отключить валидацию на клиенте, установите параметру 'enableClientValidation' значение равное 'false'. |
| 104 | + |
| 105 | +```php |
| 106 | + $form = ActiveForm::begin([ |
| 107 | + 'id' => 'filters-form', |
| 108 | + 'enableClientValidation' => false |
| 109 | + ]); |
| 110 | +``` |
| 111 | + |
| 112 | +### Использование Preloader |
| 113 | + |
| 114 | +Виджет можно использовать с произвольным preloader. |
| 115 | + |
| 116 | +```php |
| 117 | +<?php AjaxSubmitButton::begin([ |
| 118 | + 'label' => 'Check', |
| 119 | + 'ajaxOptions' => [ |
| 120 | + 'type'=>'POST', |
| 121 | + 'url'=>'country/getinfo', |
| 122 | + 'beforeSend' => new \yii\web\JsExpression('function(html){ |
| 123 | + ... show preloader... |
| 124 | + }'), |
| 125 | + 'success' => new \yii\web\JsExpression('function(html){ |
| 126 | + ... hide preloader ... |
| 127 | + }'), |
| 128 | + ], |
| 129 | + 'options' => ['class' => 'customclass', 'type' => 'submit'], |
| 130 | + ]); |
| 131 | + AjaxSubmitButton::end(); |
| 132 | +?> |
| 133 | +``` |
| 134 | + |
| 135 | +### Опции виджета |
| 136 | + |
| 137 | +Параметр | Описание | Тип |
| 138 | +------------ | ------------- | ------------- |
| 139 | +ajaxOptions | опции ajax запроса | Array |
| 140 | +options | HTML атрибуты и другие опции тега контейнера для виджета | Array |
| 141 | +tagName | имя тега для генерации кнопки (по умолчанию используется 'button'. Вы можете использовать, например, тег 'a') | String |
| 142 | +label | Текст кнопки | String |
| 143 | +encodeLabel | должен ли текст кнопки быть HTML-кодирован | Boolean |
| 144 | +clickedButtonVarName | имя объекта js. Не используется (игнорируется), когда параметр useWithActiveForm задан | String |
| 145 | +useWithActiveForm | должна ли кнопка использоваться в связке с ActiveForm. Указывается id ActiveForm, либо false, если не планируется использовать | Boolean / String |
| 146 | + |
| 147 | +## Установка |
| 148 | +------------ |
| 149 | + |
| 150 | +The preferred way to install this extension is through [composer](http://getcomposer.org/download/). |
| 151 | + |
| 152 | +Either run |
| 153 | + |
| 154 | +``` |
| 155 | +php composer.phar require demogorgorn/yii2-ajax-submit-button "*" |
| 156 | +``` |
| 157 | + |
| 158 | +or add |
| 159 | + |
| 160 | +``` |
| 161 | +"demogorgorn/yii2-ajax-submit-button": "*" |
| 162 | +``` |
| 163 | + |
| 164 | +to the require section of your `composer.json` file and run `composer update`. |
0 commit comments