Yii2 несколько ListView на одной странице - PullRequest
0 голосов
/ 01 сентября 2018

Я использую 2 widgets на одной странице, обе используют listview, одна для блогов, другая для страниц и обе используют ScrollPager. Я хочу показать больше button в каждом отдельно. Проблема в том, что кнопка «Показать больше» отображается только для страниц, но не для блога, если я удалю виджет страницы, который будет отображаться для блогов. Я пытаюсь показать больше шоу для страниц и показать больше для блогов. Я попытался pageParam, но проблема все еще существует.

виджет :

class UserPagesWidget extends \yii\base\Widget
{
    public $usr_id;

    public function run()
    {
        $dataProviderContent = new ActiveDataProvider([
            'query' =>  Post::find()->Where(['user_id' => $this->usr_id])
                    ->orderBy(['post_crdate' => SORT_DESC]),
            'pagination' => [
                'pageParam' => 'contentPagination',
                'pageSize' => 5,
            ],
        ]);

        return $this->render('/user/widget/pstList', [
            'dataProviderContent' => $dataProviderContent,
            ]);
    }
}

Визуализация файла :

<?= ListView::widget([
    'dataProvider' => $dataProviderContent,
    'summary'=>'',
    'itemOptions' => ['class' => 'item'], // LY - FOR ( LOAD MORE )
    'emptyText' => 'No Content',
    'itemView' => function ($model, $key, $index, $widget) {
                    return $this->render('/user/profileContent/usr-pst-content',['model' => $model]);
                },
    'pager' => ['class' => \kop\y2sp\ScrollPager::className()],
    ]);
?>

Виджет блога :

class UserBlogsWidget extends \yii\base\Widget
{
    public $usr_id;

    public function run()
    {
        $dataProviderBlog = new ActiveDataProvider([
            'query' =>  Blog::find()->Where(['user_id' => $this->usr_id])
                ->orderBy(['blog_update' => SORT_DESC]),
                'pagination' => [
                'pageParam' => 'blogPagination',
                'pageSize' => 6,
            ],
        ]);

        return $this->render('/user/widget/blgList', [
            'dataProviderBlog' => $dataProviderBlog,
        ]);
    }
}

Файл визуализации блога :

<?= ListView::widget([
    'dataProvider' => $dataProviderBlog,
        'summary'=>'',
        'itemOptions' => ['class' => 'item'], // LY - FOR ( LOAD MORE )
        'emptyText' => 'No Blogs',
        'itemView' => function ($model, $key, $index, $widget) {
                        return $this->render('/user/profileContent/usr-blg-content',['model' => $model]);
                    },
        'pager' => ['class' => \kop\y2sp\ScrollPager::className()],
    ]);
?>

Оба виджета вызываются в одном файле просмотра.

<div class="row chn-row">
    <div class="col-sm-12" style="padding:15px">
        <!-- separing -->
        <?= UserPagesWidget::widget(['usr_id' => $model->user_id]) ?>

        <!-- separing -->   
    </div>

    <div class="col-sm-12" style="padding:15px">
        <?= UserBlogsWidget::widget(['usr_id' => $model->user_id]) ?>
    </div>
</div>

Проблема в том, что показать больше button отображается только для страниц.

1 Ответ

0 голосов
/ 01 сентября 2018

Вам необходимо настроить селекторы, чтобы различать два виджета. По умолчанию ScrollPager использует некоторый универсальный селектор (.list-view), который будет соответствовать всем представлениям списка. Вы должны явно установить идентификатор для ListView виджетов и использовать его в ScrollPager config как селектор для инициализации виджетов.

<?= ListView::widget([
    // ...
    'dataProvider' => $dataProviderBlog,
    'options' => ['id' => 'blog-list-view'],
    'pager' => [
        'class' => \kop\y2sp\ScrollPager::className(),
        'container' => '#blog-list-view',
        'paginationSelector' => '#blog-list-view .pagination',
    ],
]) ?>
<?= ListView::widget([
    // ...
    'dataProvider' => $dataProviderContent,
    'options' => ['id' => 'content-list-view'],
    'pager' => [
        'class' => \kop\y2sp\ScrollPager::className(),
        'container' => '#content-list-view',
        'paginationSelector' => '#content-list-view .pagination',
    ],
]) ?>

См. https://kop.github.io/yii2-scroll-pager/#general-options

...