B
B
Benderm2016-10-25 11:01:46
Yii
Benderm, 2016-10-25 11:01:46

Is it possible to use SqlDataProvider with LinkPager in Yii2?

Hello!
There are several issues related to pagination and displaying posts.
1. Is it possible to use SqlDataProvider with LinkPager in Yii2? Those. is it possible to display records without ListView and GridView?
This option does not work. Page navigation is not displayed.
Controller:

$totalCount = Yii::$app->db->createCommand('SELECT COUNT(*) FROM tbl_testimonials')->queryScalar();
    
$query = 'SELECT * FROM tbl_testimonials';

        $dataProvider = new SqlDataProvider([
            'sql' => $query,
            //'params' => [':status' => 3],
            'totalCount' => (int)$totalCount,
            'pagination' => [
                // количество пунктов на странице
                'pageSize' => 2,
            ]
        ]);

Performance:
<?php
    echo \yii\widgets\LinkPager::widget([
        'pagination' => $dataProvider->pagination,
        'nextPageLabel'=>'вперед →',
        'prevPageLabel'=>'← назад'
    ]); ?>

2. In yii1 you could do something like:
$criteria=new CDbCriteria();
$result = Yii::app()->db->createCommand("SELECT COUNT(*) as cnt  FROM tbl_testimonials");
$count = $result->queryRow();
$pages=new CPagination($count['cnt']);
$pages->pageSize = 10;
$pages->applyLimit($criteria);

$command = Yii::app()->db->createCommand( "SELECT * FROM tbl_testimonials LIMIT :offset, :limit");
$command->bindValue(':offset', $pages->currentPage*$pages->pageSize);
$command->bindValue(':limit', $pages->pageSize);
$testimonials = $command->queryAll();

Further, in the view, the records were displayed, without any widgets. $pages were passed to CLinkPager.
Is it possible to display records in Yii2 in a similar way, without using AR, ActiveDataProvider and SqlDataProvider?

Answer the question

In order to leave comments, you need to log in

1 answer(s)
M
Maxim Timofeev, 2016-10-25
@webinar

LinkPager это виджет вполне самостоятельный, можете его без проблем использовать без всего остального, но в него надо передать экземпляр yii\data\Pagination, который несет в себе инфо о текущей станице, кол-ве записей и т.д. При этом использовать yii\data\Pagination можно как в составе ActiveDataProvider, так и без него.
Почему у Вас не работает сложно сказать. Надо понимать, что конкретно не работает? Не выводится виджет или не работают ссылки или есть ошибка? Что у Вас в $dataProvider->pagination?
Кстати в документации есть отличный пример использования без DataProvider:
www.yiiframework.com/doc-2.0/yii-data-pagination.html

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question