コード例 #1
0
 public function actionSorting()
 {
     if (isset($_POST['tree'])) {
         $model = new Category();
         $this->performAjaxValidation($model);
         //при сортировке дерева параметры корня измениться не могут,
         //поэтоtму его вообще сохранять не будем
         $data = json_decode($_POST['tree']);
         array_shift($data);
         //получаем большие case для update
         $update = array();
         $nestedSortableFields = array('depth' => Category::DEPTH, 'left' => Category::LFT, 'right' => Category::RGT);
         foreach ($nestedSortableFields as $key => $field) {
             $update_data = CHtml::listData($data, 'item_id', $key);
             $update[] = "{$field} = " . SqlHelper::arrToCase('id', $update_data);
         }
         //обновляем всю таблицу, кроме рута
         $condition = Category::DEPTH . " > 1";
         $command = Yii::app()->db->commandBuilder->createSqlCommand("UPDATE `{$model->tableName()}` SET " . implode(', ', $update) . " WHERE {$condition}");
         $command->execute();
         echo CJSON::encode(array('status' => 'ok', 'redirect' => $this->createUrl('manage')));
         Yii::app()->end();
     }
     $this->render('sorting');
 }
コード例 #2
0
 public function actionSorting($root_id, $menu_id)
 {
     if (isset($_POST['tree'])) {
         $model = new MenuSection();
         $this->performAjaxValidation($model);
         //при сортировке дерева параметры корня измениться не могут,
         //поэтоtму его вообще сохранять не будем
         $data = json_decode($_POST['tree']);
         array_shift($data);
         //получаем большие case для update
         $update = [];
         $js_to_sql_mapping = ['depth' => 'level', 'left' => 'left', 'right' => 'right'];
         foreach ($js_to_sql_mapping as $js_field => $field) {
             $update_data = CHtml::listData($data, 'item_id', $js_field);
             $update[] = "t.{$field} = " . SqlHelper::arrToCase('id', $update_data, 't');
         }
         $in = implode(', ', array_values(CHtml::listData($data, 'item_id', 'item_id')));
         $condition = "t.level > 1";
         $command = Yii::app()->db->commandBuilder->createSqlCommand("UPDATE `{$model->tableName()}` as t SET " . implode(', ', $update) . " WHERE {$condition} AND t.id IN ({$in})");
         $command->execute();
         echo CJSON::encode(['status' => 'ok', 'redirect' => $this->createUrl('manage', ['menu_id' => $menu_id])]);
         Yii::app()->end();
     }
     $this->render('sorting', ['root_id' => $root_id, 'menu_id' => $menu_id]);
 }
コード例 #3
0
ファイル: ActionSort.php プロジェクト: nizsheanez/kur.ru
 public function run()
 {
     $model = $this->model;
     $class = get_class($model);
     if (isset($_POST['tree'])) {
         $this->controller->performAjaxValidation($model);
         //при сортировке дерева параметры корня измениться не могут,
         //поэтоtму его вообще сохранять не будем
         $data = json_decode($_POST['tree']);
         array_shift($data);
         //получаем большие case для update
         $update = array();
         $nestedSortableFields = array('depth' => $class::DEPTH, 'left' => $class::LFT, 'right' => $class::RGT);
         foreach ($nestedSortableFields as $key => $field) {
             $update_data = CHtml::listData($data, 'item_id', $key);
             if ($key == $class::DEPTH) {
                 foreach ($update_data as $key => $val) {
                     $update_data[$key]++;
                 }
             }
             $update[] = "{$field} = " . SqlHelper::arrToCase('id', $update_data);
         }
         //обновляем всю таблицу, кроме рута
         $condition = $class::DEPTH . " > 1";
         $command = Yii::app()->db->createCommand("UPDATE `{$model->tableName()}` SET " . implode(', ', $update) . " WHERE {$condition}");
         $command->execute();
         $this->controller->forward($this->forwardRoute, true);
     }
     $this->controller->render('sort', array('model' => $model, 'class' => $class));
 }
コード例 #4
0
 public function run()
 {
     $ids = array_reverse($_POST['File']);
     $files = new MediaFile('sort');
     $case = SqlHelper::arrToCase('id', array_flip($ids), 't');
     $arr = implode(',', $ids);
     Yii::app()->db->getCommandBuilder()->createSqlCommand("UPDATE {$files->tableName()} AS t SET t.order = {$case} WHERE t.id IN ({$arr})")->execute();
 }
コード例 #5
0
 public function setPositions($ids, $column, $start)
 {
     $model = $this->getOwner();
     $table = $model->tableName();
     $priorities = array();
     foreach ($ids as $id) {
         $priorities[$id] = $start--;
     }
     $case = SqlHelper::arrToCase('id', $priorities, $model->getTableAlias());
     $in = SqlHelper::in('id', $ids, $model->getTableAlias());
     $c = Yii::app()->db->commandBuilder->createSqlCommand("UPDATE {$table} AS t SET t.{$column} = {$case} WHERE {$in}");
     $c->execute();
 }
コード例 #6
0
 public function setPositions($ids, $column, $start)
 {
     list($table, $fk1, $fk2) = SqlHelper::parseManyMany($this->owner, $this->relation);
     $model = $this->getOwner();
     $table = $model->tableName();
     $priorities = array();
     foreach ($ids as $id) {
         $priorities[$id] = $start--;
     }
     $case = SqlHelper::arrToCase('id', $priorities, $model->getTableAlias());
     $c = Yii::app()->db->commandBuilder->createSqlCommand("UPDATE {$table} AS t SET t.{$column} = {$case}");
     $c->execute();
 }