CActiveDataProvider и критерий LIMIT

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

CActiveDataProvider и критерий LIMIT

Сообщение Евгений »

Я читал на форуме про проблемы с $criteria->limit на форуме, но теперь сам столкнулся с ними при использовании CActiveDataProvider:

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

                    <?    
                        $limit = 3;
                        $this->widget('zii.widgets.CListView', array(
                            'dataProvider'=>$News = new CActiveDataProvider('News',array(
                                'criteria'=>array(
                                    'limit'=>':limit', 
                                    'params'=>array(':limit'=>(int)$limit),    //приведение типов не работает, без него тоже не работает, писал просто число в кавычках "3" не пашет
                                    'select'=>'header, text, date',
                                    'order' => 'date DESC',
                                ))),
                            'itemView'=>'/news/_announcement',
                            'template'=>"{items}\n{pager}",
                        )); 
                    ?>        
Кто нибудь сталкивался?
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: CActiveDataProvider и критерий LIMIT

Сообщение Ekstazi »

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

                    <?    
                        $limit = 3;
                        $this->widget('zii.widgets.CListView', array(
                            'dataProvider'=>$News = new CActiveDataProvider('News',array(
                                'criteria'=>array(
                                    'limit'=>(int)$limit, 
                                    'select'=>'header, text, date',
                                    'order' => 'date DESC',
                                ))),
                            'itemView'=>'/news/_announcement',
                            'template'=>"{items}\n{pager}",
                        )); 
                    ?>        
Евгений
Сообщения: 27
Зарегистрирован: 2010.02.25, 19:39

Re: CActiveDataProvider и критерий LIMIT

Сообщение Евгений »

так тоже не работает :(
Евгений
Сообщения: 27
Зарегистрирован: 2010.02.25, 19:39

Re: CActiveDataProvider и критерий LIMIT

Сообщение Евгений »

так что это баг?! или я не правильно что то сделал?
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: CActiveDataProvider и критерий LIMIT

Сообщение slavcodev »

Евгений писал(а):так что это баг?! или я не правильно что то сделал?
Нет это не баг.
Так как CActiveDataProvider это инструмент объединяющий в себе три класса CPagination, CDBCriteria, CSort, то limit для запроса он берет из класса CPagination, чтобы обеспечить разбивку на страницу.
Решений два, первое, если нужна пагинация то

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

$limit = 3;
$this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$News = new CActiveDataProvider('News',array(
    'pagination'=>array(
      'pageSize'=>$limit,
    ),
    'criteria'=>array(
      'select'=>'header, text, date',
      'order' => 'date DESC',
  ))),
  'itemView'=>'/news/_announcement',
  'template'=>"{items}\n{pager}",
)); 
Если пагинация не нужна, отключаем ее

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

$limit = 3;
$this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$News = new CActiveDataProvider('News',array(
      'pagination'=>false,
      'criteria'=>array(
        'limit'=>$limit, 
        'select'=>'header, text, date',
        'order' => 'date DESC',
   ))),
   'itemView'=>'/news/_announcement',
   'template'=>"{items}\n{pager}",
)); 
Жду Yii 3!
glamurchik
Сообщения: 65
Зарегистрирован: 2011.04.27, 21:39

Re: CActiveDataProvider и критерий LIMIT

Сообщение glamurchik »

а если нужна пагинация и лимит?
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: CActiveDataProvider и критерий LIMIT

Сообщение rak »

glamurchik писал(а):а если нужна пагинация и лимит?
то нужно использовать первый вариант
glamurchik
Сообщения: 65
Зарегистрирован: 2011.04.27, 21:39

Re: CActiveDataProvider и критерий LIMIT

Сообщение glamurchik »

Нашел вот такое решение

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

$criteria = new CDbCriteria;
        $dataProvider = new CActiveDataProvider('News', array(
            'criteria'=>$criteria,
            'pagination'=>array(
                'pageSize'=>6,
            ),
            'totalItemCount' => 12,
        )); 
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: CActiveDataProvider и критерий LIMIT

Сообщение rak »

glamurchik писал(а):Нашел вот такое решение

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

$criteria = new CDbCriteria;
        $dataProvider = new CActiveDataProvider('News', array(
            'criteria'=>$criteria,
            'pagination'=>array(
                'pageSize'=>6,
            ),
            'totalItemCount' => 12,
        ));
только если записей будет меньше 12, то пагинация будет работать неправильно
Ответить