shiyang/yii2-infinite-scroll

Yii2 扩展,用于无限滚动 jQuery 插件,为如 ListView 这样的组件提供滚动功能。它渲染一个超链接,链接到目标页面的下一页,并注册无限滚动 jQuery 插件,使用 JavaScript 获取并附加后续页面的内容,当 JavaScript 被禁用时,将优雅地降级为完整页面重新加载。

安装次数: 3,094

依赖项: 1

建议者: 0

安全: 0

星标: 0

关注者: 3

分支: 19

开放问题: 0

类型:yii2-extension

v1.2 2015-04-20 02:44 UTC

This package is not auto-updated.

Last update: 2024-09-28 17:32:20 UTC


README

Yii2 扩展用于无限滚动 jQuery 插件,提供如 ListView 等组件的滚动功能。它渲染一个超链接,链接到目标页面的下一页,并注册无限滚动 jQuery 插件,该插件使用 JavaScript 获取并附加后续页面的内容,当 JavaScript 被禁用时,将优雅地降级为完整页面重新加载。

提供了一些允许自定义滚动行为的功能,包括 Twitter 风格的手动触发、在 overflow div 中的本地滚动、Masonry 集成等。

资源

安装

Composer

将扩展添加到您的 composer.json 并像通常一样更新依赖项,例如通过运行 composer update

{
    "require": {
        "shiyang/yii2-infinite-scroll": "*"
    }
}

##小部件配置

除了 LinkPager 提供的大部分属性外,此小部件还允许您配置

  • $widgetId 字符串 小部件所有者 ID,必需
  • $itemsCssClass 字符串 封装项目的标签的 CSS 类,必需
  • $pluginOptions 数组 无限滚动 jQuery 插件选项。有关更多信息,请参阅无限滚动 文档
  • $contentLoadedCallback 字符串|JsExpression 在通过 AJAX 调用加载内容时要执行的 JavaScript 回调

##示例用法

插件通过将获取的项目附加到父容器末尾来工作,因此需要配置父 ListView 小部件的 layout 属性,将 {items} 包装到具有某些类(用作选择器)的 div 容器中。可以根据项目要求配置所有小部件初始化插件时使用的选择器,但通常只需设置 itemCssClass(我们创建的包装标签的类)和 widgetId(这可以确保同一页面上不会发生多个插件的冲突)。

所以最小必需的配置看起来像这样

use shiyang\infinitescroll\InfiniteScrollPager;

echo ListView::widget([
    ...
    'id' => 'my-listview-id',
    'layout' => "{summary}\n<div class=\"items\">{items}</div>\n{pager}",
    'pager' => [
        'class' => InfiniteScrollPager::className(),
        'widgetId' => 'my-listview-id',
        'itemsCssClass' => 'items',
    ],
]);

一个示例,说明如何自定义某些小部件/插件选项

use shiyang\infinitescroll\InfiniteScrollPager;

echo ListView::widget([
    ...
    'id' => 'my-listview-id',
    'layout' => "{summary}\n<div class=\"items\">{items}</div>\n{pager}",
    'pager' => [
        'class' => InfiniteScrollPager::className(),
        'widgetId' => 'my-listview-id',
        'itemsCssClass' => 'items',
        'contentLoadedCallback' => 'afterAjaxListViewUpdate',
        'nextPageLabel' => 'Load more items',
        'linkOptions' => [
            'class' => 'btn btn-lg btn-block',
        ],
        'pluginOptions' => [
            'loading' => [
                'msgText' => "<em>Loading next set of items...</em>",
                'finishedMsg' => "<em>No more items to load</em>",
            ],
            'behavior' => InfiniteScrollPager::BEHAVIOR_TWITTER,
        ],
    ],
]);

或者

控制器操作

function actionIndex()
{
    $query = Article::find()->where(['status' => 1]);
    $countQuery = clone $query;
    $pages = new Pagination(['totalCount' => $countQuery->count()]);
    $models = $query->offset($pages->offset)
        ->limit($pages->limit)
        ->all();
    
    return $this->render('index', [
        'models' => $models,
        'pages' => $pages,
    ]);
}

视图

use shiyang\infinitescroll\InfiniteScrollPager;

<div id="content">
<?php 
foreach ($models as $model) {
    // display $model here
}
?>
</div>
 
// display pagination
echo InfiniteScrollPager::widget([
   	'pagination' => $pages,
   	'widgetId' => '#content',
]);

##许可

扩展在 MIT 许可下发布,与底层 jQuery 插件相同。