無限スクロールをさせる
開発環境:CakePHP2.5.1
TwitterやFacebookのタイムラインを見ていて、ページの下にいくと次から次に過去の記事が表示されていきます。
Googleなどの検索結果のような津城のページ送りとは違う、あのような自動のページ送りの実装方法を紹介します。
インフィニティスクロールを使う
今回はWordpressのプラグインにも使われるインフィニティスクロールを使います。
まず最初はGithub上に公開されているソースをダウンロードします。
https://github.com/paulirish/infinite-scroll
ファイルを設置
ダウンロードしたファイルを解凍して、中にある jquery.infinitescroll.min.js を webroot/js/ 配下に、ajax-loader.gif を /webroot/img/ 配下に設置します。
コントローラーでページネーション
まずはコントローラー側で通常のページネーションの仕組みを作ります。
<?php
public function scroll() {
$this->Paginator->settings = $this->paginate;
$samples = $this->Paginator->paginate('Sample');
$this->set(compact('samples'));
}
無限スクロールのJS
続いて、無限スクロールの動きをさせるJSを別ファイルで用意しておきます。
webroot/js/scroll.js というファイル名で下記の内容を書きます。
$(function() {
$("#contents").infinitescroll({
navSelector : '.navigation',
nextSelector : '.navigation a',
itemSelector : '.content',
loading : {
finishedMsg : '以上です',
img : '/img/ajax-loader.gif'
}
});
});
無限スクロールのビュー
最後にビューを設定します。
<?php echo $this->Html->script('jquery.infinitescroll.min', array('inline' => false)); ?>
<?php echo $this->Html->script('scroll', array('inline' => false)); ?>
<div id="contents">
<?php foreach($samples as $value): ?>
<div class="content">
<?php echo $value['Sample']['name']; ?>
</div>
<?php endforeach; ?>
<div class="navigation">
<?php echo $this->Paginator->next('次のページ'); ?>
</div>
</div>
これで、ページをスクロールしていくと、次から次にデータを読み込んでくれます。
