inquid / yii2-sweetalert2-widget
为Yii2渲染SweetAlert2小部件。
v1.3.7
2018-02-14 06:31 UTC
Requires
- bower-asset/sweetalert2: ^7.6
- daneden/animate.css: ^3.5
- yiisoft/yii2: ~2.0
- yiisoft/yii2-bootstrap: ~2.0.0
Requires (Dev)
- phpunit/phpunit: 6.*
README
为Yii2渲染SweetAlert2小部件。
安装
通过以下方式安装此扩展:通过composer。
运行
php composer.phar require dominus77/yii2-sweetalert2-widget "~1.3"
或在您的composer.json
文件的require部分添加以下内容:
"dominus77/yii2-sweetalert2-widget": "~1.3"
使用
扩展安装后,只需在代码中使用即可
闪存消息
视图
<?= \dominus77\sweetalert2\Alert::widget(['useSessionFlash' => true]) ?>
控制器
<?php
Yii::$app->session->setFlash(\dominus77\sweetalert2\Alert::TYPE_SUCCESS, 'Congratulations!');
也可以
<?php
Yii::$app->session->setFlash(\dominus77\sweetalert2\Alert::TYPE_SUCCESS, [
[
'title' => 'Your title',
'text' => 'Your message',
'confirmButtonText' => 'Done!',
]
]);
或
<?php
Yii::$app->session->setFlash('', [
[
'title' => 'Auto close alert!',
'text' => 'I will close in 2 seconds.',
'timer' => 2000,
],
[
'callback' => new \yii\web\JsExpression("
function (result) {
// handle dismiss, result.dismiss can be 'cancel', 'overlay', 'close', and 'timer'
if (result.dismiss === 'timer') {
console.log('I was closed by the timer')
}
}
"),
],
]);
渲染小部件
视图
<?php
use dominus77\sweetalert2\Alert;
一条基本消息
<?= Alert::widget([
'options' => [
'Any fool can use a computer'
],
]) ?>
带有下文标题的消息
<?= Alert::widget([
'options' => [
'The Internet?',
'That thing is still around?',
Alert::TYPE_QUESTION
]
]) ?>
成功消息!
<?= Alert::widget([
'options' => [
'Good job!',
'You clicked the button!',
Alert::TYPE_SUCCESS
]
]) ?>
具有自动关闭计时器的消息
<?= Alert::widget([
'options' => [
'title' => 'Auto close alert!',
'text' => 'I will close in 2 seconds.',
'timer' => 2000,
],
'callback' => new \yii\web\JsExpression("
function (result) {
if (result.dismiss === 'timer') {
console.log('I was closed by the timer')
}
}
"),
]) ?>
自定义HTML描述和按钮
<?= Alert::widget([
'options' => [
'title' => '<i>HTML</i> <u>example</u>',
'type' => Alert::TYPE_INFO,
'html' => 'You can use <b>bold text</b>,'
. '<a href="//github.com">links</a> '
. 'and other HTML tags',
'showCloseButton' => true,
'showCancelButton' => true,
'confirmButtonText' => '<i class="fa fa-thumbs-up"></i> Great!',
'cancelButtonText' => '<i class="fa fa-thumbs-down"></i>',
],
]) ?>
带有自定义动画的jQuery HTML Animate.css
示例
<?= Alert::widget([
'options' => [
'title' => 'jQuery HTML example',
'html' => new \yii\web\JsExpression("$('<div>').addClass('some-class').text('jQuery is everywhere.')"),
'animation' => false,
'customClass' => 'animated jello', // https://daneden.github.io/animate.css/
],
]) ?>
一个警告消息,并附加到"确认"按钮的函数...
<?= Alert::widget([
'options' => [
'title' => 'Are you sure?',
'text' => "You won't be able to revert this!",
'type' => Alert::TYPE_WARNING,
'showCancelButton' => true,
'confirmButtonColor' => '#3085d6',
'cancelButtonColor' => '#d33',
'confirmButtonText' => 'Yes, delete it!',
],
'callback' => new \yii\web\JsExpression("
function (result) {
if(result.value === true){
swal('Deleted!','Your file has been deleted.','success')
}
}
"),
]) ?>
... 通过传递参数,您可以为"取消"执行其他操作。
<?= Alert::widget([
'options' => [
'title' => 'Are you sure?',
'text' => "You won't be able to revert this!",
'type' => Alert::TYPE_WARNING,
'showCancelButton' => true,
'confirmButtonColor' => '#3085d6',
'cancelButtonColor' => '#d33',
'confirmButtonText' => 'Yes, delete it!',
'cancelButtonText' => 'No, cancel!',
'confirmButtonClass' => 'btn btn-success',
'cancelButtonClass' => 'btn btn-danger',
'buttonsStyling' => false,
],
'callback' => new \yii\web\JsExpression("
function (result) {
if(result.value) {
swal('Deleted!','Your file has been deleted.','success')
}
if (result.dismiss === 'cancel') {
swal(
'Cancelled',
'Your imaginary file is safe :)',
'error'
)
}
}
"),
]) ?>
输入类型示例
文本
<?= Alert::widget([
'options' => [
'title' => 'Input something',
'input' => Alert::INPUT_TYPE_TEXT,
'showCancelButton' => true,
'inputValidator' => new \yii\web\JsExpression("
function (value) {
return new Promise(function (resolve) {
if (value) {
resolve()
} else {
resolve('You need to write something!')
}
})
}
")
],
'callback' => new \yii\web\JsExpression("
function (result) {
if(result.value) {
swal({
type: 'success',
html: 'You entered: ' + result.value
})
}
}
"),
]) ?>
电子邮件
<?= Alert::widget([
'options' => [
'title' => 'Input email address',
'input' => Alert::INPUT_TYPE_EMAIL,
],
'callback' => new \yii\web\JsExpression("
function (result) {
swal({
type: 'success',
html: 'Entered email: ' + result.value
})
}
"),
]) ?>
密码
<?= Alert::widget([
'options' => [
'title' => 'Enter your password',
'input' => Alert::INPUT_TYPE_PASSWORD,
'inputAttributes' => [
'maxlength' => 10,
'autocapitalize' => 'off',
'autocorrect' => 'off',
]
],
'callback' => new \yii\web\JsExpression("
function (result) {
if (result.value) {
swal({
type: 'success',
html: 'Entered password: ' + result.value
})
}
}
"),
]) ?>
文本区域
<?= Alert::widget([
'options' => [
'input' => Alert::INPUT_TYPE_TEXTAREA,
'showCancelButton' => true,
],
'callback' => new \yii\web\JsExpression("
function (result) {
if (result.value) {
swal(result.value)
}
}
"),
]) ?>
选择
<?= Alert::widget([
'options' => [
'title' => 'Select Russia',
'input' => Alert::INPUT_TYPE_SELECT,
'inputOptions' => [
'SRB' => 'Serbia',
'RUS' => 'Russia',
'UKR' => 'Ukraine',
'HRV' => 'Croatia',
],
'inputPlaceholder' => 'Select country',
'showCancelButton' => true,
'inputValidator' => new \yii\web\JsExpression("
function (value) {
return new Promise(function (resolve) {
if (value === 'RUS') {
resolve()
} else {
resolve('You need to select Russia :)')
}
})
}
")
],
'callback' => new \yii\web\JsExpression("
function (result) {
if (result.value) {
swal({
type: 'success',
html: 'You selected: ' + result.value
})
}
}
"),
]) ?>
单选按钮
<?php
$script = new \yii\web\JsExpression("
// inputOptions can be an object or Promise
var inputOptions = new Promise(function (resolve) {
setTimeout(function () {
resolve({
'#ff0000': 'Red',
'#00ff00': 'Green',
'#0000ff': 'Blue'
})
}, 2000)
})
");
$this->registerJs($script, \yii\web\View::POS_HEAD);
echo Alert::widget([
'options' => [
'title' => 'Select color',
'input' => Alert::INPUT_TYPE_RADIO,
'inputOptions' => new \yii\web\JsExpression("inputOptions"),
'inputValidator' => new \yii\web\JsExpression("
function (result) {
return new Promise(function (resolve) {
if (result) {
resolve()
} else {
resolve('You need to select something!')
}
})
}
")
],
'callback' => new \yii\web\JsExpression("
function (result) {
swal({
type: 'success',
html: 'You selected: ' + result.value
})
}
"),
]); ?>
复选框
<?= Alert::widget([
'options' => [
'title' => 'Terms and conditions',
'input' => Alert::INPUT_TYPE_CHECKBOX,
'inputValue' => 1,
'inputPlaceholder' => 'I agree with the terms and conditions',
'confirmButtonText' => 'Continue <span class="glyphicon glyphicon-arrow-right" aria-hidden="true"></span>',
'inputValidator' => new \yii\web\JsExpression("
function (result) {
return new Promise(function (resolve) {
if (result) {
resolve()
} else {
resolve('You need to agree with T&C')
}
})
}
")
],
'callback' => new \yii\web\JsExpression("
function (result) {
swal({
type: 'success',
html: 'You agreed with T&C :' + result.value
})
}
"),
]) ?>
文件
<?= Alert::widget([
'options' => [
'title' => 'Select image',
'input' => Alert::INPUT_TYPE_FILE,
'inputAttributes' => [
'accept' => 'image/*',
'aria-label' => 'Upload your profile picture',
],
],
'callback' => new \yii\web\JsExpression("
function(result) {
var reader = new FileReader
reader.onload = function (e) {
swal({
title: 'Your uploaded picture',
imageUrl: e.target.result,
imageAlt: 'The uploaded picture'
})
}
reader.readAsDataURL(result.value)
}
"),
]) ?>
范围
<?= Alert::widget([
'options' => [
'title' => 'How old are you?',
'type' => Alert::TYPE_QUESTION,
'input' => Alert::INPUT_TYPE_RANGE,
'inputAttributes' => [
'min' => 8,
'max' => 120,
'step' => 1,
],
'inputValue' => 25,
]
]) ?>
不支持多个输入,您可以通过使用html
和preConfirm
参数来实现。在preConfirm()
函数内部,您可以将自定义结果作为参数传递给resolve()
函数。
<?= Alert::widget([
'options' => [
'title' => 'Multiple inputs',
'html' => '<input id="swal-input1" class="swal2-input"> <input id="swal-input2" class="swal2-input">',
'preConfirm' => new \yii\web\JsExpression("
function () {
return new Promise(function (resolve) {
resolve([
$('#swal-input1').val(),
$('#swal-input2').val()
])
})
}
"),
'onOpen' => new \yii\web\JsExpression("
function () {
$('#swal-input1').focus()
}
"),
],
'callback' => new \yii\web\JsExpression("
function (result) {
swal(JSON.stringify(result.value))
}
"),
]) ?>
Ajax请求示例
<?= Alert::widget([
'options' => [
'title' => 'Submit email to run ajax request',
'input' => Alert::INPUT_TYPE_EMAIL,
'showCancelButton' => true,
'confirmButtonText' => 'Submit',
'showLoaderOnConfirm' => true,
'preConfirm' => new \yii\web\JsExpression("
function (email) {
return new Promise(function (resolve) {
setTimeout(function () {
if (email === 'taken@example.com') {
swal.showValidationError(
'This email is already taken.'
)
}
resolve()
}, 2000)
})
}
"),
'allowOutsideClick' => false,
],
'callback' => new \yii\web\JsExpression("
function (result) {
if (result.value) {
swal({
type: 'success',
title: 'Ajax request finished!',
html: 'Submitted email: ' + result.value
})
}
}
"),
]) ?>
测试
$ phpunit
更多信息
请参阅SweetAlert2
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件