Commit 0ade45a9acea53a900badc1df2ac7d01d1a25ea6
1 parent
0cf90b50
add ajax handler for deleting files from server
Showing
6 changed files
with
82 additions
and
47 deletions
Show diff stats
backend/assets/CheckPriceAsset.php renamed to backend/assets/ParserAsset.php
| @@ -10,14 +10,14 @@ namespace backend\assets; | @@ -10,14 +10,14 @@ namespace backend\assets; | ||
| 10 | 10 | ||
| 11 | use yii\web\AssetBundle; | 11 | use yii\web\AssetBundle; |
| 12 | 12 | ||
| 13 | -class CheckPriceAsset extends AssetBundle { | 13 | +class ParserAsset extends AssetBundle { |
| 14 | public $basePath = '@webroot'; | 14 | public $basePath = '@webroot'; |
| 15 | public $baseUrl = '@web'; | 15 | public $baseUrl = '@web'; |
| 16 | public $css = [ | 16 | public $css = [ |
| 17 | 'css/site.css', | 17 | 'css/site.css', |
| 18 | ]; | 18 | ]; |
| 19 | public $js = [ | 19 | public $js = [ |
| 20 | - 'js/check-price.js', | 20 | + 'js/parser.js', |
| 21 | ]; | 21 | ]; |
| 22 | public $depends = [ | 22 | public $depends = [ |
| 23 | 'yii\web\YiiAsset', | 23 | 'yii\web\YiiAsset', |
backend/controllers/ParserController.php
| @@ -269,14 +269,14 @@ class ParserController extends BaseController | @@ -269,14 +269,14 @@ class ParserController extends BaseController | ||
| 269 | 269 | ||
| 270 | public function actionServerFiles () | 270 | public function actionServerFiles () |
| 271 | { | 271 | { |
| 272 | - $arr_id = []; | 272 | + $arr_id_files = []; |
| 273 | // получим список файлов которые ожидают к загрузке | 273 | // получим список файлов которые ожидают к загрузке |
| 274 | foreach (glob(Yii::getAlias('@auto_upload') . '/*') as $server_file) { | 274 | foreach (glob(Yii::getAlias('@auto_upload') . '/*') as $server_file) { |
| 275 | $file_id = basename($server_file,".csv"); | 275 | $file_id = basename($server_file,".csv"); |
| 276 | - $arr_id[] = (int) $file_id; | 276 | + $arr_id_files[] = (int) $file_id; |
| 277 | } | 277 | } |
| 278 | - | ||
| 279 | - $query = ImporterFiles::find()->where(['in', 'id', $arr_id])->orderBy(['upload_time' => SORT_DESC]); | 278 | + Yii::$app->cache->set( 'files_to_delete',json_encode( $arr_id_files ) ); |
| 279 | + $query = ImporterFiles::find()->where(['in', 'id', $arr_id_files])->orderBy(['upload_time' => SORT_DESC]); | ||
| 280 | 280 | ||
| 281 | $provider = new ActiveDataProvider([ | 281 | $provider = new ActiveDataProvider([ |
| 282 | 'query' => $query, | 282 | 'query' => $query, |
| @@ -289,24 +289,35 @@ class ParserController extends BaseController | @@ -289,24 +289,35 @@ class ParserController extends BaseController | ||
| 289 | 'dataProvider' => $provider]); | 289 | 'dataProvider' => $provider]); |
| 290 | } | 290 | } |
| 291 | 291 | ||
| 292 | - public function actionDelete ($id) | 292 | + public function actionDelete () |
| 293 | { | 293 | { |
| 294 | - if(Yii::$app->request->isAjax){ | ||
| 295 | - CustomVarDamp::dumpAndDie(1); | ||
| 296 | - } | ||
| 297 | - | ||
| 298 | - $files_model = new ImporterFiles(); | ||
| 299 | - try { | 294 | + if ( Yii::$app->request->isAjax ) { |
| 300 | 295 | ||
| 301 | - $files_model->delete($id); | ||
| 302 | - unlink(Yii::getAlias('@auto_upload') . '/' . $id . '.csv' ); | ||
| 303 | - | ||
| 304 | - } catch (ErrorException $e) { | 296 | + $files_model = new ImporterFiles(); |
| 297 | + if ( isset(Yii::$app->request->post()['id'] )) { | ||
| 298 | + $id = Yii::$app->request->post()['id']; | ||
| 299 | + try { | ||
| 300 | + $files_model->delete($id); | ||
| 301 | + unlink(Yii::getAlias('@auto_upload') . '/' . $id . '.csv' ); | ||
| 302 | + | ||
| 303 | + // удалим этот id и из кэша | ||
| 304 | + if( $arr_id_files = Yii::$app->cache->get( 'files_to_delete' ) ){ | ||
| 305 | + $arr_id_files = json_decode($arr_id_files); | ||
| 306 | + if (isset( $arr_id_files[$id] ) ) { | ||
| 307 | + unset( $arr_id_files[$id] ); | ||
| 308 | + // положем уже обновленный массив | ||
| 309 | + Yii::$app->cache->set( 'files_to_delete',json_encode( $arr_id_files ) ); | ||
| 310 | + } | ||
| 311 | + } | ||
| 312 | + // сообщим скрипту что все ОК | ||
| 313 | + echo 1; | ||
| 314 | + } catch (ErrorException $e) { | ||
| 305 | 315 | ||
| 306 | - CustomVarDamp::dump($e->getMessage()); | 316 | + CustomVarDamp::dump($e->getMessage()); |
| 307 | 317 | ||
| 318 | + } | ||
| 319 | + } | ||
| 308 | } | 320 | } |
| 309 | 321 | ||
| 310 | - $this->redirect('server-files'); | ||
| 311 | } | 322 | } |
| 312 | } | 323 | } |
backend/views/check-price/index.php
| @@ -2,11 +2,10 @@ | @@ -2,11 +2,10 @@ | ||
| 2 | use yii\helpers\Html; | 2 | use yii\helpers\Html; |
| 3 | use yii\grid\GridView; | 3 | use yii\grid\GridView; |
| 4 | use yii\grid\SerialColumn; | 4 | use yii\grid\SerialColumn; |
| 5 | -use yii\grid\ActionColumn; | ||
| 6 | use yii\widgets\Pjax; | 5 | use yii\widgets\Pjax; |
| 7 | use yii\bootstrap\Modal; | 6 | use yii\bootstrap\Modal; |
| 8 | use yii\helpers\Url; | 7 | use yii\helpers\Url; |
| 9 | -use backend\assets\CheckPriceAsset; | 8 | +use backend\assets\ParserAsset; |
| 10 | 9 | ||
| 11 | 10 | ||
| 12 | /* @var $this yii\web\View */ | 11 | /* @var $this yii\web\View */ |
| @@ -16,7 +15,8 @@ use backend\assets\CheckPriceAsset; | @@ -16,7 +15,8 @@ use backend\assets\CheckPriceAsset; | ||
| 16 | $this->title = 'Проверка прайсов'; | 15 | $this->title = 'Проверка прайсов'; |
| 17 | $this->params['breadcrumbs'][] = $this->title; | 16 | $this->params['breadcrumbs'][] = $this->title; |
| 18 | // зарегистрируем скрипт для обработки загрузки модального окна | 17 | // зарегистрируем скрипт для обработки загрузки модального окна |
| 19 | -CheckPriceAsset::register($this); | 18 | +ParserAsset::register($this); |
| 19 | +Pjax::begin(); | ||
| 20 | ?> | 20 | ?> |
| 21 | <div class="catalog-index"> | 21 | <div class="catalog-index"> |
| 22 | 22 | ||
| @@ -30,7 +30,6 @@ CheckPriceAsset::register($this); | @@ -30,7 +30,6 @@ CheckPriceAsset::register($this); | ||
| 30 | ['content' => function ($model) { | 30 | ['content' => function ($model) { |
| 31 | $url = Url::to(['view', 'id' => $model->id, 'date_update' => $model->price_date_update]); | 31 | $url = Url::to(['view', 'id' => $model->id, 'date_update' => $model->price_date_update]); |
| 32 | return Html::a('<span class="glyphicon glyphicon-remove"> Просмотреть </span>', '#', [ | 32 | return Html::a('<span class="glyphicon glyphicon-remove"> Просмотреть </span>', '#', [ |
| 33 | - 'title' => Yii::t('yii', 'Просмотреть прайс'), | ||
| 34 | 'class' => 'modalButton', | 33 | 'class' => 'modalButton', |
| 35 | 'value' => $url, | 34 | 'value' => $url, |
| 36 | ]); | 35 | ]); |
| @@ -76,6 +75,7 @@ CheckPriceAsset::register($this); | @@ -76,6 +75,7 @@ CheckPriceAsset::register($this); | ||
| 76 | echo "<div id='modalContent'></div>"; | 75 | echo "<div id='modalContent'></div>"; |
| 77 | 76 | ||
| 78 | Modal::end(); | 77 | Modal::end(); |
| 78 | + Pjax::end(); | ||
| 79 | ?> | 79 | ?> |
| 80 | 80 | ||
| 81 | 81 |
backend/views/parser/server-files.php
| @@ -4,15 +4,17 @@ use yii\grid\GridView; | @@ -4,15 +4,17 @@ use yii\grid\GridView; | ||
| 4 | use yii\grid\SerialColumn; | 4 | use yii\grid\SerialColumn; |
| 5 | use yii\grid\ActionColumn; | 5 | use yii\grid\ActionColumn; |
| 6 | use yii\widgets\Pjax; | 6 | use yii\widgets\Pjax; |
| 7 | +use backend\assets\ParserAsset; | ||
| 7 | 8 | ||
| 8 | 9 | ||
| 9 | /* @var $this yii\web\View */ | 10 | /* @var $this yii\web\View */ |
| 10 | /* @var $searchModel backend\models\CatalogSearch */ | 11 | /* @var $searchModel backend\models\CatalogSearch */ |
| 11 | /* @var $dataProvider yii\data\ActiveDataProvider */ | 12 | /* @var $dataProvider yii\data\ActiveDataProvider */ |
| 12 | 13 | ||
| 13 | -$this->title = 'Проверка прайсов'; | 14 | +$this->title = 'Файлы на сервере'; |
| 14 | $this->params['breadcrumbs'][] = $this->title; | 15 | $this->params['breadcrumbs'][] = $this->title; |
| 15 | -Pjax::begin(); | 16 | +ParserAsset::register($this); |
| 17 | +Pjax::begin(['id' => 'server_files_grid']); | ||
| 16 | 18 | ||
| 17 | ?> | 19 | ?> |
| 18 | <div class="catalog-index"> | 20 | <div class="catalog-index"> |
| @@ -30,19 +32,15 @@ Pjax::begin(); | @@ -30,19 +32,15 @@ Pjax::begin(); | ||
| 30 | ['label' =>'Дата загрузки', | 32 | ['label' =>'Дата загрузки', |
| 31 | 'attribute' => 'upload_time' ], | 33 | 'attribute' => 'upload_time' ], |
| 32 | 34 | ||
| 33 | - ['class' => ActionColumn::className(), | ||
| 34 | - 'template'=>'{delete}', | ||
| 35 | - 'buttons' => [ | ||
| 36 | - 'delete' => function ($url, $model, $key) { | ||
| 37 | - return Html::a('<span class="glyphicon glyphicon-remove"></span>', $url, [ | ||
| 38 | - 'title' => Yii::t('yii', 'Удалить файл'), | ||
| 39 | - 'data-confirm' => 'Вы уверены что хотите удалить этот файл?', | ||
| 40 | - 'data-method' => 'post', | ||
| 41 | - 'data-pjax' => '0', | ||
| 42 | - ]); | ||
| 43 | - }, | ||
| 44 | - ], | ||
| 45 | - ] | 35 | + ['content' => function ($model) { |
| 36 | + //Url::to(['delete', 'id' => $model->id, 'date_update' => $model->price_date_update]); | ||
| 37 | + return Html::a('<span class="glyphicon glyphicon-remove"> Удалить </span>', '#', [ | ||
| 38 | + 'value' => $model->id, | ||
| 39 | + 'class' => 'deleteLink', | ||
| 40 | + ]); | ||
| 41 | + }, | ||
| 42 | + ], | ||
| 43 | + | ||
| 46 | 44 | ||
| 47 | ]] );?> | 45 | ]] );?> |
| 48 | 46 |
backend/web/js/check-price.js deleted
| 1 | +$(function(){ | ||
| 2 | + | ||
| 3 | + // для каждой строки обрабатываем клик по ссылке | ||
| 4 | + $('.modalButton').click(function (){ | ||
| 5 | + // находим контейнер с модальным контентом и подгружаем в него по оджаксу результат | ||
| 6 | + $('#modal').modal('show') | ||
| 7 | + .find('#modalContent') | ||
| 8 | + .load($(this).attr('value')); // в 'value' - у нас указан путь с гет параметрами к конроллеру | ||
| 9 | + }); | ||
| 10 | + | ||
| 11 | + $('.deleteLink').click(function () | ||
| 12 | + { | ||
| 13 | + if ( confirm('Вы уверены что хотите удалить этот файл?') ){ | ||
| 14 | + var data = $(this).attr('value');// здесь у нас id удаляемой модели | ||
| 15 | + | ||
| 16 | + $.post( 'delete',{'id':data} ) | ||
| 17 | + .done(function(result) { | ||
| 18 | + if(result == 1) | ||
| 19 | + { | ||
| 20 | + $.pjax.reload({container:'#server_files_grid'}); | ||
| 21 | + }else | ||
| 22 | + { | ||
| 23 | + $("#message").html(result); | ||
| 24 | + } | ||
| 25 | + }).fail(function() | ||
| 26 | + { | ||
| 27 | + console.log("server error"); | ||
| 28 | + }); | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + | ||
| 32 | + | ||
| 33 | + | ||
| 34 | +}); | ||
| 35 | +}); |