Необходимо по клику по полю даты-времени в таблице GridView вызвать виджет редактирования этого поля, по энтеру - значение записывается в это поле, таблица обновляется.
Нашел только такое решение, где и GridView, и виджет - от kartik, но это не совсем удобно - придется переделывать ранее настроенные стандартные GridView.
Есть ли такое решение - GridView - стандартный, а виджет даты-времени - от kartik, уж очень он удобный (но это не обязательно)?
Редактирование поля даты-времени в GridView
Re: Редактирование поля даты-времени в GridView
Вроде разобрался
View:
Controller:
View:
Код: Выделить всё
use kartik\date\DatePicker;
use kartik\datetime\DateTimePicker;
use kartik\datetime\DateTimePickerAsset;
<?php DateTimePickerAsset::register($this); ?>
[
'attribute' => 'orderdatetry2',
'header' => 'дата 2 примерки',
'format' => 'datetime',
'class' => DataColumn::class,
'content' => function ($data) {
$value = Yii::$app->formatter->asDatetime($data->orderdatetry2, 'yyyy-MM-dd HH:mm');
return Html::a('<span>' . $value . '</span>', '#', [
'class' => 'editable-datetime',
'data-type' => '7',
'data-id' => $data->idorder,
'data-value' => $value,
]);
},
],
$(document).ready(function() {
$(".editable-datetime").datetimepicker({
format: "yyyy-MM-dd HH:mm",
todayHighlight: true,
autoclose: true,
showMeridian: false,
}).on("changeDate", function(e) {
var date = e.date;
var formattedDate = date.getFullYear() + "-" + ("0" + (date.getMonth() + 1)).slice(-2) + "-" + ("0" + date.getDate()).slice(-2) + " " + ("0" + date.getHours()).slice(-2) + ":" + ("0" + date.getMinutes()).slice(-2);
var formattedDateSmall = date.getFullYear() + "-" + ("0" + (date.getMonth() + 1)).slice(-2) + "-" + ("0" + date.getDate()).slice(-2);
var type = $(this).data("type");
var id = $(this).data("id");
$(this).find("span").text(formattedDate);
$(this).attr("data-value", formattedDate);
$.ajax({
type: "POST",
url: "/work/update-datetime",
data: {type: type, id: id, datetime: formattedDate},
success: function(response) {
},
});
});
});
Код: Выделить всё
public function actionUpdateDatetime()
{
$type = Yii::$app->request->post('type');
$id = Yii::$app->request->post('id');
$datetime = Yii::$app->request->post('datetime');
$dateTimeStr = $dateTime->format('Y-m-d H:i:s');
$orderdate = Work::findOne($id);
if ($orderdate) {
switch ($type) {
case 4: // 1 примерка
$orderdate->orderdatetry1 = new Expression("'$dateTimeStr'");
break;
case 7: // 2 примерка
$orderdate->orderdatetry2 = new Expression("'$dateTimeStr'");
break;
case 9: // дата сдачи
$orderdate->orderdateprev = new Expression("'$dateTimeStr'");
break;
}
$orderdate->save();
}
return $dateTimeStr;
}