Редактирование поля даты-времени в GridView

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
FredSPB
Сообщения: 19
Зарегистрирован: 2017.05.19, 21:32

Редактирование поля даты-времени в GridView

Сообщение FredSPB »

Необходимо по клику по полю даты-времени в таблице GridView вызвать виджет редактирования этого поля, по энтеру - значение записывается в это поле, таблица обновляется.
Нашел только такое решение, где и GridView, и виджет - от kartik, но это не совсем удобно - придется переделывать ранее настроенные стандартные GridView.
Есть ли такое решение - GridView - стандартный, а виджет даты-времени - от kartik, уж очень он удобный (но это не обязательно)?
FredSPB
Сообщения: 19
Зарегистрирован: 2017.05.19, 21:32

Re: Редактирование поля даты-времени в GridView

Сообщение FredSPB »

Вроде разобрался

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) {
			},
		});
	});
});
Controller:

Код: Выделить всё

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;
    }
Ответить