Устанавливаем sweetAlert с помощью composer, для этого открываем консоль, переходим в папку с проектом и запускаем следующую команду:
composer require --prefer-dist bower-asset/sweetalert "*"
Далее создаем файл с именем SweetAlertAsset.php рядом с AppAsset.php в папке assets вашего проекта со следующим содержанием:
<?php namespace app\assets; class SweetAlertAsset extends \yii\web\AssetBundle { public $sourcePath = '@bower/sweetalert/dist'; public $css = [ 'sweetalert.css', ]; public $js = [ 'sweetalert.min.js' ]; }
Стандартный yii.confirm находится в app/vendor/yiisoft/yii2/assets/yii.js и выглядит следующим образом:
/** * Displays a confirmation dialog. * The default implementation simply displays a js confirmation dialog. * You may override this by setting `yii.confirm`. * @param message the confirmation message. * @param ok a callback to be called when the user confirms the message * @param cancel a callback to be called when the user cancels the confirmation */ confirm: function (message, ok, cancel) { if (confirm(message)) { !ok || ok(); } else { !cancel || cancel(); } },
Нам необходимо переопределить стандартный yii.confirm. Для этого создайте папку js (если ее еще нет) в вашем проекте @app/web/js, а в ней js файл yii.confirm.overrides.js со следующим содержимым:
/** * Override the default yii confirm dialog. This function is * called by yii when a confirmation is requested. * * @param string message the message to display * @param string ok callback triggered when confirmation is true * @param string cancelCallback callback triggered when cancelled */ yii.confirm = function (message, okCallback, cancelCallback) { swal({ title: message, type: 'warning', showCancelButton: true, closeOnConfirm: true, allowOutsideClick: true }, okCallback); };
Далее добавим js файл в Yii2-asset-bundle. Для этого откройте assets/AppAsset.php, добавте в него js файл yii.confirm.overrides.js и зависимость SweetAlertAsset для подключения необходимых скриптов и стилей в проект. Файл assets/AppAsset.php будет выглядеть следующим образом:
<?php namespace app\assets; use yii\web\AssetBundle; class AppAsset extends AssetBundle { public $basePath = '@webroot'; public $baseUrl = '@web'; public $css = [ 'css/site.css', ]; public $js = [ //js переопределяющий yii.confirm 'js/yii.confirm.overrides.js', ]; public $depends = [ 'yii\web\YiiAsset', 'yii\bootstrap\BootstrapAsset', //импорт файлов SweetAlertAsset 'app\assets\SweetAlertAsset', ]; }
На этом все. Давайте проверим, откроем любой список управления записями и нажмем удалить для вызова диалога подтверждения. Как было раньше:
Теперь вместо стандартного confirm:
Также это будет работать при использовании кнопок в коде проекта:
<?php use yii\helpers\Html; //... echo Html::submitButton( 'Кнопка', [ 'class' => 'btn', 'data-confirm' => Yii::t('yii', 'Вы точно хотите это сделать?'), ] );
Вот так легко, без регистрации и смс можно поменять стандартный диалог confirm в yii2 ;)
Комментарии
Класс, нужно еще статью о том как заменить вид стандартного confirm на bootstrap
ОтветитьХорошо, попробую реализовать и такое
ОтветитьДа, хорошая идея, под bootstrap сделать. Т.к. много шаблонов CMS основаны на нем и можно будет красивые модальные окна вместо confirm выводить.
ОтветитьВот что получилось Yii2. Стилизация стандартного диалог confirm под стиль twitter bootstrap: https://кодер.укр/записи/yii2-стилизация-стандартного-диалог-confirm-под-стиль-twitter-bootstrap
ОтветитьУ меня выдаёт ошибку "Method Not Allowed. This url can only handle the following request methods: POST."
ОтветитьПопробуйте добавить 'data-method'=>'post', если речь идет о submitButton
ОтветитьЭту ошибку выдаёт при нажатии кнопки: grid\ActionColumn {delete}. Броузер показывает что там уже прописан data-method="post".
ОтветитьТогда надо искать ошибку у вас в коде
ОтветитьТочно, была ошибка ) - забыл добавить в зависимости 'app\assets\SweetAlertAsset', только добавил, сразу заработало ).
ОтветитьХорошая статья, но пример с bootstrap полезнее
ОтветитьСогласен
Ответитьcomposer require --prefer-dist bower-asset/sweetalert "*"
Ответитьстранно, но композер установил все, кроме папки dist. Пришлось скачать архив в гитхаба и добавить ее в ручную.