public function actionIndex()
{
$model = new StoresTypeList();
- if ($this->request->isPost) {
- if ($model->load($this->request->post()) && $model->validate()) {
+ $editId = $this->request->post('editId'); // Получаем ID для редактирования
+
+ if ($model->load($this->request->post())) {
+ if ($editId) {
+ $existingModel = StoresTypeList::findOne($editId);
+ if ($existingModel) {
+ $existingModel->type_name = $model->type_name;
+ $existingModel->type_alias = strtolower(preg_replace('/[\s-]+/', '_', $model->type_name));
+ if ($existingModel->save()) {
+ Yii::$app->session->setFlash('success', 'Запись успешно обновлена.');
+ return $this->redirect(['index']);
+ }
+ }
+ } else {
$model->type_alias = strtolower(preg_replace('/[\s-]+/', '_', $model->type_name));
-
if ($model->save()) {
- Yii::$app->session->setFlash('success', 'Тип магазина Ñ\83Ñ\81пеÑ\88но Ñ\81оÑ\85Ñ\80анен.');
+ Yii::$app->session->setFlash('success', 'Ð\9dоваÑ\8f запиÑ\81Ñ\8c Ñ\83Ñ\81пеÑ\88но Ñ\81оздана.');
return $this->redirect(['index']);
}
}
+ Yii::$app->session->setFlash('error', 'Ошибка сохранения.');
+ }
+
+ $deleteId = $this->request->post('deleteId');
+ if ($deleteId) {
+ $deleteModel = StoresTypeList::findOne($deleteId);
+ if ($deleteModel && $deleteModel->delete()) {
+ Yii::$app->session->setFlash('success', 'Запись успешно удалена.');
+ return $this->redirect(['index']);
+ }
}
$dataProvider = new ActiveDataProvider([
]);
}
+ public function actionGetRecord($id)
+ {
+ $model = StoresTypeList::findOne($id);
+ if ($model) {
+ return $this->asJson(['type_name' => $model->type_name]);
+ }
+ return $this->asJson(['error' => 'Запись не найдена']);
+ }
+
/**
* Displays a single StoresTypeList model.
* @param int $id ID
use yii\widgets\ActiveForm;
use yii\widgets\Pjax;
-use yii_app\records\StoresTypeList;
use yii\helpers\Html;
use yii\helpers\Url;
use yii\grid\ActionColumn;
</div>
<?php endif; ?>
<div class="form-container mb-4 col-4">
- <?php $form = ActiveForm::begin([
- 'options' => ['data-pjax' => true],
- ]); ?>
+ <?php $form = ActiveForm::begin(['options' => ['data-pjax' => true]]); ?>
- <?= $form->field($model, 'type_name')->textInput(['maxlength' => true])->label('Название типа') ?>
+ <?= $form->field($model, 'type_name')->textInput(['id' => 'type-name-field', 'maxlength' => true])->label('Название') ?>
- <?= Html::submitButton('Сохранить', ['class' => 'btn btn-success']) ?>
+ <?= Html::hiddenInput('editId', '', ['id' => 'edit-id']) ?>
+ <?= Html::hiddenInput('deleteId', '', ['id' => 'delete-id']) ?>
+
+ <?= Html::submitButton('Сохранить', ['class' => 'btn btn-success', 'id' => 'save-btn']) ?>
+ <?= Html::button('Отмена', ['class' => 'btn btn-secondary', 'id' => 'cancel-btn']) ?>
+ <div class="list-container my-4">
+ <ul id="record-list" class="list-group">
+ <?php foreach ($dataProvider->getModels() as $item): ?>
+ <li class="list-group-item" data-id="<?= $item->id ?>">
+ <?= Html::encode($item->type_name) ?>
+ </li>
+ <?php endforeach; ?>
+ </ul>
+ </div>
+ <?= Html::button('Удалить', ['class' => 'btn btn-danger d-none', 'id' => 'delete-btn']) ?>
+ <?= Html::button('Редактировать', ['class' => 'btn btn-primary d-none', 'id' => 'edit-btn']) ?>
<?php ActiveForm::end(); ?>
</div>
+
+
<?= GridView::widget([
'dataProvider' => $dataProvider,
'columns' => [
<?php Pjax::end(); ?>
</div>
+
+<script>
+ document.addEventListener('DOMContentLoaded', function () {
+ const list = document.getElementById('record-list');
+ const typeNameField = document.getElementById('type-name-field');
+ const editIdInput = document.getElementById('edit-id');
+ const deleteIdInput = document.getElementById('delete-id');
+ const deleteBtn = document.getElementById('delete-btn');
+ const cancelBtn = document.getElementById('cancel-btn');
+ const saveBtn = document.getElementById('save-btn');
+ const editBtn = document.getElementById('edit-btn');
+
+ list.addEventListener('click', function (event) {
+ const target = event.target;
+ if (target.classList.contains('list-group-item')) {
+ const id = target.dataset.id;
+
+ fetch('<?= Url::to(['get-record']) ?>?id=' + id)
+ .then(response => response.json())
+ .then(data => {
+ if (data.error) {
+ alert(data.error);
+ } else {
+ typeNameField.value = data.type_name;
+ editIdInput.value = id;
+ deleteIdInput.value = '';
+
+ document.querySelectorAll('.list-group-item').forEach(item => {
+ item.classList.remove('active');
+ });
+ target.classList.add('active');
+ deleteBtn.classList.remove('d-none');
+ editBtn.classList.remove('d-none');
+ }
+ });
+ }
+ });
+
+ editBtn.addEventListener('click', function () {
+ const id = editIdInput.value;
+ if (id) {
+ saveBtn.click();
+ } else {
+ alert('Выберите запись для редактирования.');
+ }
+ });
+
+ deleteBtn.addEventListener('click', function () {
+ const id = editIdInput.value;
+ if (id && confirm('Вы уверены, что хотите удалить запись?')) {
+ deleteIdInput.value = id;
+ saveBtn.click();
+ }
+ });
+
+ cancelBtn.addEventListener('click', function () {
+ typeNameField.value = '';
+ editIdInput.value = '';
+ deleteIdInput.value = '';
+ deleteBtn.classList.add('d-none');
+ editBtn.classList.add('d-none');
+ document.querySelectorAll('.list-group-item').forEach(item => {
+ item.classList.remove('active');
+ });
+ });
+ });
+</script>
\ No newline at end of file