CSort - следуя канонам ООП

Уже исправленные репорты или принятые предложения
Ответить
xakki
Сообщения: 3
Зарегистрирован: 2013.03.20, 11:57

CSort - следуя канонам ООП

Сообщение xakki »

Разбираясь в CSort, меня смутил один момент (малозначимый для многих) - При инициализации он принимает только название модели!
К примеру- мой абстрактный класс в котором один метод, позволяющий сортировать и листать (фильтровать в будущем) модель

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

       // Доступные атрибуты для сортировки
    public function attributeSort()
    {
        return array_keys($this->attributeLabels());
    }

    // Данные для View
    public function getGridView($criteria=array())
    {
        $criteria = new \CDbCriteria($criteria);

        // TODO Фильтр

        $fullCount = $this->count($criteria);
        
        $attributeSort = $this->attributeSort();
        if(count($attributeSort))
        {
            // Сортировка
            $sort = new \CSort($this);
            $sort->attributes = $this->attributeSort();
            $sort->defaultOrder = $criteria->order;// задаем сортировку по умолчанию из criteria
            $criteria->order = ''; // Удаляем сортировку, чтоб потом её приминить
            $sort->applyOrder($criteria);
        }

        if($criteria->limit)
        {
            // Постраничка
            $pages = new \CPagination($fullCount);
            // элементов на страницу
            $pages->pageSize = $criteria->limit;
            $pages->applyLimit($criteria);
        }


        // выборка // listData()->
        $models = $this->findAll($criteria);

        return array(
            'models' => $models,
            'pages' => $pages,
            'sort' => $sort,
            'fullCount' => $fullCount
        );
    }
 
В примере я передаю CSort текущий объект.

А из коробки не позволяет такое проделать - и это, ИМХО, не удобно и не красиво. К тому же внутри CSort везде прописано "CActiveRecord::model($this->modelClass)" и получается он жестко привязан к CActiveRecord.

Вот мой вариан
https://github.com/Xakki/yii/commit/03d ... 5661339c02

+ ко всему я столкнулся с проблемой передать в defaultOrder строку - в итоге он просто игнорирует дефолтную сортировку и фикс для него там же.

Резюме - Стоит ли это продвигать в офф репозиторий? Какие могут возникнуть проблему у других если обновят это?
xakki
Сообщения: 3
Зарегистрирован: 2013.03.20, 11:57

Re: CSort - следуя канонам ООП

Сообщение xakki »

Пробовал с ходу залит в офф , но нужно проити кучу бюрократических инстанций, к тому же qiangxue посчитал что эти фиксы не нужны.
https://github.com/yiisoft/yii/pull/2222
Ответить